
Я пытаюсь использовать 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