Как сделать поток ffmpeg h264 с PPS и SPS в потоке RTP

Как сделать поток ffmpeg h264 с PPS и SPS в потоке RTP

Я пытаюсь использовать ffmpeg для получения потока h264 по RTSP и пересылки этого потока как многоадресного rtp-потока. Я могу получить поток и вывести его как многоадресный rtp-поток с помощью следующей команды: ffmpeg -i rtsp://10.255.11.203/ProfileToken_1_1 -vcodec copy -an -f rtp rtp://230.255.10.25:50000

Входящий поток содержит пакеты SPS PPS и SEI. Я не могу заставить ffmpeg выводить и их.

Я экспериментировал с -flags global_headerпараметром для включения и отключения глобального заголовка, и я пробовал добавлять его, но -bsf h264_mp4toannexbэто не сработало, так как входящий поток уже является Annex-B.

решение1

Содержатся ли они во входящем потоке или они просто не нужны?

Если вы получаете поток через RTSP, вы, вероятно, получаете поток RTP, в котором нет этих пакетов. Ваш клиент должен был подключиться через RTCP, чтобы получить SDP, описывающий эти потоки, поскольку PPS и SPS обычно являются одноразовыми на поток, если только вы не меняете разрешения, частоту кадров и т. д.

Запустите команду, которую вы запускали, но в выводе ffmpeg вы увидите такой раздел:

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 239.100.200.100
t=0 0
a=tool:libavformat 56.40.101
m=video 10000 RTP/AVP 96
b=AS:3027
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAM6xyBEB4AiflwEQAAAMABAAAAwDAPGDGEYA=,aOhDssiw; profile-level-id=640033

Все, что находится после строки SDP, необходимо сохранить в файл filename.sdp. Чтобы подключиться к потоку, кому-то нужно просто открыть файл:

ffplay -i filename.sdp

Если вы разместите файл на сервере, они смогут открыть адрес:

ffplay -i http://yourhost/filename.sdp

Связанный контент