directshow 采集音视频数据

  用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!

posted on 2012-07-06 16:13  chef  阅读(3710)  评论(0编辑  收藏  举报

导航