GB28181系统设计 一 事件设计 GB28181系统设计 二 kdtree 算法
这一节说到了GB28181 系统接收到RTP包后,解码后交付给python做图像识别
流媒体服务依然是c++主打,解码也是c++主打,解码后得yuv图像或者RGB都保存在内存里面,如何让python直接获取呢,我们使用进程通信设计解决这个问题。
1 共享内存 1.1 发送端c++ message_queue::remove("message_queue");
//Create a message_queue.
message_queue mq(create_only //only create
, "message_queue" //name
, 100 //max message number
, sizeof(int) //max message size
);
//删除之前创建
shared_memory_object::remove("RGB_MEMORY_1");
//创建RGB共享内存段
shared_memory_object shm(create_only, "RGB_MEMORY_1", read_write);
//设置共享内存大小,RGB 1080p 图像
shm.truncate(1920*1080*3);
//映射共享内存
mapped_region region(shm, read_write);
//清零,这一步可以删除
std::memset(region.get_address(), 0, region.get_size());
//往内存里写数据,测试先用string
string *strTest = static_cast(region.get_address());
1.2 接收端
shared_memory_object shm(open_only, "RGB_MEMORY_1", read_only);
//映射共享内存
mapped_region region(shm, read_only);
我们什么时候读呢,使用消息队列或者udp来发送短信息提醒
2 消息队列
消息队列是可以在进程间也可以在线程间,我们主打进程间通信,避免写两套windows和linux,我们依然使用boost库得进程通信组件来直接上手。
2.1 发送端 message_queue::remove("message_queue");
//Create a message_queue.
message_queue mq(create_only //only create
, "message_queue" //name
, 100 //max message number
, sizeof(int) //max message size
);
int num = 0;
mq.send(&num++, sizeof(int), 0);
2.2 接收端
int number;
mq.receive(&number, sizeof(number), recvd_size, priority);
if (recvd_size != sizeof(number))
return 1;
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?