使用Gstreamer 作为数据源输出视频数据 VI 集成gstreamer
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Gstreamer 作为数据源输出视频数据 VI 集成gstreamer相关的知识,希望对你有一定的参考价值。
参考技术A 在VcamSource的数据源接口中,我们提供了6个必要的接口 :start接口用来启动gstreamer的pipleLine, 它应该在dll被启动的时候调用,并且在dll退出的时候调用unref.
vcam_source_get_mediatype用来获取媒体类型,用于directshow组件的连接。
其余4个都是获取数据接口。我们主要使用vcam_source_pull_sample2来获取自动生成的数据。
我们需要将库和头文件引入directshow项目中,同时将该项目的静态图,加入连接配置:
在dllmain.cpp中引入头文件VcamSource.h, 在入口函数dllmain处,我们需要调用gstrreamer的初始化函数,确保只调用一次。
增加一个私有属性, VcamSource指针,用来维护对vcamsoure的引用,另外增加析构函数的声明:
修改CVCam,在返回cvcam的时候,同时创建一个VcamSource的实例,这个实例有CVCam保存:
新增一个析构函数,用来在cvcam退出时,减少VcamSource的引用:
在CVCamStream类中,我们首先需要完成fillBuffer的工作,source接口提供了vcam_source_pull_sample2方法,方便我们来获取gstreamer生成的数据。
这里通过GstMapInfo map获取来在gstreamer的数据,然后把他填充到directshow的buffer里。二外做的循环,时为了测试数据帧大小不一致时,使用随机数填充,方便界面发现。实际验证时可去除。
除了FillBuffer外,另外两个重要修改的方法时GetStreamCaps和GetMediaType,这里暂时不调用vcam_source_get_mediatype,减少验证复杂性:
上面的媒体类型和format格式,对应在gstramer重,如下:
完成后,build gst-vcam项目,生成 gstvcam.dll ; 使用regsvr32 gstvcam.dll 进行注册,生成gst-vcam虚拟摄像头信息:
使用graphedit, 创建一个测试graph,可以看到,AVI Decompressor被用来作为转化器:
基本显示一致,只有一个小区域颜色不一致。
gstreamer视频对话需要经过网络吗
参考技术A gstreamer视频对话需要经过网络的使用gstreamer appsrc通过网络播放视频流。gstreamer appsrc通过网络进行视频流式传输
我在这里找到了很好的例子。
gstreamer appsrc test application
http://amarghosh.blogspot.kr/2012/01/gstreamer-appsrc-in-action.html
使用上面的例子,我可以在X Window使用的Xlib播放视频。当管道设置为PLAYING状态时,以某种方式发出“需要数据”信号并将start_feed回调函数中的数据从视频文件中读取后注入appsrc GstBuffer并播放示例视频。
以上是关于使用Gstreamer 作为数据源输出视频数据 VI 集成gstreamer的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Vala将GStreamer视频输出到Gdk.Pixbuf?