как получить полезную нагрузку RTP, которая транспортируется по TCP (об удалении заголовка) - PullRequest
0 голосов
/ 28 декабря 2018

Я настраиваю вид медиаплеера.И я хочу получить данные RTP в пакете TCP для воспроизведения мультимедиа.

Для получения данных я должен удалить части заголовка.И я нашел 2 пути.

way [1] TCP-пакет

[$ - 1byte][Transport Channel - 1byte][RTP data length - 2bytes][RTP data]

way [2] TCP-пакет

в стандарте rfc4571 (https://tools.ietf.org/html/rfc4571#page-3)

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
---------------------------------------------------------------
|             LENGTH            |  RTP or RTCP packet ...     |
---------------------------------------------------------------

Я обнаружил две структуры пакета tcp. Поэтому, если я следую пути [1], я должен удалить 4 байта (1 + 1 + 2), но пути [2], я должен удалить только 2 байта.

На самом деле, я реализую свою программу следующим образом [1], но в gst-plugins-good, плагин rtpstreamdepay реализует следующий путь [2] и Android также.

Так что удаление 2 байтов является жестким? Или это старый и новый стандарт?

1 Ответ

0 голосов
/ 28 декабря 2018

Если я правильно помню, вы смотрите здесь на две разные вещи.

Путь 1: Означает чередование RTSP.Таким образом, все каналы RTP / RTCP передаются через управляющее соединение RTSP.Поскольку в этом случае вы имеете дело с одним соединением, вам нужна дополнительная информация, к какому каналу связи относятся данные, которые вы отправляете.

Способ 2: Это просто кадрирование TCP для данных UDP.Поскольку TCP является непрерывным потоком, вы упускаете информацию о неявной длине, которую предоставляют дейтаграммы UDP.Поскольку сам протокол не имеет такой информации сам по себе, он тем самым предоставляется 16-битным полем перед фактической полезной нагрузкой.

...