您当前的位置: 首页 >  Python

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GB28181系统设计(三)-进程通信让python获取共享内存数据

qianbo_insist 发布时间:2022-03-30 18:17:26 ,浏览量:0

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            
关注
打赏
1663161521
查看更多评论
0.0415s