gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:35:00 24 4
gpt4 key购买 nike

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

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com