如何重新启动tee分支(WARN没有h264上限的codec_data)?

时间:2016-07-29 07:30:01

标签: gstreamer

我在IMX上有一个管道,有两个摄像头作为流源,一个图像合成器,几个输出链接在三通上,一个在UDP上,一个在文件链中,最后一个在hlssink中用于通过http流服务器。这是管道:

imxv4l2videosrc device=/dev/video2 ! queue ! pa_compositor.sink_1
imxv4l2videosrc device=/dev/video3 ! queue ! pa_compositor.sink_2
imxg2dcompositor background-color=0x000000
sink_1::width=400 sink_1::height=300
sink_2::width=400 sink_2::height=300
queue ! video/x-raw,width=800,height=600 ! imxipuvideotransform ! imxvpuenc_h264 bitrate=3000 !
tee
pa_tee. ! queue name=mp4_queue ! h264parse ! mp4mux ! filesink location=/home/root/pa_camera.mp4
pa_tee. ! queue ! mpegtsmux ! hlssink playlist-root=http://192.168.44.110/hls 
pa_tee. ! queue ! rtph264pay ! udpsink host=192.168.44.63

我需要在给定的tee分支上启动/停止输出,例如mp4mux。 到目前为止,当用户想要禁用mp4mux时,我只需在mp4_queue接收器上发送一个EOS。这样我就可以检索目标文件/home/root/pa_camera.mp4,它是有效的。

当我想重新启动tee分支时会出现问题。我试图在GST_STATE_NULL中设置状态tee分支元素,然后是GST_STATE_PLAYING。然后我在日志中获得以下错误:

WARN       codecparsers_h264 gsth264parser.c:1691:gst_h264_parser_parse_slice_hdr: couldn't find associated picture parameter set with id: 0
WARN       qtmux gstqtmux.c:3093:gst_qt_mux_video_sink_set_caps:<video_mp4mux_1> no codec_data in h264 caps
WARN       qtmux gstqtmux.c:3245:gst_qt_mux_video_sink_set_caps:<video_mp4mux_1> pad video_0 refused caps video/x-h264, stream-format=(string)avc, alignment=(string)au, parsed=(boolean)true, width=(int)800, height=(int)600, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1

我还试图通过在tee源上添加的阻塞探测发送EOS,并在文件链接上的事件探测中将tee元素设置为NULL / PLAYING状态,如gstreamer API文档中所建议的那样。相同的结果:分支无法重新启动。

我错过了什么?

谢谢,

etienne

1 个答案:

答案 0 :(得分:0)

AVC格式的H264在其大写字母中应该有一个codec_data字段。你第一次跑的时候有吗?

如果您尝试:gst-launch-1.0 videotestsrc num-buffers=100 ! x264enc ! "video/x-h264, stream-format=(string)avc" ! fakesink -v,您应该会看到大写字母中印有codec_data。

我首先检查首次亮起,如果第二次连接打击垫时它改变了。可能是编码器或h264parse的问题。