我应该开发一个应用程序来录制和播放录制的视频,同时继续录制(不停止图形)。我知道如何使用和开发使用DirectShow,但我需要我的图形架构。我应该使用什么过滤器?
我用DirectShow和SampleGrabber做了原始视频,但我应该压缩视频,而我不知道如何在压缩视频文件中做到这一点(压缩视频文件没有关闭,因为录制仍在继续)。
我认为MPEG-2录制对我的应用程序来说是最好的,但请指导我应该使用的过滤器。
谢谢
发布于 2013-07-03 04:39:41
你试过StreamBufferEngine吗?
在录制文件的同时观看它是有一点问题的,因为解复用器需要重新解析写入的文件,才能了解新的部分。我从来没有见过一个裁判员这样做。
另一个大问题是文件锁定!DirectShow文件写入器和大多数其他类似的筛选器锁定文件以进行写入。因此,没有其他进程可以打开该文件进行读取。
您正在搜索TimeShift系统。有一些第三方SDK可以做到这一点。但它也可以使用自己的DirectShow过滤器来实现,但您需要大量的时间和知识。我知道这是可能的,因为我已经在我的公司(utilius fairplay 5)的视频播放器中做到了这一点。
发布于 2019-07-10 05:27:01
我在这个问题上工作了几个星期,SBE在H264多路复用传输中不能很好地工作我想出了一个解决方案,让我分享一下。
首先,编码器需要有小的GOP,如15,而不是150,否则同步将花费时间,它将被视为大挂起。
这个想法是创建directshow过滤器,从动态源过滤器(https://www.codeproject.com/Articles/158053/DirectShow-Filters-Development-Part-2-Live-Source)开始。
修改了过滤器,不再从外部程序进入帧。
添加winsock2,用于UDP绑定或多播组。开始接收来自实时信号源的数据,并将其采样到输出引脚。
建议始终使用Elecard进行设置。在发送器上,你可以使用nw渲染器,但不能更改编码器GOP,所以打开图形编辑并构建发送器图形桌面capture-> encoder ->mux->nwrenderer。
您的新过滤器应该知道如何接收数据并将其显示在屏幕上
一旦你有了工作,你就可以继续添加时移功能到你的过滤器中。
分配一个非常大的缓冲区,200兆到1千兆,直到你(当然是在ram上)发送到输出引脚的相同数据,将其复制到该缓冲区,使其与rd和wr索引循环。
你需要给你的过滤器添加接口,像1. GoLive 2. 2.SetSeekPoint这样的函数
我这样做的方法如下:我创建了一个从过滤器到主机( c# )的回调,它每隔1秒或更长时间发送一次时间和wr指针(取决于我需要的准确性)。我创建了一个包含这两个信息的列表。现在在c#中,我有wr指针及其时间的列表。易于搜索并将RD指针设置回过滤器。
该滤波器有两种模式: 1.实时发送当前接收的数据;2.查找时,跟随rd指针从大缓冲区发送数据。
希望它能理解。
https://stackoverflow.com/questions/17423574
复制相似问题