C++在32位应用程序之间传输大量数据以进行视频播放的方法
C++ Ways to transfer large amounts of data between 32bit applications for video playback
我知道共享内存和进程间通信的基本知识,但由于我的应用程序相当具体,我问这个问题是为了获得一般反馈。
我正在64位机器(MacOS和Win64)上工作,使用32位可视化编码工具包。此时将工具包移植到64位是不现实的,所以我有内存限制。
我正在开发一个应用程序,该应用程序必须能够快速擦除(根据用户输入来回切换)高质量视频。显而易见的解决方案是:1-将其全部保存在内存中。2-来自磁盘的流。此时将其全部放入内存需要将视频质量降低到不可接受的程度,而从磁盘流式传输会导致加载时擦除挂起。
我目前的思路是运行一个主程序和多个从程序。每个从程序都会将视频的一段加载到ram中,当主程序需要加载视频的不同部分时,它会向从程序请求这些数据,并将其传输出去。
我的问题是,做这件事的合适方法是什么?我怀疑共享内存将不允许我超过应用程序当前的32位内存限制。我可以做一些像管道这样简单的事情,但我想知道是否还有其他更合适的东西。
理想情况下,这个解决方案将是Mac/Win可移植的,但由于最终解决方案必须位于windows盒子上,我将选择windows解决方案。而且越容易越好,因为我不想在这方面花费数周的开发时间。
提前感谢。
我猜你正在(或者至少可以)使用一台带有64位操作系统的64位机器,尽管将所有代码移植到64位是不切实际的。我还假设您的机器有足够的内存来保存您关心的数据——真正的问题是从32位代码中访问足够的内存。
如果是这样的话,我会看看Windows的地址窗口扩展(AWE)函数,比如AllocateUserPhysicalPages
和MapUserPhysicalPages
。这些操作与文件映射非常相似,只是当您将数据映射到地址空间时,它已经在物理内存中,而不必从磁盘读取(即,映射要快得多)。
根据您的分发需求,我会嵌入或安装一个或多个Memcached实例,并将一个(或多个,如有必要)线程馈送块从磁盘插入Memcached。
一旦您将数据移动到memcached上,您就几乎不受32位限制的影响,尤其是如果memcached本身作为64位进程运行的话。
基本上,您会在程序中从套接字而不是文件中读取,memcached将是一个奇特的文件缓存。
- 媒体基础 多个视频播放导致内存泄漏和崩溃
- Opencv 树莓派 3 视频播放 c++
- QT 5.8 WebEngine HTML 5视频播放器支持
- C++在32位应用程序之间传输大量数据以进行视频播放的方法
- 媒体基础全景(等距柱状投影)视频播放C++
- 在Qt5中使用Phonon-一个简单的视频播放器
- QML视频播放器,可播放多个视频
- Android:制作原生视频播放器时应该使用什么
- 的视频播放器不起作用
- 线程式视频播放器同步
- 适用于 C++ 的任何跨平台视频播放库
- wx小部件视频播放器
- opencv库视频播放
- 视频播放器问题
- 我如何使用libavfilter在我的视频播放器软件中去交错帧
- 使用 OpenAL 和 C++ 同步音频和视频播放
- DirectShow视频播放太快时音频引脚渲染数据
- 使用Media Foundation进行无缝视频播放
- 免费的音频和视频播放使用Direct3D9和FMOD在VC++2010
- 如何从视频播放器的辅助线程在主窗口中显示