Потоковое видео с использованием нестандартных протоколов - PullRequest
0 голосов
/ 01 июня 2010

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 июня 2010

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

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

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

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

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

0 голосов
/ 01 марта 2012

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

0 голосов
/ 01 июня 2010

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

...