【问题标题】:video record and playback at same time using DirectShow使用 DirectShow 同时录制和播放视频
【发布时间】:2013-07-02 10:46:38
【问题描述】:

我应该开发一个应用程序,在继续录制的同时录制和播放录制的视频(不停止图表)。我知道如何使用和使用 DirectShow 进行开发,但我需要我的图形架构。我应该使用哪些过滤器?

我使用 DirectShow 和 SampleGrabber 处理原始视频,但我应该压缩视频,但我不知道如何在压缩视频文件中执行此操作(未关闭,因为录制仍在继续)。

我认为 MPEG-2 录制最适合我的应用程序,但请指导我应该使用哪些过滤器。

谢谢

【问题讨论】:

  • 我已经很久没有进行任何 DShow 开发了,但是有些过滤器接受一个输入并生成该输入的 N 个副本,这些副本可以馈送到不同的处理(显示 + 记录)
  • 我知道如何显示和记录。我为此使用 Smart Tee 过滤器,但如果我需要 10 秒前的视频怎么办?
  • 很少有文件格式与“边录制边播放”兼容,可能只有 MPEG-2 TS 和 ASF。为了可靠地解决这个问题,您需要记录成自定义格式,您可以在不依赖文件关闭、最终确定和刷新的情况下读取数据。
  • MPEG-2 与播放静止记录兼容(我测试了很多。它有效)。所以我想使用 MPEG-2 而不是其他格式

标签: c# c++ video directshow directshow.net


【解决方案1】:

你试过StreamBufferEngine吗?

录制一个文件并同时观看它有点问题,因为 Demuxer 需要重新解析写入的文件,以了解新的部分。我从未见过解复用器这样做。

另一个大问题是文件锁定! DirectShow 文件编写器和大多数其他类似过滤器锁定文件以进行写入。所以没有其他进程可以打开文件进行读取。

您正在寻找 TimeShift 系统。为此有一些第三方 SDK。但它也可以用自己的 DirectShow 过滤器来实现,但是你需要大量的时间和知识。我知道这是可能的,因为我已经在我公司 (utilius fairplay 5) 的视频播放器中做到了。

【讨论】:

  • MPEG-2 视频以这种方式工作。我开始从相机录制并使用 GraphEdit 将 MPEG-2 保存在一个文件中,然后打开 VLC 并浏览录制文件。 VLC 播放视频。这就像在 5 秒后观看录制的视频。这是因为 VLC 授予读取权限。所以,如果 VLC 可以阅读,我也可以阅读。现在我正在研究 MPEG-2 文件读取(使用 DirectShow 是非常复杂的东西:|)谢谢你的回答
【解决方案2】:

我在这个问题上工作了数周,SBE 在传输中的 H264 多路复用器中无法正常工作 我想出了一个解决方案,让我分享一下

首先,编码器需要有小的 GOP,比如 15,而不是 150,否则同步会花费一些时间,并且会被视为一个很大的挂起。

想法是创建directshow过滤器,从Live源过滤器开始 (https://www.codeproject.com/Articles/158053/DirectShow-Filters-Development-Part-2-Live-Source)

修改了过滤器,不再从外部程序进入框架。

添加 winsock2 ,用于 UDP 绑定或多播组。 开始从实时源接收数据并将其采样到输出引脚。

建议始终使用 Elecard SDk 进行设置。 在发件人上,您可以使用 nw 渲染器,但您无法更改编码器 GOP 所以打开图表编辑并构建发送者图表 桌面捕获->编码器->mux->nwrenderer。

您的新过滤器应该知道接收数据并将其显示在屏幕上

一旦你完成了这项工作,你就可以继续将时移功能添加到你的过滤器中。

分配一个非常大的缓冲区,200 兆到 1 千兆,由你决定(当然在 ram 上) 您发送到输出引脚的相同数据,将其复制到该缓冲区中,使用 rd 和 wr 索引使其循环。

您需要在过滤器中添加接口,例如 1. 上线 2.SetSeekPoint

我这样做的方式如下 我创建了一个从过滤器到主机(c#)的回调,它每 1 秒或更长时间发送一次时间和 wr 指针(取决于我需要的准确度) 在主机中,我创建了这两个信息的列表。 现在在 c# 中,我有 wr 指针及其时间的列表。 易于搜索并将 RD 指针设置回过滤器。

过滤器有两种模式: 1. 实时发送当前接收到的数据 2. 在 seek 它从大缓冲区发送数据,跟随 rd 指针。

希望它理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2021-04-06
    • 2012-01-14
    相关资源
    最近更新 更多