2010-06-01 3 views
0

Моя компания производит DVR, которые специализируются на потоковой передаче в реальном времени и записанном видео. Видео кодируется с использованием стандартных кодеков MPEG-4, поэтому кодеки в Android не должны беспокоиться о них. Тем не менее, видео записывается с использованием нестандартных форматов файлов и транслируется с использованием нашего проприетарного протокола (среди прочего, мы вставляем дополнительные данные, такие как водяные знаки с каждым кадром видео). Есть ли способ заставить мой поток вытащить фреймы и заставить его играть на устройстве Android?Потоковое видео с использованием нестандартных протоколов

Спасибо!

ответ

0

Android имеет java.net.Socket, поэтому теоретически вы можете написать клиент для запатентованного потока. Однако я не знаю, как вы могли бы использовать существующие функции воспроизведения Android (например, MediaPlayer). Кажется, он поддерживает воспроизведение файла или URL-адреса. InputStream заметно отсутствует.

0

Вы можете создать сокет, взять его «дескриптор файла» и передать его MediaPlayer.setDataSource().

Я действительно сделал что-то похожее на это некоторое время назад, поэтому этот подход проверяется в поле.

Я забыл, как извлечь дескриптор файла из сокета, но я думаю, что использование отражения - или, скорее всего, собственный код - вы можете получить член «» в сокете, который является LocalSocket или что-то еще, и имеет a 'fd' участник. Googling не нашел никого, описывающего это, так что вам нужно будет исследовать имена и данные конкретного пользователя сами.

Формат контейнера должен быть тем, что распознается системой Android; при необходимости вы можете использовать код native для создания pipe, чтобы вы могли переупаковать свой собственный контейнер в то, что Android поддерживает на лету, используя поток.

Мне кажется, что есть хорошие шансы, что Android будет играть «сырые» H.263 и H.264BP или что-то еще, но я не тестировал это. AVI явно не идеален для потоковой передачи - вам, возможно, придется разделить видео на короткие фрагменты AVI и продолжать заменять эти блоки - или вы можете изучить, поддерживает ли FLV или Matroska, но будьте осторожны - точное сочетание поддерживаемых форматов контейнеров может отличаться от устройства к устройству или от выпуска до выпуска.

0

Есть несколько библиотек с открытым исходным кодом, например ffmpeg/live555, которые могут решить ваши проблемы. Я работал над библиотекой ffmpeg для enode/decode аудио/видео файлов. для ffmpeg есть java porting. вы можете вытащить данные кадры вашего видео и метаданных (битрейт, уровень глубины и т. д.)

Смежные вопросы