我应该开发一个应用程序,在继续录制的同时录制和播放录制的视频(不停止图表)。我知道如何使用和使用 DirectShow 进行开发,但我需要我的图形架构。我应该使用什么过滤器?
我使用 DirectShow 和SampleGrabber对原始视频进行了处理,但我应该压缩视频,但我不知道如何在压缩视频文件中执行此操作(未关闭,因为录制仍在继续)。
我认为 MPEG-2 录制最适合我的应用程序,但请指导我应该使用的过滤器。
谢谢
我应该开发一个应用程序,在继续录制的同时录制和播放录制的视频(不停止图表)。我知道如何使用和使用 DirectShow 进行开发,但我需要我的图形架构。我应该使用什么过滤器?
我使用 DirectShow 和SampleGrabber对原始视频进行了处理,但我应该压缩视频,但我不知道如何在压缩视频文件中执行此操作(未关闭,因为录制仍在继续)。
我认为 MPEG-2 录制最适合我的应用程序,但请指导我应该使用的过滤器。
谢谢
你试过StreamBufferEngine吗?
录制文件并同时观看有点问题,因为 Demuxer 需要重新解析写入的文件,以了解新的部分。我从未见过解复用器这样做。
另一个大问题是文件锁定!DirectShow 文件编写器和大多数其他类似过滤器锁定文件以进行写入。所以没有其他进程可以打开文件进行读取。
您正在寻找 TimeShift 系统。为此有一些第三方 SDK。但它也可以用自己的 DirectShow 过滤器来实现,但你需要大量的时间和知识。我知道这是可能的,因为我已经在我公司的视频播放器中完成了它(utilius fairplay 5)。
我在这个问题上工作了好几个星期,SBE 在 H264 多路复用器中运行不佳我想出了一个解决方案,让我分享一下
首先,编码器需要有小的 GOP,比如 15,而不是 150,否则同步将需要时间,它会被视为一个大问题。
这个想法是创建directshow过滤器,从实时源过滤器开始(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. GoLive 2.SetSeekPoint
我这样做的方式如下我创建了一个从过滤器到主机(c#)的回调,它每1秒或更长时间发送时间和wr指针(取决于我需要的准确度)在主机中我创建了一个列表这两个信息。现在在 c# 中,我有 wr 指针及其时间的列表。易于搜索并将 RD 指针设置回过滤器。
过滤器有两种模式: 1. 在 live 中它发送当前接收到的数据 2. 在 seek 中它从大缓冲区发送数据,跟随 rd 指针。
希望它明白。