用Gstreamer播放RTSP流时出现问题

时间:2019-09-15 18:21:31

标签: raspberry-pi gstreamer rtsp ip-camera

硬件和软件:Raspberry Pi 4,IP摄像机,Raspbian Buster,Gstreamer 1.14.1(来自存储库)。 Raspberry和摄像头位于本地网络上。

我正在尝试通过以下管道运行RTSP视频流:

gst-launch-1.0 rtspsrc location='rtsp://web_camera_ip' ! rtph264depay ! h264parse ! v4l2h264dec ! autovideosink

在一分钟之内,播放停止。

日志:

0:00:00.681624278  1491 0xb4810980 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<fakesrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Progress of execution: (request) Sent PLAY request
0:00:01.155264612  1491 0xb1507fb0 WARN                    v4l2 gstv4l2object.c:4186:gst_v4l2_object_probe_caps:<v4l2h264dec0:src> Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: An inadmissible argument
0:00:01.166871436  1491 0xb1507fb0 WARN                    v4l2 gstv4l2object.c:4186:gst_v4l2_object_probe_caps:<v4l2h264dec0:src> Failed to probe pixel aspect ratio with VIDIOC_CROPCAP: An inadmissible argument
0:00:01.170107746  1491 0xb1507fb0 FIXME               basesink gstbasesink.c:3145:gst_base_sink_default_event:<autovideosink0-actual-sink-xvimage> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
0:00:01.174576265  1491 0xb1507fb0 WARN            v4l2videodec gstv4l2videodec.c:808:gst_v4l2_video_dec_decide_allocation:<v4l2h264dec0> Duration invalid, not setting latency
0:00:01.211967620  1491 0xb48105b0 WARN          v4l2bufferpool gstv4l2bufferpool.c:1189:gst_v4l2_buffer_pool_dqbuf:<v4l2h264dec0:pool:src> Driver should never set v4l2_buffer.field to ANY

此行在停止时显示:

0:00:13.102438914  1491 0xb48105b0 WARN           v4l2allocator gstv4l2allocator.c:1349:gst_v4l2_allocator_dqbuf:<v4l2h264dec0:pool:src:allocator> V4L2 provided buffer has bytesused 0 which is too small to include data_offset 0

我尝试过的方法(无助于解决问题)

  1. fakesink
  2. 替换 autovideosink
  3. avdec_h264_mmal
  4. 替换 v4l2h264dec
  5. 各种 rtspsrc 参数
  6. 使用 playbin
  7. 播放

如果将解码器替换为假接收器,则不会出现错误:

gst-launch-1.0 rtspsrc location='rtsp://web_camera_ip' ! rtph264depay ! h264parse ! fakesink

其他信息:

  1. 我的相机在图像上方显示时间(小时,分钟,秒)。 播放总是以一定的秒数停止。相机重新启动时,此值会随机更改-17,32,55 ... 更改相机中的时间并不能解决问题。

  2. Raspberry上的VLC播放器可以毫无问题地播放此摄像机中的视频流

  3. Gstreamer播放本地h264文件没有任何问题

  4. Gstreamer可以毫无问题地播放Internet上的RSTP电视频道广播。

  5. 我还尝试播放IP摄像机的子流(低分辨率)和智能手机(IP Webcam应用程序)的RTSP流。出现相同的问题。

  6. 在Raspberry 3上运行此项目(在SD卡上)时,问题仍然存在。

  7. 在具有Raspbian Stretch和来自存储库的Gstreamer 1.10的Raspberry 3上,没有问题。

谢谢您的回答!

2 个答案:

答案 0 :(得分:0)

问题出在我的本地网络中。来自任何设备的RTSP流会定期中断一秒钟。使用VLC播放器时,它不可见,因为它会立即重新开始广播。在这种情况下,Gstreamer会中断流并生成错误消息。

我已将IP摄像机通过以太网直接连接到Raspberry,一切正常。 互联网上的广播也很稳定。

答案 1 :(得分:0)

我遇到了同样的问题。幸运的是,它似乎已在gstreamer 1.16.2中修复。我使用以下脚本的变体构建 https://github.com/PietroAvolio/Building-Gstreamer-Raspberry-Pi-With-SRT-Support/blob/master/gstreamer-build.sh

使用1.16.2可以继续运行并且不会挂起。