C ++ DirectShow视频和音频捕获

在应用程序开发过程中遇到了几个问题后,我终于成功地与VFW合作了。

感谢StackOverflow,我现在意识到VFW已经过时了,并希望切换到DShow,让我的应用程序能够使用Vista / W7。

不幸的是,这项工作已经完成,应用程序已经交付给客户,但是一旦我们意识到我们在Vista / W7上有帧速率的问题 - 我们决定重写视频课程并使用DirectShow来建立一个良好的音频/视频为webcameras捕获引擎。

这将是棘手的,因为我们从来没有用DShow编码,现在我们正在寻找几个具体的例子来说明如何:

  • 连接到选定的网络摄像机

    类似于:capDriverConnect

  • 将相机分辨率设置为640x480和RGB24格式(我们需要为每个帧执行RGB24到YUV420)

    类似于:capSetVideoFormat / capCaptureSetSetup

  • 为此webcamera设置音频捕获

    类似于:capSetAudioFormat

  • 注册两个回调:

  • 一个用于视频帧(我们将帧传递给视频编码器)
  • 类似于:capSetCallbackOnVideoStream

  • 一个用于波形缓冲器(我们将波形缓冲器传递给音频编码器)
  • 类似于:capSetCallbackOnWaveStream

  • 能够在父窗口的某处显示预览窗口

    类似于:capPreview

  • 需要时执行开始/停止操作

  • 开始 - 意味着连接并开始捕捉音频/视频帧
  • 断开 - 意味着,停止捕获音频视频帧
  • 执行绘制到实际的框架

    如同:

    SetBitmapBits(CameraInput.GetFrameBitmap(),W * H * 3,vdhdr->的lpData); //用gdi + GetBitmapBits(CameraInput.GetFrameBitmap(),w * h * 3,vdhdr-> lpData)绘制一些东西; //用数据设置框架

  • 以上所有内容都是用VFW制作的,但正如我之前写的,我们不幸需要切换Direct Show。

    有没有人可以帮助我们实现一个能够在数月的直接表演中拯救我们的班级?


    例子中最好的选择是来自微软的。

    你的问题仍然以VFW的形式表达,所以很难以书面形式回答它们。 例如,在DirectShow中,您将不会注册回调以编码视频帧。 相反,你会开发一个编码器滤波器,从捕获源接收数据。

    作为替代方案,如果您只针对Vista及更高版本,则有Microsoft Media Foundation。 我没有经验,所以我不知道如何将学习曲线与DirectShow进行比较。


    我建议你使用FFDshow过滤器在GraphEdit上构建一个图形。

    EditGraph正在制作一个在DirectShow上构建图形的演示

    我不认为你需要你自己创建过滤器类。 在您构建图表之后,您将能够使用GraphEdit观看视频。 实现该图是一项非常简单的任务。

    链接地址: http://www.djcxy.com/p/81035.html

    上一篇: C++ DirectShow Video and Audio capture

    下一篇: Video capture dialog keeps popping up with embedded PC webcam delphi app