当前位置:首页 > 芯闻号 > 充电吧
[导读] 1 系统工作原理 系统以Hi3516A开发平台(由高分辨率1080 p的AR0330摄像头模块和带千兆以太网功能的Hi3516A控制器模块组成硬件平台,并在硬件平台上烧写了U-Boot、Linux

1 系统工作原理

系统以Hi3516A开发平台(由高分辨率1080 p的AR0330摄像头模块和带千兆以太网功能的Hi3516A控制器模块组成硬件平台,并在硬件平台上烧写了U-Boot、Linux内核和加载了相关 驱动)作为基础,在该平台上开发应用程序。

首先,进程A获取来自AR0330摄像头模块的YUV原始视频图像,并使用H265压缩编码算法进行压缩编码获 得H265格式码流,该过程通过使用海思提供的媒体处理平台(MPP)实现;

其次,进程B负责响应网络客户端的请求,将进程A的输出码流通过千兆以太网接 口实时地发送出去,该过程通过对LIVE555开源代码(该代码原本只支持文件发送功能,而不支持内存实时数据发送功能)二次开发实现;

此外,进程A与进 程B之间的数据交换使用共享内存进程通信方式,节约了CPU资源和时间成本。


2 功能实现

2.1 视频捕捉与编码

选择在 Hi3516A开发平台上开发体现了在视频捕捉和编码过程中的很多优势。

Hi3516A是专用于HD IP摄像机的多媒体芯片,具有高性能Cortex-A7处理器和内部集成的硬件H265视频标准编码器;此外,海思提供的MPP对应用软件屏蔽了芯 片相关的复杂的底层处理,提供给应用程序方便的接口,这样不仅大大缩短了开发周期,还降低了开发难度。对于应用程序开发者,只需要使用MPP所提供的接口 实现特定功能,满足应用。

MPP主要由视频输入(VI)、视频处理(VPSS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频侦测分析(VDA)、 区域管理(REGION)等模块组成。本系统用到VI、VPSS、VENC和REGION模块完成视频采集、处理、信息叠加和压缩编码工作,最终得到目标 码流。

首先,调用系统控制模块的媒体处理平台编程接口(MPI)完成硬件和MPP初始化,它实现的重要功能是分配视频缓存池;

其次,调用VI模块的MPI创建视频输入设备和视频物理通道并设置参数;

然后,调用VPSS模块的MPI创建组和通道,并设置组和通道参数,输出期望分辨率的视频数据;

最后,调用REGION模块的MPI,在原始图像上叠加用户信息,并调用VENC模块的MPI对YUV原始图像进行H265压缩编码,得到 H265格式码流。

完成以上工作后,创建一个线程不断从编码通道获取实时H265码流。整个过程都通过调用各模块的MPI实现,难度较低。


2.2 H265实时码流传输

本系统中,H265实时流媒体数据的传输在LIVE555 C++开源项目的基础上实现。Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现 了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设 计,Live555非常容易扩展对其他格式的支持。目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、 MPlayer。

LIVE555默认只支持发送音视频文件,而不支持从媒体设备获取的实时码流。需要修改LIVE555源代码以实现H265码流实时发送功能。

一 种方法是通过有名管道(FIFO)实现,这种方法不需要修改LIVE555源代码,只需在视频捕捉与编码源进程中创建一个FIFO,并不断把实时H265 码流写入FIFO中即可。LIVE555服务器端用发送音视频文件的方式获取FIFO中数据,完成实时直播。这种方法容易实现,使用较多,但是当视 频码流率较大时监控端的延时较大,并存在卡顿、马赛克等现象,效果较差。

另一种方法是通过修改LIVE555源代码,从实现RTSP服务的相关基类派生出 H265码流直播的类,重写类的成员方法来实现。该方法通过共享内存进程通信方式实现与视频捕捉和编码进程的码流交互。这种方法的实现比较复杂,但在数据 处理过程中比第一种方式少了多次数据写入和拷贝工作,从而监控端能够以较大码流率实时、流畅地播放高清视频图像。

LIVE555主要通过任务调度机制和 RTSP服务机制两个部分实现流媒体服务器功能。其中任务调度机制主要通过TaskScheduler类库实现,它完成网络套接字任务、延时任务和 触发事件三种任务的循环调度,从而构成了系统运行框架。而RTSP服务机制通过工程的liveMedia目录下的类库实现,通过把RTSP协议加入到运行 框架中,实现了流媒体服务器。下面具体分析RTSP服务机制的实现过程。

首先,建立RTSPServer,监听客户端的连接请求,响应客户 端请求建立连接后,创建RTSPClientSession,RTSP协议就是在RTSPClientSession中实现的。

然后是RTSP协议的实现 过程,客户端向服务器端发送RTSP描述命令(DESCRIBE),服务器查找到对应的ServerMediaSession(对应某个媒体设备或某种格 式文件),并生成会话描述协议(SDP)信息进行回应;

接着,客户端发送RTSP建立命令(SETUP),服务器端建立RTP/RTCP套接字,并建立特 定的Source和Sink,为数据的获取、封包和发送做准备;

完成以上步骤后,客户端发送播放命令(PLAY),服务器端响应请求,循环调用 Source对象的成员方法获取数据并通过Sink对象的成员方法进行封包和发送,实现流媒体服务器的功能;在播放过程中,客户端可以发送终止命令 (TERADOWN)结束流媒体会话。

从RTSP协议实现过程可知,为了支持H265实时流媒体数据传输,需要实现用户自定义类 ServerMediaSubssion、Source和Sink。自定义的类可以继承H265VideoFileServer MediaSubsession、H265VideoRTPSink和H265VideoStreamFramer中能共用的方法,重写H265实时流媒 体处理特有的方法。具体实现方法是添加H265LiveVideoServerMediaSubssion:public H265VideoFileServerMediaSubsession类,并重写createNewStreamSource成员方法。该成员方法的关 键段代码段如下:

estBitrate=1000;
H265FramedLiveSource*liveSource=H265FramedLiveSource::createNew(envir);
if(liveSource==NULL){return NULL;}
return H265VideoStreamFramer::createNew(envir,liveSource);

该 代码段的主要工作是把ByteStreamFileSource替换为用户自定义的H265FramedLiveSource,用于获取高清摄像头上的实 时视频数据。H265FramedLiveSource的成员方法H265FramedLiveSource::doGetNextFrame就实现了从 H265编码输出端获取H265格式视频数据并送到H265VideoRTPSink端的过程。

其中,进程之间数据交换采用共享内存方式,用有名信号量实现进程对共享内存的同步访问。该成员方法的关键代码段如下:

static int niHaveReadSize=0;
if(Framed_dosent==true){
	if(0==niHaveReadSize)sem_wait(semr);
	fFrameSize=(Framed_datasize->niHaveReadSize->fMaxSize)fMaxSize:Framed_datasize-niHaveReadSize;
	memcpy(fTo,shm_add+niHaveReadSize,fFrameSize);
	niHaveReadSize+=fFrameSize;
	if(niHaveReadSize==Framed_datasize){
		sem_post(semw);
		niHaveReadSize=0;
	}
}
这样,当服务器端收到客户端PLAY命令时,不断调用H265FramedLiveSource::doGetNextFrame读取H265格式视频数据,封包和发送出去,实现H265码流实时传输功能。

在主函数中,只需在创建ServerMediaSession时加入H265LiveVideoServerMediaSubssion,并向RTSPServer中注册该ServerMediaSession即可。


3 结果分析

H265码流实时传输的程序通过海思平台的交叉编译工具链编译,生成可执行文件,并在海思Hi3516A开发平台下运行,完成服务器搭建工作。

客 户端通过安装Windows系统下的VLC播放器实现。打开VLC播放器,在“打开网络串流”选项中输入 rtsp://192.168.1.116:8554/H265LiveVideo,点击播放,就可以看到来自高清摄像头的视频图像,并长期稳定工作。与 常用的FIFO方式作效果对比,当码流率较大时,视频图像延迟更短,视频画面更加完整和流畅。

实际上Darwin确实在架构以及性能方面较live555略胜一筹,但是LIVE555 是更为廉价和快捷的开发方式。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

国外用户在Geekbench 5中发现了Ryzen 9 5950X和Ryzen 9 5900X的基准测试成绩,在单核测试中,Ryzen 9 5950X和Ryzen 9 5900X分别获得了1,575分和1,605分。而R...

关键字: ryzen 5950x ipc

Intel新一代CPU即将登场了,在二号人物因为工艺失利问题走人之后,原先主导GPU架构的Raja Koduri现在也要掌管CPU架构发展了。8月13日他会公布Intel最新的产品,其中IPC性能领先

关键字: cove ipc tigerlake willow 性能

  2013年国内IPC设备出货量约1800万台,2014年底将达到4000万台。借助两大推力:家居物联网系统发展、家庭安防技术(包括图像处理技术、网络传输技术等)成熟,预计2015年将成为IP

关键字: ipc 传感器 网络传输技术

网络摄像机(IPC)的核心就是IPC SoC芯片。IPC SoC通常集成了嵌入式处理器(CPU)、图像信号处理(ISP)模块、视音频编码模块、网络接口模块、安全加密模块和内存子系统,部分芯片还集成了视频智能处理模块。而华...

关键字: ipc SoC 华为 芯片

2018 年 6 月 12 日,中国,上海 — 如今,汽车行业正在向智能化、电动化等方向发展。随着车联网技术的成熟,智能汽车、无人驾驶、新能源汽车成为当下热门的概念,汽车行业迎来了电

关键字: ipc 汽车电子

随着我国工业自动化领域的不断发展,工控机已经成为一种普遍的自动化设备。工控机的市场需求非常大,如今它已经广泛应用于医疗、交通、金融、制造业和军工等等领域,而且以IPC为基础的自动化设备,已经逐渐

关键字: CPU ipc 工控机

按照AMD的路线图,今年的7nm Zen2架构完成之后,新一代就是Zen3架构了,现在已经完成了架构设计,也流片成功了,预计会在2020年发布,使用升级版的7nm+工艺。 从之前的信息来看,AMD的Z

关键字: AMD ipc zen3 性能 架构

第三季度2019从IPC的脉冲电子工业全球数据服务的结果表明,全球电子行业继续蓬勃发展,在一个积极的商业环境,并预计在未来一年继续增长。

关键字: ipc 行业前景

IPC -连接电子工业协会今天宣布从2019年8月北美北美印制电路板(PCB)统计计划的结果。

关键字: ipc 北美 氟联苯

所谓的“智慧+”是通过物联网、云计算等前沿科学技术实现生活的智能化、信息化以及互联互通。在人工智能大红大热的互联网时代, “智慧家居”、“智慧楼宇”、“智慧城市”等概念不断地被提出来,并且被各行各业树立为下一阶段的战略核...

关键字: ipc 人工智能 智慧城市
关闭
关闭