英创Linux主板低成本网络摄像头实现方案

        在工业现场实际的应用中,也有很多场景仅需要坚持单路视频图像,同时对系统成本更为敏感。针对这类的应用,我们推出了一套低成本的方案,即使用ESM6800E/H或者ESM7000系列主板来实现相应功能。ESM6800E/H主板的CPU为单核Cortex-A7,主频792MHzi.MX6ULL,而ESM7000系列主板的CPU为双核Cortex-A7,主频1GHzi.MX7D,并且Cortex-A7有着低功耗的特点,因为CPU没有专门的硬件视频处理单元,所以售价相对便宜。

        下面是对几种方案主要性能的对比:

主板型号ESM8000ESM6802ESM7000ESM6800E/H
CPU主频四核Cortex A531.6GHz双核Cortex A91GHz双核Cortex A71GHz单核Cortex A7,792MHz
支持网络摄像头显示通道数可以支持多路显示和切换可以支持多路显示和切换最多可同时显示1路,可以支持多路切换最多可同时显示1路,可以支持多路切换

        因为ESM6800E/H和ESM7000系列主板的CPU没有硬件视频处理单元,而网络摄像头传输过来的数据是通过了编码(常见的H.264MPEG-4MJPEG等格式)的,所以需要使用软件来进行解码,利用软件解码相对来说需要消耗一定的CPU资源,并且无法支持多路摄像头数据的拼接显示,所以只能够同时支持一路摄像头数据的显示。

        实现软件解码的库已经在主板中移植好了,用户可以直接使用,经过我们测试,在ESM7000主板上采用200W像素网络摄像头(1920×1080)和分辨率为1024×600的屏幕,将单路摄像头数据通过软件解码后以分辨率800×450输出到显示窗口中,消耗的CPU资源大约为20%左右,内存(1GB)为4%左右。可以看出对于ESM7000系列主板来说,并没有占用太多的硬件资源,同时还能够进行其他的控制操作,比如配合网络摄像头厂商提供的API函数实现截图,上传,录像等。

        软件上同样还是使用gstreamer和Qt来实现,英创Linux主板的文件系统中已经集成了gstreamerQt5.8相关的库和工具,并且包含了处理网络摄像头通讯协议rtsp和使用软件编解码的插件,而gstreamer能够支持多种图形系统包括Qt。所以利用gstreame能够快速方便的获取网络摄像头的数据并显示到Qt界面中,关于gstreamer的详细介绍,可以参考网站GStreamer

        在上一篇多路网络摄像头方案中,英创公司通过库文件libemgst.so提供三个API函数和一个包含网络摄像头信息的结构体变量。在此基础上,我们将ESM6800E/H和ESM7000系列板卡的支持也添加进去了,对于用户来说使用的API函数完全相同,唯一一点区别是ESM6800E/H和ESM7000系列板卡只能同时支持一路网络摄像头的数据显示。库文件内部会自动判断板卡型号,并进行对应的处理,用户只需要专注于应用程序的开发和界面的设计上面。

        关于API函数和例程在上一篇文章中已经有了详细的介绍,因为API函数是相同的,所以可以使用相同的例程代码测试,只需要更换对应的工具链重新编译即可。我们在这里重复说明一下API函数的定义,方便用户查询:

/**
 *	初始化gstreamer
*
*	本函数在C的main函数中调用,将会初始化gstreamer库
*
*	参数说明:
*	使用main函数的两个参数填入,gstramer初始化时需要读取main函数的两个参数
*
 *	返回值说明:
*	无返回值
*
 */
void init_emgst(int argc, char **argv);

/**
 *	包含网络摄像头设备信息的结构体
*	访问网络摄像头需要有ip地址,用户名和密码。如果是播放录像文件,还需要填入
*	录像文件的地址,如果是播放实时数据,路径填写为NULL即可。
*
*	参数说明:
*	ip:指向网络摄像头ip地址的指针
*	user:指向网络摄像头的用户名的指针
*	passwd:指向网络摄像头密码的指针
*	file:指向录像文件路径的指针,如果播放实时图像,赋值为NULL
*
 */
typedef struct _Rtsp_config {
    char *ip;
    char *user;
    char *passwd;
    char *file;
} Rtsp_config;

/**
 *	配置gstreamer,并显示到指定Qt窗口
*
*	函数会配置gstreamer,显示多个网络摄像头的数据到xwinid所指定的窗口,窗口的大
*  小通过参数width和height来确定,而网络摄像头的信息由指针rtsp_config传入,listsize
*	指定同时显示的通道数量。因为要动态建立网络摄像头的连接,函数不会退出,所以
*  需要在线程中调用。
*
*	参数说明:
*  xwinid:Qt窗口的id号,每一个窗口类中都包含这个成员变量。
*	width:显示视频数据所使用的窗口控件的宽度,单位pixel
*	height:显示视频数据所使用的窗口控件的高度,单位pixel
*  rtsp_config:指向设备信息结构体的指针,通常是一组包含设备信息的结构体指针。
*	详细解释可以查看对结构体Rtsp_config的说明
*  listsize:ESM7000系列主板视频通道数最多支持同时显示1路,超过1路会返回-1报错。
*
 *	返回值说明:
*	0 表示正常退出gstreamer
*  -1 表示填入参数出现错误,启动gstreamer失败
*
 */
int config_emrtsp(unsigned int xwinid, int width, int height, Rtsp_config *rtsp_config, int listsize);

/**
*	关闭gstreamer,释放资源
*
*	函数会关闭gstreamer输出,并释放相关资源
*
*	返回值说明:
*	无返回值
*
*/
void release_emrtsp(void);

        例程运行效果截图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值