воспроизведение RTP / TCP / AVP видеопотока на Android - PullRequest
3 голосов
/ 13 декабря 2010

Мы пытаемся воспроизвести видеопоток на платформе Android, но безуспешно.Используя VideoView, мы можем воспроизводить видео на мобильных устройствах YouTube (например, этот URL-адрес работает очень хорошо: rtsp: //v3.cache7.c.youtube.com/CjYLENy73wIaLQnMYzt2FtQmqxMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNol/0/0/0/0/0/0/0/0/0/0/1/0/1/0/0/1/1/0/1/0/0/0/1/0/1/0/0/1/1/0/1/1/0/1/1/1/1/1/1/1/1/1/1/1/1)

Однако нам нужно воспроизвести поток (с заданного URL RTSP), который мы не можем контролировать.Сервер RTSP доставляет пакеты RTP / TCP / AVP, чередующиеся по RTSP.Сам RTSP поддерживается через HTTP-туннелирование через порт 80. Видеоформат MPEG4-Part2 (H.263).Кроме того, URL-адрес RTSP может использоваться только один раз;построен с ключом-строкой каждый раз.В настольной системе quicktime может воспроизводить поток, а VLC - нет.

Возможно ли воспроизвести такой поток на устройстве Android как-нибудь?openCore?) RTP-стек поддерживает только RTP через UDP, а не TCP.Это (все еще) правда?Можно ли как-то обойти эту проблему?

Спасибо!Тури Андраш

Ответы [ 4 ]

0 голосов
/ 11 июня 2014

Я сейчас разрабатываю это @ https://net7mma.codeplex.com/

Это особенно уродливо, потому что RTSP Interleaved (RTP / AVP / TCP) требует нефиксированной длины контента, которая не подходит для метода туннелирования, предложенного Apple.

По данным Apple @ https://web.archive.org/web/20130501053040/https://developer.apple.com/quicktime/icefloe/dispatch028.html

Вы можете игнорировать Content-Length, но я бы хотел, чтобы больше усилий было направлено на использование опции ответа Multi-Part/Chunked и отправку каждого блока $ обратно в виде чанка, поскольку некоторые прокси будут наблюдать длину в content-length и закрываться соединение и во время чередования RTP это плохо!

0 голосов
/ 27 декабря 2011

Я экспериментирую с VLC, если вы как клиент открываете rtsp: // serveradress: port / path порт обычно 554 в vlc. Я никогда не использовал Android, но если у вас есть VLC, вы должны открыть сетевой поток и ввести формат адреса выше. попытаться выяснить, по какому потоку портов идет излучение, не должно быть 554. также убедитесь, что ваш брандмауэр не блокирует порт, который испускает поток.

здесь у вас есть документация vlc

документация vlc и vlc wiki

Удачи

0 голосов
/ 27 февраля 2013

У меня есть частичное решение для вас.

В настоящее время я работаю над проектом Ra & D, предусматривающим потоковую передачу RTP медиаданных с сервера на клиенты Android.

Выполняя эту работу, я добавляю свою библиотеку smpte2022lib, которую вы можете найти здесь: http://sourceforge.net/projects/smpte-2022lib/.

С помощью такой библиотеки (реализация Java на данный момент является лучшей), вы можете анализировать многоадресные потоки RTP, поступающие от профессионального потокового оборудования, сеансы VLC RTP, ...

Я уже успешно протестировал его с потоками, полученными из захваченных профессиональных RTP-потоков с помощью SMPTE-2022 2D-FEC, или с простыми потоками, сгенерированными с помощью VLC.

К сожалению, я не могу поместить сюда фрагмент кода, так как проект, использующий его, фактически защищен авторским правом, но я гарантирую, что вы можете использовать его просто, анализируя потоки UDP, которые помогли с конструктором RtpPacket.

Если пакеты являются действительными RTP-пакетами (байтами), они будут декодированы как таковые.

В этот момент я заключаю вызов конструктора RtpPacket в поток, который фактически сохраняет декодированную полезную нагрузку в виде медиа-файла. Затем я вызову VideoView с этим файлом в качестве параметра.

Скрещивание пальцев; -)

С уважением,

Дэвид Фишер

См. Также RTP на Android MediaPlayer

0 голосов
/ 08 января 2011

Если это просто UDP, вы можете перенаправить пакеты на локальный порт UDP (или каждый на отдельный порт, что, вероятно, упростит вещи для подачи во встроенный стек RTP).

VLC не может его воспроизвести может быть из-за аудиокодека, который он не поддерживает по умолчанию.Трудно узнать без подробностей.

...