ffmpeg: VL C не открывает файлы .sdp, созданные ffmpeg - PullRequest
0 голосов
/ 08 мая 2020

TL; DR: VL C или Quicktime не будет открывать файлы видеопотока .sdp, созданные с помощью ffmpeg, хотя ffplay делает это.

Веб-разработка и ffmpeg noob, поэтому приносим свои извинения, если Я использую неправильную терминологию:

Я пытаюсь передать свой захват рабочего стола (в OSX) с помощью ffmpeg, отправив его по протоколу rtp. На данный момент я просто тестирую его, передавая его через порт на моем локальном хосте (4000). И пытаюсь играть локально.

Проблема в том, что когда я пытаюсь открыть файл .sdp, созданный командой ffmpeg, VL C открывает его и сразу останавливается, без ошибок или чего-то еще, и показывает, что он имеет длительность 0: 00. Quicktime вообще не откроет файл.

ffplay воспроизводит поток, и я вижу свой рабочий стол в окне проигрывателя (хотя и со значительной потерей качества). Несмотря на это, есть масса предупреждений и ошибок, которые периодически появляются (обрисовано в общих чертах ниже)

Я не уверен, что это проблема в том, как я запускаю поток ffmpeg, команда после тонны итераций попыток просто заставить его работать, поэтому мои варианты могут быть неправильными.

команда для «обслуживания» захвата рабочего стола:

./ffmpeg -f avfoundation -s 1920x1080 -r 60 -i "1" -an \
-vcodec libx264 -preset ultrafast -tune zerolatency -pix_fmt yuv420p \
-sdp_file video.sdp -rtsp_transport tcp -f rtp rtp://127.0.0.1:4000

SDP файл, созданный с помощью команды ffmpeg:

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 58.29.100
m=video 4000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

команда ffplay, используемая для воспроизведения потока:

./ffplay -probesize 32 -analyzeduration 0 -sync ext \
-fflags nobuffer -fflags discardcorrupt -flags low_delay -framedrop \
-strict experimental -avioflags direct \
-protocol_whitelist file,rtp,udp -I video.sdp

Некоторое время перед запуском ffplay я вижу, что несколько этих ошибок повторяются (красным цветом):

[h264 @ 0x7ff6b788de00] non-existing PPS 0 referenced
[h264 @ 0x7ff6b788de00] decode_slice_header error
[h264 @ 0x7ff6b788de00] no frame!

тогда окно кажется «догоняет» поток и фактически показывает захват рабочего стола, и я получаю эти ошибки и предупреждения регулярно интервал:

1 - желтым цветом предупреждения:

[sdp @ 0x7fc85b830600] RTP: missed 4 packets
[sdp @ 0x7fc85b830600] max delay reached. need to consume packet

2 - красным цветом ошибки:

[h264 @ 0x7fc85b02aa00] out of range intra chroma pred mode
[h264 @ 0x7fc85b02aa00] error while decoding MB 132 32

(у меня такое ощущение, что ошибки связаны с предварительным просмотром захвата рабочего стола на рабочем столе, который я захватываю, и вызываю pi xels на дисплее для переполнения)

Изменить: Итак, я решил проблему вскоре после публикации, но оставлю это на тот случай, если кто-то столкнется с той же проблемой.

Решением было удалить верхнюю строку в файле .sdp, в которой говорилось: SDP:

1 Ответ

0 голосов
/ 08 мая 2020

Решение состояло в том, чтобы удалить верхнюю строку в файле .sdp, в которой говорилось: SDP:

, чтобы она выглядела так:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 58.29.100
m=video 4000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
...