DirectShow怎么获取音频左右声道的电平值

DirectShow怎么获取音频左右声道的电平值,第1张

我在GraphicEdit中的声音流的最后一个filter(Default DirectSound Device)前面加了一个SampleGrabber,利用它里面的回调函数(int ISampleGrabberCBSampleCB(double SampleTime, IMediaSample pSample)),我也可以获得IMediaSample值,问题是:

1怎么把IMediaSample换算成左右声道的电平值,我目前用傅氏变换做的,但是有非常明显的误差

2为什么总是会获取比当前播放帧还要往后的IMediaSample,比如当前播放到第50帧,实际获取的IMediaSample常常到75帧,一般多出1秒。

捕获到的数据是裸数据,需要压缩。你可以找一个压缩算法例如x264,压缩成H264文件。然后编写RTP 12字节的头,将H264数据定界符后面的数据放进去就可以了。如果一帧数据大需就需要再分片。

用“格式工厂”吧,这软件超级简单、实用。详细要点:

1、格式工厂是免费软件。去它的官方网站下载吧。

2、 *** 作思路和方法:启动软件后,左下侧有“高级”,点击“高级”,展开的选项中有“混流”,混流的意思就是将声音(即音频)加到画面(即视频)里面,也就是能够实现你这一需求。

3、关键点:A、既然你打算自己配音,那你就得先录好音。不管你用什么设备录,最好录成MP3格式,就算录出来的声音不是MP3格式,你依然可以用这软件将它转换成MP3格式。总之一句话,无论是视频、音频,还是,想要转换格式,用这软件保准没有错!B、在“混流”的时候,注意视频和音频的播放时长最好统一。也就是说,视频文件能够播放多久,你就大致录多久的音,不要视频能够播放5分钟,你录音才2分钟,最好是录到4分50秒左右。这样合成出来的视频就不用另外去剪切了。如果确实需要裁剪视频,还能用这软件!

别忘了把分给我哦。我的QQ455064712,我可以给你提供后续帮助!

这个 *** 作可以参考directshow samples里面的filter ezrgb24,

参照这个示例可以实现对sample的图像进行变换的功能。

它的实施步骤大概是这样的:先将pIn的数据直接复制到pOut,然后将pOut的数据取出来进行变换。

变换进行的 *** 作参考一些DIB算法库就可以了。

在VcamSource的数据源接口中,我们提供了6个必要的接口 :

start接口用来启动gstreamer的pipleLine, 它应该在dll被启动的时候调用,并且在dll退出的时候调用unref

vcam_source_get_mediatype用来获取媒体类型,用于directshow组件的连接。

其余4个都是获取数据接口。我们主要使用vcam_source_pull_sample2来获取自动生成的数据。

我们需要将库和头文件引入directshow项目中,同时将该项目的静态图,加入连接配置:

在dllmaincpp中引入头文件VcamSourceh, 在入口函数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项目,生成 gstvcamdll ; 使用regsvr32 gstvcamdll 进行注册,生成gst-vcam虚拟摄像头信息:

使用graphedit, 创建一个测试graph,可以看到,AVI Decompressor被用来作为转化器:

基本显示一致,只有一个小区域颜色不一致。

以上就是关于DirectShow怎么获取音频左右声道的电平值全部的内容,包括:DirectShow怎么获取音频左右声道的电平值、如何将directshow捕获到的视频数据打包成rtp包、directshow 如何做视频跳转等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9792628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存