我敢肯定这个问题以前会被问过,但是我已经搜索过了,找不到任何有助于解决问题的具体方法。
我将首先概述最初的关注点,如果需要更深入的技术信息,那么我可以给出答案。希望对于最初的问题有足够的信息。
我正在Visual Studio 2010中使用C++和DirectShow编写应用程序。主要项目规范用于实时预览,并可以在任何时候选择将视频录制到mpeg2到硬盘,然后录制到DVD以在标准DVD播放器中播放,始终不中断实时预览。
捕获似乎是与DirectShow相当简单的标准操作。
我写了几个自定义过滤器。没什么了不起的,但是我们想要我们自己的自定义屏幕覆盖信息-时间和日期等-这必须在预览和记录的文件中。我使用连接到采集卡视频输出引脚的avi压缩器,然后将avi压缩器连接到我的过滤器,以提供可操作的rgb图像。然后,该过滤器的输出通过防盗过滤器分配,一个进入屏幕,另一个进入ms mpeg2编码器。音频从捕获卡音频输出到同一mpeg2编码器。 mpeg2编码器的输出然后进入一个文件。该文件然后被创作为DVD,并刻录到DVD。
所以我的问题是
通过用户操作来允许仅开始和停止mpeg2文件输出的最佳位置在哪里?如何?
我尝试过使用智能T型过滤器-在mpeg2编码器之前,将1个视频和1个音频作为最后一个过滤器,然后使用iamstreamcontrol接口(interface)在适当的时间关闭针脚。这是否会导致最终mpeg2出现时序问题?由于输出文件将通过mplayer和vlc等播放,但不会转换为与mpeg2 dvd兼容(用于测试-通过任何DVD创作软件-损坏的文件和somteimes的投诉提供了时间引用)-是否可能文件有问题,并给出错误?如果从捕获开始的第一刻开始捕获文件(而不是在流式传输5分钟后说),那么一切正常。
我确实考虑过使用流缓冲路由-http://msdn.microsoft.com/en-gb/library/windows/desktop/dd693041(v=vs.85).aspx-但我不确定拿东西的最佳方向。似乎是最佳方向的一些选择。
任何帮助和提示将不胜感激。特别是如果有DirectShow过滤器,图钉,图形的网站/书籍/信息以及它们如何一起流动。
编辑:我正在考虑制作自己的“Smart Tee”过滤器副本,因为我将有2个图钉输入-音频和视频-和4个图钉-2个视频(1个预览和1个捕获)和2个音频也一样,但是我最终会遇到同样的问题吗?什么是处理“关闭”该定制滤波器的捕获引脚的正确方法。我会浪费时间来做这样的事情吗?这是覆盖输出引脚的 Activity /非 Activity 方法并发送或不发送样本的简单情况吗?我觉得这不容易吗?
非常感谢!
最佳答案
对于这种操作,我建议GMFBridge。创建自己的过滤器并不容易。 GMFBridge允许您通过动态连接使用两个单独的图。使用第一个图形进行预览,使用第二个图形进行文件输出。并且仅在用户操作后连接图形。