【发布时间】:2020-08-24 11:39:49
【问题描述】:
TLDR:VLC 或 Quicktime 不会打开 ffmpeg 生成的 .sdp 视频流文件,即使 ffplay 可以。
Web 开发和 ffmpeg 菜鸟,如果我使用了错误的术语,请见谅:
我正在尝试使用 ffmpeg 流式传输我的桌面捕获(在 OSX 上),并通过 rtp 协议将其发送出去。 到目前为止,我只是通过在我的 localhost (4000) 中的一个端口上流式传输它来测试它。并尝试在本地播放。
问题是当我尝试打开 ffmpeg 命令生成的 .sdp 文件时,VLC 打开它并立即停止,没有错误或任何东西,并显示它的持续时间为 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
使用 ffmpeg 命令生成的 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
用于播放流的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
(感觉上面的错误与在我正在捕获的桌面中预览桌面捕获并导致显示中的像素溢出有关)
编辑: 所以,我在发布后很快就解决了这个问题,但如果有人遇到同样的问题,我会留下来。
解决方案是删除 .sdp 文件中显示 SDP: 的第一行
【问题讨论】: