TLDR:即使ffplay播放,VLC或Quicktime也不会打开ffmpeg生成的.sdp视频流文件。
Web开发和ffmpeg菜鸟,如果我使用了错误的术语,则表示歉意:
我正在尝试使用ffmpeg传输我的桌面捕获(在OSX上),并通过rtp协议将其发送出去。截至目前,我只是通过在本地主机(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:
的第一行>
TLDR:Vff或Quicktime不会打开ffmpeg生成的.sdp视频流文件,即使ffplay也可以。网络开发和ffmpeg新手,如果使用了错误的术语,敬请原谅:我正在尝试...
解决方案是删除.sdp文件中显示SDP:
的第一行>
因此它应该显示为: