使用DirectShow同时录制和播放视频
video record and playback at same time using DirectShow
我应该开发一个应用程序,在继续录制的同时录制和播放录制的视频(不停止图形)。我知道如何使用DirectShow进行开发,但我需要图形的体系结构。我应该使用什么过滤器?
我使用DirectShow和SampleGrabber对原始视频进行了压缩,但我应该压缩视频,我不知道如何在压缩视频文件中进行压缩(由于录制仍在继续,该文件未关闭)。
我认为MPEG-2录制是我的应用程序最好的,但请指导我应该使用的过滤器。
感谢
您尝试过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指针。
希望它能理解。
- 播放视频时在 qwidget 上绘图
- 无法播放视频QT5多媒体Ubuntu 16.04
- Windows窗体应用程序无法播放视频[VLC ActiveX插件和IE Web插件v2]
- 如何在 QML 中播放视频
- 如何在QT中播放视频文件
- 无法在QT中播放视频
- FFmpeg + OpenAL - 播放视频中的流声音不起作用
- 播放视频时如何更改音频斑块
- 在 OpenCV 中播放视频:无错误无输出
- 使用 QT 创建器在 c++ 中播放视频
- 如何使用opencv播放视频
- VLC如何在桌面上播放视频
- Mlt框架:在播放视频时崩溃
- 使用 C++ 在 OpenMax 中播放视频
- 连续播放视频文件,无延迟
- 在由 createdesktop() 创建的新桌面中播放视频
- ffmpeg+播放视频循环
- 在android的OpenGL视图上播放视频
- 使用DirectShow同时录制和播放视频
- 在QTCreator GUI中播放视频