Вопрос по android, voip – Отправить Android h264 захват через поток rtp

3

Я пишу видеопоток rtp для Android, который считывает закодированные данные h264 из локального сокета Android и упаковывает их. Дело в том, что я сделал это, но я продолжаю получать черные рамки на стороне клиента (Voip).

Общение происходит так: Android - & gt; Звездочка - & gt; Джитси (Osx) (и наоборот)

Есть несколько вещей, которые я еще не понял:

1) Медиа-рекордер Android дает мне сырой поток h264. Как я могу узнать, когда NAL начинается / заканчивается на основе этого потока? У него нет шаблона 0x000001, но есть 0x0000 (который, я предполагаю, является разделителем).

EDIT:

Добавляем больше информации. Это 2 (первый, второй) различные чтения входного буфера (по порядку). Если я правильно понял, первые 4 байта должны использоваться для получения длины NALU, а 5-й (индекс 4) - заголовок NALU.

Я скопирую здесь значения байтов для будущего использования:

1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 .....

   length = (114&0xFF) + (12&0xFF)*256 + (0&0xFF)
   length -> 3186

   forbidden = 101 & 0x80
   forbidden -> 0

   nri = 101 & 0x60
   nri -> 96

   nal_unit_type = 101 & 0x1F
   nal_unit_type -> 5


2) 0 0 1 -93 97 -32 32 103 -14 93 -1 .... 

   length = (-93&0xFF) + (1&0xFF)*256 + (0&0xFF)
   length -> 419

   forbidden = 97 & 0x80
   forbidden -> 0

   nri = 97 & 0x60
   nri -> 96

   nal_unit_type = 97 & 0x1F
   nal_unit_type -> 1

это правильно?

2) Как я могу получить метку времени NALu и ее длину из этого потока?

3) По какой-то причине пакеты помечаются (даже когда я сбрасываю маркер). (Если вы проверите файл pcap) [FIXED: Я не использовал один и тот же SSCR для каждого пакета]

Вот этоPCAP захват потока, поступающего со звездочки (которая идет с Android). Android-устройство представляет собой Asus Transform Prime с Android ICS.

Я отправляю режим пакетирования (1) и идентификатор уровня профиля (42801e) в sdp я также пытался отправить sprops (sps:Z0KAHpWgUHxApsp:aM48gA==), но ничего не изменилось.

Приветствия.

Ваш Ответ

1   ответ
0

1) Нет "формата потока android h264". RFC6184 если RTP используется в качестве транспортного протокола. Стартовый код отсутствует в формате полезной нагрузки RTP. То, что содержится в RTP-пакете, полностью зависит от режима пакетирования, который указывает, могут ли единицы NAL быть агрегированными, фрагментированными и т. Д. Прочтите раздел RFC на режимы пакетирования для получения дополнительной информации. Режим пакетирования обычно передается через SDP.

2) Метка времени является частью заголовка RTP. Длина блока NAL снова зависит от режима пакетирования.

3) Что вы подразумеваете под пометкой? Вы имеете в виду, что бит маркера RTP установлен? Если это так, это снова должно соответствовать правилам, изложенным в RFC.

Похожие вопросы