Android缓冲区的Gstreamer没有PTS

时间:2017-03-18 12:57:24

标签: android gstreamer pipeline rtsp

我创建了管道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”属性,但没有任何变化。

1 个答案:

答案 0 :(得分:0)

我偶然发现了你的问题,这似乎是由于来源有问题(没有PTS)和gstreamer没有解决它们(这与gstreamer bug #659489有关)。

如果您的信息流中没有B帧,则可以尝试BaseParse.set_pts_interpolation(h264parse, true),并且在计算PTS时问题可能会消失。

PS:Tiny DVR使用此解决方法here