C++在32位应用程序之间传输大量数据以进行视频播放的方法

C++ Ways to transfer large amounts of data between 32bit applications for video playback

本文关键字:视频 播放 方法 数据 32位 应用程序 之间 传输 C++      更新时间:2023-10-16

我知道共享内存和进程间通信的基本知识,但由于我的应用程序相当具体,我问这个问题是为了获得一般反馈。

我正在64位机器(MacOS和Win64)上工作,使用32位可视化编码工具包。此时将工具包移植到64位是不现实的,所以我有内存限制。

我正在开发一个应用程序,该应用程序必须能够快速擦除(根据用户输入来回切换)高质量视频。显而易见的解决方案是:1-将其全部保存在内存中。2-来自磁盘的流。此时将其全部放入内存需要将视频质量降低到不可接受的程度,而从磁盘流式传输会导致加载时擦除挂起。

我目前的思路是运行一个主程序和多个从程序。每个从程序都会将视频的一段加载到ram中,当主程序需要加载视频的不同部分时,它会向从程序请求这些数据,并将其传输出去。

我的问题是,做这件事的合适方法是什么?我怀疑共享内存将不允许我超过应用程序当前的32位内存限制。我可以做一些像管道这样简单的事情,但我想知道是否还有其他更合适的东西。

理想情况下,这个解决方案将是Mac/Win可移植的,但由于最终解决方案必须位于windows盒子上,我将选择windows解决方案。而且越容易越好,因为我不想在这方面花费数周的开发时间。

提前感谢。

我猜你正在(或者至少可以)使用一台带有64位操作系统的64位机器,尽管将所有代码移植到64位是不切实际的。我还假设您的机器足够的内存来保存您关心的数据——真正的问题是从32位代码中访问足够的内存。

如果是这样的话,我会看看Windows的地址窗口扩展(AWE)函数,比如AllocateUserPhysicalPagesMapUserPhysicalPages。这些操作与文件映射非常相似,只是当您将数据映射到地址空间时,它已经在物理内存中,而不必从磁盘读取(即,映射要快得多)。

根据您的分发需求,我会嵌入或安装一个或多个Memcached实例,并将一个(或多个,如有必要)线程馈送块从磁盘插入Memcached。

一旦您将数据移动到memcached上,您就几乎不受32位限制的影响,尤其是如果memcached本身作为64位进程运行的话。

基本上,您会在程序中从套接字而不是文件中读取,memcached将是一个奇特的文件缓存。