用于视频编辑的进程间数据交换 我使用Visual C++ 2013。 我有两个应用程序(它们在同一台机器上运行):
第一个应用程序从多个客户端接收高质量视频流,同步这些视频并将其写入视频文件(仅H264、DIVX和MJPG)用于视频编辑的进程间数据交换 我使用Visual C++ 2013。 我有两个应用程序(它们在同一台机器上运行):,c++,opencv,mfc,ipc,C++,Opencv,Mfc,Ipc,第一个应用程序从多个客户端接收高质量视频流,同步这些视频并将其写入视频文件(仅H264、DIVX和MJPG) 第二个应用程序对这些视频中的每组同步帧进行一些处理(使用OpenCV) 但是,我陷入了两个进程之间的数据交换中,因为磁盘的读/写任务非常慢。因此,我希望以低延迟直接在RAM上交换数据,并逐帧处理数据 我读过 但我不知道该怎么办 请帮帮我。非常感谢 有很多方法可以做到这一点。最简单的方法是通过WM_COPYDATA: COPYDATASTRUCT cds; cds.dwData =
请帮帮我。非常感谢 有很多方法可以做到这一点。最简单的方法是通过
WM_COPYDATA
:
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = 5 * sizeof(WCHAR);
cds.lpData = L"Hello";
::SendMessage(hTargetWnd, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)&cds);
您可以通过调用以下命令轻松找到目标窗口句柄:
HWND hTargetWnd = ::FindWindow(NULL, L"AppName");
另一种方法是基于共享内存。如果您确实使用MFC框架,则存在实现这种IPC类型的CSharedFile
类
您还可以将UDP套接字用于IPC。这里有几个好处:
CAsyncSocket
class我猜您有一个帧流,然后将其分发到worker应用程序进行处理。我会考虑使用ZrOMQ。原因:
- ZeroMQ已经基于消息,因此与TCP(基于流)或UDP(有限帧大小)不同,您可以传输大型消息,而无需担心碎片
- 它管理诸如(重新)连接和其他一些降低应用程序复杂性的事情
- 它有一个共享内存传输机制(您必须检查MS Windows是否支持该机制),对于您的用例来说,该机制应该足够有效
- 它还支持TCP传输,以防您希望将工作分配到多台机器
- 它为多种语言和多种操作系统提供了绑定,以防以后需要扩展范围