对ffmpeg / ffplay客户端RTSP RTP UDP *多播*问题进行故障排除

问题描述

使用ffmpeg或ffplay作为网络摄像头的客户端使用udp_multicast传输方法时遇到问题。

TCP传输有效:

ffplay -rtsp_transport tcp rtsp://192.168.1.100/videoinput_1/mjpeg_3/media.stm

UDP传输有效:

ffplay -rtsp_transport udp rtsp://192.168.1.100/videoinput_1/mjpeg_3/media.stm

多播传输不起作用:

ffplay -rtsp_transport udp_multicast rtsp://192.168.1.100/videoinput_1/mjpeg_3/media.stm

选择udp_multicast时的错误消息为:

[rtsp @ 0x7fd6a8000b80] Could not find codec parameters for stream 0 (Video: mjpeg,none(bt470bg/unkNown/unkNown)): unspecified size

使用-v debug运行:即使此传输所选的传输是单播的,也应观察到UDP多播信息出现在SDP中。对于单播或多播,SDP内容不变。

[tcp @ 0x7f648c002f40] Starting connection attempt to 192.168.1.100 port 554
[tcp @ 0x7f648c002f40] Successfully connected to 192.168.1.100 port 554
[rtsp @ 0x7f648c000b80] SDP:
v=0
o=- 621355968671884050 621355968671884050 IN IP4 192.168.1.100
s=/videoinput_1:0/mjpeg_3/media.stm
c=IN IP4 0.0.0.0
m=video 40004 RTP/AVP 26
c=IN IP4 237.0.0.3/1
a=control:trackID=1
a=range:npt=0-
a=framerate:25.0

Failed to parse interval end specification ''
[rtp @ 0x7f648c008e00] No default whitelist set
[udp @ 0x7f648c009900] No default whitelist set
[udp @ 0x7f648c009900] end receive buffer size reported is 425984
[udp @ 0x7f648c019c80] No default whitelist set
[udp @ 0x7f648c019c80] end receive buffer size reported is 425984
[rtsp @ 0x7f648c000b80] setting jitter buffer size to 500
[rtsp @ 0x7f648c000b80] hello state=0
Failed to parse interval end specification ''
[mjpeg @ 0x7f648c0046c0] marker=d8 avail_size_in_buf=145103 
[mjpeg @ 0x7f648c0046c0] marker parser used 0 bytes (0 bits)
[mjpeg @ 0x7f648c0046c0] marker=e0 avail_size_in_buf=145101
[mjpeg @ 0x7f648c0046c0] marker parser used 16 bytes (128 bits)
[mjpeg @ 0x7f648c0046c0] marker=db avail_size_in_buf=145083
[mjpeg @ 0x7f648c0046c0] index=0
[mjpeg @ 0x7f648c0046c0] qscale[0]: 5
[mjpeg @ 0x7f648c0046c0] index=1
[mjpeg @ 0x7f648c0046c0] qscale[1]: 10
[mjpeg @ 0x7f648c0046c0] marker parser used 132 bytes (1056 bits)
[mjpeg @ 0x7f648c0046c0] marker=c4 avail_size_in_buf=144949
[mjpeg @ 0x7f648c0046c0] marker parser used 0 bytes (0 bits)
[mjpeg @ 0x7f648c0046c0] marker=c0 avail_size_in_buf=144529
[mjpeg @ 0x7f648c0046c0] Changing bps from 0 to 8
[mjpeg @ 0x7f648c0046c0] sof0: picture: 1920x1080
[mjpeg @ 0x7f648c0046c0] component 0 2:2 id: 0 quant:0
[mjpeg @ 0x7f648c0046c0] component 1 1:1 id: 1 quant:1
[mjpeg @ 0x7f648c0046c0] component 2 1:1 id: 2 quant:1
[mjpeg @ 0x7f648c0046c0] pix fmt id 22111100
[mjpeg @ 0x7f648c0046c0] Format yuvj420p chosen by get_format().
[mjpeg @ 0x7f648c0046c0] marker parser used 17 bytes (136 bits)
[mjpeg @ 0x7f648c0046c0] escaping removed 676 bytes
[mjpeg @ 0x7f648c0046c0] marker=da avail_size_in_buf=144510
[mjpeg @ 0x7f648c0046c0] marker parser used 143834 bytes (1150672 bits)
[mjpeg @ 0x7f648c0046c0] marker=d9 avail_size_in_buf=2
[mjpeg @ 0x7f648c0046c0] decode frame unused 2 bytes
[rtsp @ 0x7f648c000b80] All info found vq=    0KB sq=    0B f=0/0
[rtsp @ 0x7f648c000b80] rfps: 24.416667 0.018101
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.500000 0.013298
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.583333 0.009235
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.666667 0.005910
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.750000 0.003324
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.833333 0.001477
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 24.916667 0.000369
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.000000 0.000000
[rtsp @ 0x7f648c000b80] rfps: 25.083333 0.000370
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.166667 0.001478
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.250000 0.003326
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.333333 0.005912
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.416667 0.009238
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.500000 0.013302
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 25.583333 0.018105
    Last message repeated 1 times
[rtsp @ 0x7f648c000b80] rfps: 50.000000 0.000000
[rtsp @ 0x7f648c000b80] Setting avg frame rate based on r frame rate
Input #0,rtsp,from 'rtsp://192.168.1.100/videoinput_1/mjpeg_3/media.stm':
  Metadata:
    title           : /videoinput_1:0/mjpeg_3/media.stm
  Duration: N/A,start: 0.000000,bitrate: N/A
    Stream #0:0,21,1/90000: Video: mjpeg (Baseline),1 reference frame,yuvj420p(pc,bt470bg/unkNown/unkNown,center),1920x1080 [SAR 1:1 DAR 16:9],0/1,25 fps,25 tbr,90k tbn,90k tbc
[mjpeg @ 0x7f648c02ad80] marker=d8 avail_size_in_buf=145103

这里是使用udp_multicast时的同一调试部分。 SDP与上面提到的相同,并且完全丢失了包含[mjpeg]编解码器信息的SDP之后的块(以marker = d8开头)-流从未被识别。 (在眼中)这是瞬间发生的,没有迹象表明等待RTP数据包超时失败,尽管这也可能只是驱动程序中的调试信息不​​足。还要注意,ffmpeg知道帧是MJPEG帧,而颜色原色是PAL,只是不知道大小。同样奇怪,但与问题无关的是,用于流的单播UDP传输目标端口没有出现在上面显示的ffmpeg调试转储中,这意味着RTSP / RTP驱动程序的一部分在和服下隐藏了重要信息,即该端口号以及如何知道这些帧将为MJPEG。

[tcp @ 0x7effe0002f40] Starting connection attempt to 192.168.1.100 port 554
[tcp @ 0x7effe0002f40] Successfully connected to 192.168.1.100 port 554
[rtsp @ 0x7effe0000b80] SDP:aq=    0KB vq=    0KB sq=    0B f=0/0
v=0
o=- 621355968671884050 621355968671884050 IN IP4 192.168.1.100
s=/videoinput_1:0/mjpeg_3/media.stm
c=IN IP4 0.0.0.0
m=video 40004 RTP/AVP 26
c=IN IP4 237.0.0.3/1
a=control:trackID=1
a=range:npt=0-
a=framerate:25.0

Failed to parse interval end specification ''
[rtp @ 0x7effe0008e00] No default whitelist set
[udp @ 0x7effe0009900] No default whitelist set
[udp @ 0x7effe0009900] end receive buffer size reported is 425984
[udp @ 0x7effe0019c40] No default whitelist set
[udp @ 0x7effe0019c40] end receive buffer size reported is 425984
[rtsp @ 0x7effe0000b80] setting jitter buffer size to 500
[rtsp @ 0x7effe0000b80] hello state=0
Failed to parse interval end specification '' 
[rtsp @ 0x7effe0000b80] Could not find codec parameters for stream 0 (Video: mjpeg,none(bt470bg/unkNown/unkNown,center)): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0,1/90000: Video: mjpeg,90k tbr,90k tbc
    nan M-V:    nan fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0

这是流量的TCPDUMP。两个流中的信息看起来都相同。

19:21:30.703599 IP 192.168.1.100.64271 > 192.168.1.98.5239: UDP,length 60
19:21:30.703734 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.703852 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704326 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704327 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704504 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704813 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704814 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 1400
19:21:30.704872 IP 192.168.1.100.64270 > 192.168.1.98.5238: UDP,length 732
19:21:30.704873 IP 192.168.1.100.59869 > 237.0.0.3.40005: UDP,length 60
19:21:30.705513 IP 192.168.1.100.59868 > 237.0.0.3.40004: UDP,length 1400
19:21:30.705513 IP 192.168.1.100.59868 > 237.0.0.3.40004: UDP,length 1400
19:21:30.705594 IP 192.168.1.100.59868 > 237.0.0.3.40004: UDP,length 1400
19:21:30.705774 IP 192.168.1.100.59868 > 237.0.0.3.40004: UDP,length 1400
19:21:30.706236 IP 192.168.1.100.59868 > 237.0.0.3.40004: UDP,length 732

我希望这是一个配置问题,我可以在ffplay / ffmpeg行中解决此问题,这不是ffmpeg中的错误。感谢您的提示

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...