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

标签 c++ windows macos streaming shared-memory

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

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

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

我目前的思路是运行一个master和多个slave程序。每个从机将视频的一段加载到内存中,当主程序需要加载视频的不同部分时,它会向从机请求该数据并将其传输过来。

我的问题是,执行此操作的合适方法是什么? 我怀疑共享内存不允许我突破我的应用程序当前存在的 32 位内存限制。我可以做像管道一样简单的东西,但我想知道是否还有其他更合适的东西。

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

提前致谢。

最佳答案

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

如果是这样,那么我会查看 Windows 的地址窗口化扩展 (AWE) 函数,例如 AllocateUserPhysicalPagesMapUserPhysicalPages .它们的工作方式有点像文件映射,只是当您将数据映射到您的地址空间时,它已经在物理内存中,而不是必须从磁盘读取(即,映射要快得多)。

关于C++在32位应用程序之间传输大量数据以进行视频播放的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893639/

相关文章:

CreateFile 打开 lsass.exe 失败

c++ - 无竞争线程锁的实际成本

c++ - 元整数平方根中的无限递归

windows - 从登录 ID (LUID) 获取 UserToken (C++)

objective-c - 如何在 64 位 Cocoa 应用程序中使用 3rd 方 32 位框架?

java - 在 Mac 上多次运行 Java 程序

objective-c - Cocoa:当窗口不可见时应用程序关闭

c++ - 我在使用纯虚拟方法和 Google Mock 时做错了什么?

java - java内存分配

windows - dotNerInstaller 问题出现错误 "The installation package could not be opened. Verify..."