Android缓冲区的Gstreamer没有PTS

Android缓冲区的Gstreamer没有PTS,android,gstreamer,pipeline,rtsp,Android,Gstreamer,Pipeline,Rtsp,我创建了管道gst\u parse\u launch(“rtspsrc位置=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\”最大大小字节=20000000位置=/storage/emulated/0/DVR/CameraX/the

我创建了管道
gst\u parse\u launch(“rtspsrc位置=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\”最大大小字节=20000000位置=/storage/emulated/0/DVR/CameraX/the_文件\%d.mp4”,NULL)并且它在Gstreamer 1.9.1版上运行良好。出于其他一些原因,我想使用较新的版本,但对于上面的版本1.10.X和1.11.X,管道在工作几秒到几分钟之间的不确定时间后停止。Logcat输出如下:

gstqtmux.c:3391:gst\u qt\u mux\u add\u buffer:错误:buffer没有PTS

W/GStreamer+basesrc:0:01:06.383504349 0xb9380000 gstbasesrc.c:2950:gst_base_src_循环:错误:内部数据流错误

W/GStreamer+basesrc:0:01:06.383623672 0xb9380000 gstbasesrc.c:2950:gst_base_src_循环:错误:流停止,原因错误(-5)


我尝试了不同的相机型号。我删除了splitmuxsink并尝试使用mp4mux,但结果并没有改变。我更改了mp4mux的“presentation time”属性,但没有任何更改。

我偶然发现了您的问题,这似乎是由于源代码有问题(没有PTS),而gstreamer没有解决这些问题(这与此相关)

如果流中没有B帧,可以尝试
BaseParse.set_pts\u interpolation(h264parse,true)
,当计算pts时,问题可能会消失


PS:Tiny DVR使用此解决方案

我发布了详细的答案,缓冲区的解决方案在这里没有PTS问题,这消除了GStreamer的mp4mux责任,并利用GPac进行该操作。这可能是一个可行的解决办法。要点是从管道中删除
mp4mux
阶段,并在Gpac的MP4box中完成这些操作。适用于静态文件,对于流媒体应用程序可能没有那么大的希望