我创建了管道gst_parse_launch("rtspsrc location=rtsp://192.168.0.77:554/user=admin_password_=tlJwpbo6_channel=1_stream=0.sdp?real_stream ! queue !rtph264depay ! h264parse ! splitmuxsink muxer=\"mp4mux name=muxer\" max-size-bytes=20000000 location=/storage/emulated/0/DVR/CameraX/the_file_%d.mp4",NULL);
,它与Gstreamer版本1.9.1一起使用。我想出于某些其他原因使用较新的版本,但是上述版本1.10.X和1.11.X管道在工作了几秒到几分钟之间的某些不确定时间后停止。 Logcat输出在这里:
gstqtmux.c:3391:gst_qt_mux_add_buffer:错误:缓冲区没有PTS。
W / GStreamer + basesrc:0:01:06.383504349 0xb9380000 gstbasesrc.c:2950:gst_base_src_loop:错误:内部数据流错误。
W / GStreamer + basesrc:0:01:06.383623672 0xb9380000 gstbasesrc.c:2950:gst_base_src_loop:错误:流停止,原因错误(-5)
我试过不同的相机型号。我删除了splitmuxsink并尝试使用mp4mux但结果没有改变。我更改了mp4mux的“presentation-time”属性,但没有任何变化。
答案 0 :(得分:0)
我偶然发现了你的问题,这似乎是由于来源有问题(没有PTS)和gstreamer没有解决它们(这与gstreamer bug #659489有关)。
如果您的信息流中没有B帧,则可以尝试BaseParse.set_pts_interpolation(h264parse, true)
,并且在计算PTS时问题可能会消失。
PS:Tiny DVR使用此解决方法here