получить h.265 видеофайл из захвата rtp pcap - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь извлечь видеофайл из зашифрованного и незашифрованного файла h.265 rtsp / rtp pcap capture. Я попытался извлечь исходные данные потока rtp и попытался воспроизвести его с помощью vlc, но не работал. Есть ли способ получить видеофайл h.265 из захвата pcap.

1 Ответ

0 голосов
/ 07 августа 2019

На самом деле, это сложная вещь. Аналогичная концепция была реализована http://ucsniff.sourceforge.net/videosnarf.html для h264, но они не поддерживают h265, поэтому я принял метод. Основная идея заключается в том, что вы должны добавить некоторые части, которые отсутствуют.

Как упоминается в https://tools.ietf.org/html/rfc7798, заголовок выглядит так:

+---------------+---------------+
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F|   Type    |  LayerId  | TID |
+-------------+-----------------+

Необходимо добавить удаленный заголовок для каждого пакета элементарного потока, который составляет 4 байта (00 00 00 01).

Но мы все знаем, что пакеты h265 слишком длинные, и большинство из них фрагментированы, и, как я понимаю, такие проигрыватели, как VLC, не поддерживают фрагментацию. Таким образом, вы должны собрать их. Этот процесс предназначен только для фрагментированных типов пакетов (например, 49). У вас есть дополнительный заголовок, который выглядит так:

+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|S|E|  FuType   |
+---------------+

биты S и E говорят вам, как собрать пакеты. Первый пакет в последовательности имеет S, E = 1,0, а остальные продолжаются с S, E = 0,0 (может быть, несколько пакетов), а последний пакет имеет S, E = 0,1. Все байты полезной нагрузки объединяются, после чего создается новый заголовок путем замены типа в главном заголовке на упомянутый здесь FuType (не забывайте заголовок 4Byte):

+---------------+---------------+--------------
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--------------
|F|  FuType   |  LayerId  | TID | all the concatenated payloads
+-------------+-----------------+---------------

Просто помните, что вы должны сохранять как фрагментированную, так и нефрагментированную полезную нагрузку, поскольку большинство нефрагментированных пакетов содержат важную информацию, такую ​​как размер изображения, которая не может быть опущена. Элементарный поток может быть воспроизведен SMplayer или вы можете использовать VLC. Для VLC вы должны установить демультиплексор на h265.

...