我正在开发一个接受 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 version 0.37.0
>
> libva info: va_getDriverName() returns 0
>
> libva info: Trying to open /usr/lib64/dri/i965_drv_video.so
>
> libva info: Found init function __vaDriverInit_0_37
>
> libva info: va_openDriver() returns 0
>
> 0:00:04.597696251 23508 0x7f724003f940 WARN GST_PADS
> gstpad.c:3739:gst_pad_peer_query:<applicationSource:src> could not
> send sticky events
>
> 0:00:05.030818739 23508 0x7f724003f940 WARN basesrc
> gstbasesrc.c:2933:gst_base_src_loop:<applicationSource> error:
> Internal data flow error.
>
> 0:00:05.030864404 23508 0x7f724003f940 WARN basesrc
> gstbasesrc.c:2933:gst_base_src_loop:<applicationSource> **error:
> streaming task paused, reason not-negotiated (-4)**
>
> Error : Internal data flow error.
>
> 0:00:05.032763231 23508 0x7f724003f940 WARN baseparse
> gstbaseparse.c:1155:gst_base_parse_sink_event_default:<vaapih264parse0>
> error: No valid frames found before end of stream
>
> Error : No valid frames found before end of stream
正如我所强调的,由于谈判问题,管道没有启动
我已经测试了我的 Appsrc,它似乎正在工作(接收数据)。
有人可以建议任何其他插件来克服这个问题吗?
PS:我曾使用相机 v4l2src 插件尝试过此管道,并且该管道似乎运行状况良好!
任何帮助都会很好!
谢谢!
我修复了上述问题,这是由于 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