GStreamer shmsrc和x264enc不能一起工作

GStreamer shmsrc和x264enc不能一起工作,gstreamer,Gstreamer,我试图使用shmsink/shmsrc在两个GStreamer管道之间转发视频,并让接收端对视频进行编码 以下是发送端的命令行: gst-launch-0.10 -v videotestsrc \ ! 'video/x-raw-yuv, format=(fourcc)"I420", framerate=30/1, width=1280, height=720' \ ! shmsink socket-path=/tmp/xxx shm-size=10000000 wait-for-conn

我试图使用shmsink/shmsrc在两个GStreamer管道之间转发视频,并让接收端对视频进行编码

以下是发送端的命令行:

gst-launch-0.10 -v videotestsrc \
  ! 'video/x-raw-yuv, format=(fourcc)"I420", framerate=30/1, width=1280, height=720' \
  ! shmsink socket-path=/tmp/xxx shm-size=10000000 wait-for-connection=0 sync=false
以下是接收端的命令行:

gst-launch-0.10 -v shmsrc socket-path=/tmp/xxx \
  ! 'video/x-raw-yuv, format=(fourcc)"I420", framerate=30/1, width=1280, height=720' \
  ! x264enc
  ! filesink location=/tmp/yyy
问题是没有任何记录。管道似乎没有滚动。下面显示了输出消息:

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)1280, height=(int)720
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:src: caps = video/x-h264, width=(int)1280, height=(int)720, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, codec_data=(buffer)014d401fffe10018674d401feca02802dd8088000003000bb9aca00078c18cb001000468ebecb2, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)main
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)1280, height=(int)720
当我按如下方式删除x264enc时,管道正在滚动,输出文件/tmp/yyy正在增加

gst-launch-0.10 -v shmsrc socket-path=/tmp/xxx \
  ! 'video/x-raw-yuv, format=(fourcc)"I420", framerate=30/1, width=1280, height=720' \
  ! filesink location=/tmp/yyy
有趣的是,下面的输出消息显示了“New clock:GstSytemclock”,这是以前没有显示的

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)1280, height=(int)720
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)1280, height=(int)720
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

我不知道为什么管道不能与x264enc一起工作。任何帮助都将不胜感激。

从shmsrc输出的缓冲区的大小与任何使用
video/x-raw
caps的操作所需的视频帧边界大小不一致

在GStreamer 1.0中,添加了
rawvideoparse
元素,以允许收集完整的视频帧并将其推送到下游。我不相信gstreamer0.10有这个元素