使用appsrc和vaapiencode_h264插件时出现GStreamer Pipeline问题

时间:2015-11-21 21:18:52

标签: opencv gstreamer h.264 vaapi

我正在开发一个接受Opencv帧(通过opencv相机Api发起)的应用程序,并尝试在将它们编码为H264帧后将这些帧发送到网络中。

对于这个项目,我被要求通过硬件执行编码。

我使用下面的管道来做发送器的编码位:

gst-launch-1.0 appsrc name=applicationSource ! videoconvert ! video/x-raw,width=640,format=I420,height=480,framerate=15/1 ! vaapiencode_h264 ! vaapiparse_h264 config-interval=1 ! rtph264pay config-interval=1 ! gdppay ! tcpserversink host=127.0.0.1 port=5002 sync=false

我的Appsrc的上限是:

video/x-raw","format""RGB","width"640,"height",G_TYPE_INT,480,
                                               "framerate", 15, 1,
                                               "pixel-aspect-ratio" 1, 1,

当我尝试运行它时,此管道会给出以下错误:

  

libva info:VA-API版本0.37.0

     

libva info:va_getDriverName()返回0

     

libva info:试图打开/usr/lib64/dri/i965_drv_video.so

     

libva info:找到init函数__vaDriverInit_0_37

     

libva info:va_openDriver()返回0

     

0:00:04.597696251 23508 0x7f724003f940警告GST_PADS   gstpad.c:3739:gst_pad_peer_query:不能   发送粘性事件

     

0:00:05.030818739 23508 0x7f724003f940 WARN basesrc   gstbasesrc.c:2933:gst_base_src_loop:错误:   内部数据流错误。

     

0:00:05.030864404 23508 0x7f724003f940 WARN basesrc   gstbasesrc.c:2933:gst_base_src_loop:错误:   流媒体任务暂停,原因未协商(-4)

     

错误:内部数据流错误。

     

0:00:05.032763231 23508 0x7f724003f940 WARN baseparse   gstbaseparse.c:1155:gst_base_parse_sink_event_default:   错误:在流结束之前找不到有效的框架

     

错误:在流结束之前找不到有效的框架

正如我所强调的那样,由于谈判问题,管道无法启动

我测试了我的Appsrc,它似乎正在工作(接收数据)。

有人可以建议任何其他插件来克服这个问题吗?

PS:我用相机v4l2src插件试过这个管道,管道似乎运行状况良好!

任何帮助都会很好!

谢谢!

1 个答案:

答案 0 :(得分:1)

我修复了上述问题,这是由于gstreamer管道中缺少caps属性...

我已将appsrc插件的大写字母添加为:

video/x-raw","format""RGB","width"640,"height",G_TYPE_INT,480,
                                               "framerate", 15, 1,
                                               "pixel-aspect-ratio" 1, 1,

但我错过了

"interlace-mode",G_TYPE_STRING,"progressive",

选中v4l2src大写以验证: 这是通过启用调试

来实现的
--gst-debug=v4l2src:6

在这样的管道中运行它:

gst-launch-1.0 --gst-debug=v4l2src:6 v4l2src ! videoconvert ! video/x-raw,width=640,format=I420,height=480,framerate=15/1 ! vaapiencode_h264 ! vaapiparse_h264 config-interval=1 ! rtph264pay config-interval=1 ! gdppay ! tcpserversink host=127.0.0.1 port=5002 sync=false