您的位置:首页 > 其它

directshow 采集音视频数据

2012-07-06 16:13 357 查看
用directshow写了一个采集本地音视频数据的库AVCap. 获取音视频采集设备, 指定设备并开始采集后, 给上层应用返回采集的音视频数据.

接下来的工作有两个:

1. 添加一个预览采集到的视频的接口, AVCap是不涉及界面的东西的, 所以不需要MFC的支持, 也不需要用到windows界面相关的API, windows消息机制等, 暂时的想法是上层给它一个句柄就能预览视频了.

2. 对音视频进行网络传输前的编码工作, 暂时还没有定下格式.

下面简单说一下dshow采集音视频的步骤.大部分内容在dshow SDK帮助文档中Audio Capture, Video Capture两大章节中都有, 只是我按帮助文档中的步骤最后使用ISampleGrabber时没能成功. 只能再次求助SDK中的例子拉. 我的核心代码大部分来自于samples中editing下stillcap这个示例, 实际上你也完全可以通过学习stillcap示例了解采集过程而跳过下面的内容.

1. 初始化(或者说建立对象? COM的知识懂的不多)IGraphBuilder, ICaptureGraphBuilder2

2. 获取音视频采集设备

3. 获取音视频采集filter

4. 初始化ISampleGrabber, 由于stillcap只采集视频, 这里说下音频的格式.

AM_MEDIA_TYPE mt;
mt.majortype = MEDIATYPE_Audio;//MEDIATYPE_Video
mt.subtype = MEDIASUBTYPE_PCM;//MEDIASUBTYPE_RGB24
mt.formattype = FORMAT_WaveFormatEx;//视频采集时没设置这一项

hr = pGrabber->SetMediaType(&mt);


5. 使用PIN_CATEGORY_PREVIEW链接capture filter -> grab filter -> null filter.

6. 设置ISampleGrabber的回调

7. IMediaControl run().

PS:封装完AVCap后, 如果暂时不考虑观看视频, dshow应该就告一段落了, oyeah!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: