使用DirectShow同时录制和播放视频

本文关键字:播放 视频 DirectShow 使用 | 更新日期: 2023-09-27 18:20:38

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

我使用DirectShow和SampleGrabber对原始视频进行了压缩,但我应该压缩视频,我不知道如何在压缩视频文件中进行压缩(由于录制仍在继续,该文件未关闭)。

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

感谢

使用DirectShow同时录制和播放视频

您尝试过StreamBufferEngine吗?

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

另一个大问题是文件锁定!DirectShow文件写入程序和大多数其他类似的筛选器会锁定文件进行写入。因此,没有其他进程可以打开该文件进行读取。

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

我在这个问题上工作了几个星期,SBE在运输中的H264 mux中工作不好我想出了一个解决方案,让我分享

首先,编码器需要有小的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.GoLive2.设置检测点

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

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

希望它能理解。