尝试从 IP 摄像机检索 RTSP 流时出错(处理输入时发现无效数据)

尝试从 IP 摄像机检索 RTSP 流时出错(处理输入时发现无效数据)

我正在努力尝试让 FFMPEG 与中国 IP CAMERA(品牌:Victure,型号:PC730)配合使用。

我已经能够从此相机获取并解码 RTSP 流(url 类似于 rtsp://user:passw@IP:554/ - 无需其他子路径)。不同的软件能够解码此流,例如 VLC 和 ONVIF 设备管理器,但我想使用 FFMPEG 在我的 Raspberry 中设置转码,因为我成功地将它与我所有其他相机一起使用。

我也尝试过强制使用 UDP 或 TCP 传输,但没有成功。以下是一些日志:

root@AlRaspiCG:~# ffmpeg -loglevel debug -i rtsp://admin:*****@192.168.199.83:554
ffmpeg version 3.2.14-1~deb9u1+rpt1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516
  configuration: --prefix=/usr --extra-version='1~deb9u1+rpt1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-omx-rpi --enable-mmal --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --arch=armhf --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 34.101 / 55. 34.101
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.101 / 57. 56.101
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-i' ... matched as input url with argument 'rtsp://admin:*****@192.168.199.83:554'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url rtsp://admin:*****@192.168.199.83:554.
Successfully parsed a group of options.
Opening an input file: rtsp://admin:*****@192.168.199.83:554.
[tcp @ 0x6733f0] No default whitelist set
[rtsp @ 0x6715b0] SDP:
v=0
o=- -1946251731 -1946251731 IN IP4 192.168.199.83
t=0 0
c=IN IP4 192.168.199.83
a=packetization-supported:Puwell
m=video 0 RTP/AVP 96
a=control:trackID=0
a=rtpmap:96 H264/90000
a=framerate:0S
a=fmtp:96 profile-level-id=640028; packetization-mode=1; sprop-parameter-sets=Z2QAKKw7UDwBE/LCAAADAAIAAAMAUQg=,aO484QBCQgCEhARMUhuTxXyfk/k/J8nm5MkkLCJCkJyeT6/J/X5PrycmpMA=
m=audio 0 RTP/AVP 8
a=control:trackID=1
a=rtpmap:8 PCMA/8000

[rtsp @ 0x6715b0] video codec set to: h264
[rtsp @ 0x6715b0] RTP Profile IDC: 64 Profile IOP: 0 Level: 28
[rtsp @ 0x6715b0] RTP Packetization Mode: 1
[rtsp @ 0x6715b0] Extradata set to 0x671c00 (size: 75)
[rtsp @ 0x6715b0] audio codec set to: pcm_alaw
[rtsp @ 0x6715b0] audio samplerate set to: 8000
[rtsp @ 0x6715b0] audio channels set to: 1
[rtp @ 0x6735a0] No default whitelist set
[udp @ 0x673510] No default whitelist set
[udp @ 0x673510] end receive buffer size reported is 131072
[udp @ 0x685e70] No default whitelist set
[udp @ 0x685e70] end receive buffer size reported is 131072
rtsp://admin:*****@192.168.199.83:554: Invalid data found when processing input

下图是流式传输此 RTSP 时来自 VLC 播放器的信息 流信息

我的问题是:

  • 我怎样才能更好地排除导致 FFMPEG 无法正确解码此 RTSP 流的问题?
  • 如何修复或找到解决方法?我的第一个目标是让这台相机在 RASPI 上的 Shinobi NVR 内工作,因为我只需要添加这台相机即可完成我的设置。

答案1

我发现了一种使用 VLC 的解决方法。

基本上,VLC 打开损坏的 RTSP 流并将其转码为新的 RTSP 流。我使用了以下命令:

cvlc -vvv rtsp://admin:#####@192.168.#.#:554/realmonitor --sout "#rtp{dst=192.168.#.#,port=1234,sdp=rtsp://192.168.#.#:16983/cam3.sdp}" 它正在通过 Raspberry Pi 4 中的 systemd 服务运行。

然而,这个解决方案既不优雅也不稳定,但它在任何地方都有效。Stream 经常会卡顿,但这是我能想到的最好的解决方案。

欢迎任何进一步的改进。

PS:同样适用于第二台 Victure 摄像机。因此,这不是单一型号的问题(或者可能是破坏 RTSP 流的精确选择。。)

相关内容