ARM移动视频系统的研究

2014-09-15 08:23李宇成史维霖
现代电子技术 2014年18期

李宇成+史维霖

摘 要: 针对现有网络视频监控的局限性和相应Android软件开发的需求,给出一种基于Samsung S5PV210的ARM移动视频系统的实现方案。采用UML语言重点剖析并展示了Android多媒体框架与底层Linux驱动的关系。在此基础上,设计了系统总体架构和视频监控软件,实现了高清视频的采集和流畅地播放。应用试验表明,系统运行稳定、实时性好,具有很强的实用价值。

关键词: Android; Mini210s; 移动视频系统; 多媒体框架

中图分类号: TN919?34 文献标识码: A 文章编号: 1004?373X(2014)18?0009?02

Research on ARM mobile video system

LI Yu?cheng, SHI Wei?lin

(Automation Department, North China University of Technology, Beijing 100144, China)

Abstract: Aiming at the limitation of existing network video monitoring and the corresponding demand of Android software development, a specific implementation scheme of ARM mobile video system based on Samsung s5pv210 is presented in this paper. The relationship between Android multimedia framework and the underlying Linux driver is analyzed emphatically with UML language. On this basis, the system overall architecture and video surveillance software were designed. The HD video acquisition and smooth playback were realized. The experiment results showed that the system works stable, and has good real?time performance and high practicability.

Keywords: Android; mini210s; mobile video system; multimedia framework

0 引 言

移动视频监控作为一种关键技术被广泛的应用于各个领域和各种公共场所[1]。传统的视频监控系统需要安装网线,网络摄像头的安置地点不可移动,且操作系统以Linux开发为主。不能满足用户日益增长的多元化需求。目前Android的应用已经进入人类日常生活的密切领域,其优势完全打破了Linux仅适于工业场合应用的局限。本课题选取以Samsung S5PV210为核心的开发板,在Android系统环境下,进行视频采集、H.264编码、无线网络传输;上位机在Android系统下完成视频的接收、解码和播放。本文重点详述了Android多媒体框架各个层次与底层驱动关系,给出了高清视频监控[2]系统的开发实现过程。

1 系统总体设计

借鉴传统的C/S[3]设计模式,设计该ARM移动视频监控系统架构。

系统基于S5PV210为核心的开发板,在开发板上集成了视频采集模块、编码压缩模块以及视频传输模块。并有效结合了嵌入式技术和流媒体技术,将采集端和服务端所有工作都集中在ARM开发板上,然后在客户端,可以通过上位机电脑或者Android手机播放实时视频来进行相关的视频监控。

2 系统软件实现

如图1所示,系统软件分为两大部分。第一部分运行在ARM开发板上。首先通过板上自带的CMOS摄像头采集视频数据[4?5],进行H.264[6]编码压缩,然后对数据流进行RTP打包,通过网络将视频数据流发送出去;第二部分运行在上位机上,接收开发板发送过来的视频数据,用户根据需求解压缩播放显示,并存储视频。

3 Android多媒体框架与底层驱动的结合

本文重点研究MediaRecorder类的工作过程,详尽分析了Android多媒体框架与底层编码驱动的接口关系。然后,编写了相应的视频监控程序,通过实验来验证本文设计内容的正确性。

图1 系统软件框图

3.1 通过Android本地媒体库链接底层驱动

Java应用层中的MediaRecorder类对应于本地媒体库libmedia.so。MediaRecorder类利用start()方法开启视频录制、编码流程。然后,依次调用了Mediarecorder.cpp中start(),以及StagefrightRecorder中的start()方法。

3.2 Java本地调用部分

Android应用程序访问Android多媒体底层库需借助Java本地调用部分(JNI),当调用多媒体Java框架层mediaRecorder.java中的start()本地方法,实际上是调用(void *)android_media_MediaRecorder_start()。

3.3 多媒体Java 框架层

Android应用程序调用驱动,其实是调用多媒体Java 框架层为应用程序所提供的硬件服务接口。该接口封装在Java框架层,以服务库的形式存在。因此,在多媒体Java框架层代码mediaRecorder.java中,需要加载名称为media_jni的动态链接库。

3.4 Android应用程序层监控软件实现

本系统利用MediaRecorder类实现视频录制,同时调用该类内置的H.264编码模块进行编码操作,然后通过Packetizer打包器类进行RTP打包,设置网络接口,经由SOCKET发送,PC机接收,并通过VLC播放器解码播放。

初始化Video时,需要对MediaRecorder进行相关的设置,具体代码如下:

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置视频源为CAMERA

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式为3GP

mMediaRecorder.setVideoFrameRate(videoRate);

//设置每秒的帧数为24帧

mMediaRecorder.setVideoSize(videoWidth, videoHeight);

//设置视频大小为720*480

mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H.264); //设置视频编码方式为H.264

mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); //设置预览显示

mMediaRecorder.setMaxDuration(0); //最大期限

mMediaRecorder.setMaxFileSize(Integer.MAX_VALUE);

//文件大小

mMediaRecorder.setOutputFile(sender.getFileDescriptor());

//设置将H.264编码压缩的3GP码流通过LocalSocket发送出去

在使用RTP传输H.264的时候,设置H.264的解码参数SPS(Sequence Parameter Sets )和PPS(Picture Parameter Set)。以本系统Mini210s开发板为例,SPS为67,4D,40,1E,E9,81,68,7B,42,00,00,03,00,FA,00,00,2E,D5,1E,2C,5A,70;PPS为 68,CE,32,C8。

综上所述,Java应用程序层的start()方法可以通过 JNI 调用本地共享库MediaRecorder.cpp中的start();本地库通过代理对象跨进程调用到MediaPlayerService中的MediaRecorderClient。MediaRecorderClient中会创建出StagefrightRecorder,在StagefrightRecorder中完成视频录制、编码器设置任务,开启MediaWriter的start方法进行H.264编码。之后Stagefright即可使用Android封装的OpenMax接口,调用多媒体的H.264编码驱动,完成硬件编码操作。

4 实验结果

测试环境选择友善之臂的Mini210s开发板(操作系统:Android 2.3.1)作为服务视频采集端,PC机作为用户视频接收端。两种设备利用TP?LINK无线路由器通过WiFi建立连接。在该模式下,系统可清晰流畅的传送和播放720×480分辨率的视频,帧率可达30 f/s。

5 结 论

在ARM移动视频系统的分析研究的基础上,以高性能的S5PV210芯片开发板为硬件平台,编写了应用实验程序,实现了高清视频信号的采集、压缩编码、网络传输和上位机的流畅播放。文中的突出亮点在于综合了流行的Android操作系统、高性能的S5PV210芯片和热门的流媒体技术,详细分析了Android多媒体框架与底层驱动的接口关系,并设计编写了开发板软件和上位机高清视频监控软件。目前可实现720P,30帧的视频流播放。实验表明,系统运行可靠,实时性好。本方案可应用于各种视频监控、特别是移动视频监控领域等。

参考文献

[1] 李昂,宋海声,苏小芸.基于Android的视频监控系统设计与实现[J].计算机技术与应用,2012,38(7):138?139.

[2] 李琴,陈立定,任志刚.基于Android智能手机远程视频监控系统的设计[J].电视技术,2012,36(7):134?136.

[3] 朱小军,翟朝成,张志斌.基于Android手机的远程视频监控系统的设计与实现[J].自动化与仪器仪表,2013(2):149?151.

[4] 张雅楠,杨璐,郑丽敏,等.基于 Android 手机的远程视频监控系统的设计与开发[J].计算机应用,2013,33(z1):283?286.

[5] 魏崇毓,张菲菲.基于 Android 平台的视频监控系统设计[J].计算机工程,2012,38(14):214?216.

[6] 李红京.基于H.264视频压缩技术的网络视频传输系统设计[J].河北工业科技,2011,28(4):236?239.

3.4 Android应用程序层监控软件实现

本系统利用MediaRecorder类实现视频录制,同时调用该类内置的H.264编码模块进行编码操作,然后通过Packetizer打包器类进行RTP打包,设置网络接口,经由SOCKET发送,PC机接收,并通过VLC播放器解码播放。

初始化Video时,需要对MediaRecorder进行相关的设置,具体代码如下:

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置视频源为CAMERA

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式为3GP

mMediaRecorder.setVideoFrameRate(videoRate);

//设置每秒的帧数为24帧

mMediaRecorder.setVideoSize(videoWidth, videoHeight);

//设置视频大小为720*480

mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H.264); //设置视频编码方式为H.264

mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); //设置预览显示

mMediaRecorder.setMaxDuration(0); //最大期限

mMediaRecorder.setMaxFileSize(Integer.MAX_VALUE);

//文件大小

mMediaRecorder.setOutputFile(sender.getFileDescriptor());

//设置将H.264编码压缩的3GP码流通过LocalSocket发送出去

在使用RTP传输H.264的时候,设置H.264的解码参数SPS(Sequence Parameter Sets )和PPS(Picture Parameter Set)。以本系统Mini210s开发板为例,SPS为67,4D,40,1E,E9,81,68,7B,42,00,00,03,00,FA,00,00,2E,D5,1E,2C,5A,70;PPS为 68,CE,32,C8。

综上所述,Java应用程序层的start()方法可以通过 JNI 调用本地共享库MediaRecorder.cpp中的start();本地库通过代理对象跨进程调用到MediaPlayerService中的MediaRecorderClient。MediaRecorderClient中会创建出StagefrightRecorder,在StagefrightRecorder中完成视频录制、编码器设置任务,开启MediaWriter的start方法进行H.264编码。之后Stagefright即可使用Android封装的OpenMax接口,调用多媒体的H.264编码驱动,完成硬件编码操作。

4 实验结果

测试环境选择友善之臂的Mini210s开发板(操作系统:Android 2.3.1)作为服务视频采集端,PC机作为用户视频接收端。两种设备利用TP?LINK无线路由器通过WiFi建立连接。在该模式下,系统可清晰流畅的传送和播放720×480分辨率的视频,帧率可达30 f/s。

5 结 论

在ARM移动视频系统的分析研究的基础上,以高性能的S5PV210芯片开发板为硬件平台,编写了应用实验程序,实现了高清视频信号的采集、压缩编码、网络传输和上位机的流畅播放。文中的突出亮点在于综合了流行的Android操作系统、高性能的S5PV210芯片和热门的流媒体技术,详细分析了Android多媒体框架与底层驱动的接口关系,并设计编写了开发板软件和上位机高清视频监控软件。目前可实现720P,30帧的视频流播放。实验表明,系统运行可靠,实时性好。本方案可应用于各种视频监控、特别是移动视频监控领域等。

参考文献

[1] 李昂,宋海声,苏小芸.基于Android的视频监控系统设计与实现[J].计算机技术与应用,2012,38(7):138?139.

[2] 李琴,陈立定,任志刚.基于Android智能手机远程视频监控系统的设计[J].电视技术,2012,36(7):134?136.

[3] 朱小军,翟朝成,张志斌.基于Android手机的远程视频监控系统的设计与实现[J].自动化与仪器仪表,2013(2):149?151.

[4] 张雅楠,杨璐,郑丽敏,等.基于 Android 手机的远程视频监控系统的设计与开发[J].计算机应用,2013,33(z1):283?286.

[5] 魏崇毓,张菲菲.基于 Android 平台的视频监控系统设计[J].计算机工程,2012,38(14):214?216.

[6] 李红京.基于H.264视频压缩技术的网络视频传输系统设计[J].河北工业科技,2011,28(4):236?239.

3.4 Android应用程序层监控软件实现

本系统利用MediaRecorder类实现视频录制,同时调用该类内置的H.264编码模块进行编码操作,然后通过Packetizer打包器类进行RTP打包,设置网络接口,经由SOCKET发送,PC机接收,并通过VLC播放器解码播放。

初始化Video时,需要对MediaRecorder进行相关的设置,具体代码如下:

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置视频源为CAMERA

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式为3GP

mMediaRecorder.setVideoFrameRate(videoRate);

//设置每秒的帧数为24帧

mMediaRecorder.setVideoSize(videoWidth, videoHeight);

//设置视频大小为720*480

mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H.264); //设置视频编码方式为H.264

mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); //设置预览显示

mMediaRecorder.setMaxDuration(0); //最大期限

mMediaRecorder.setMaxFileSize(Integer.MAX_VALUE);

//文件大小

mMediaRecorder.setOutputFile(sender.getFileDescriptor());

//设置将H.264编码压缩的3GP码流通过LocalSocket发送出去

在使用RTP传输H.264的时候,设置H.264的解码参数SPS(Sequence Parameter Sets )和PPS(Picture Parameter Set)。以本系统Mini210s开发板为例,SPS为67,4D,40,1E,E9,81,68,7B,42,00,00,03,00,FA,00,00,2E,D5,1E,2C,5A,70;PPS为 68,CE,32,C8。

综上所述,Java应用程序层的start()方法可以通过 JNI 调用本地共享库MediaRecorder.cpp中的start();本地库通过代理对象跨进程调用到MediaPlayerService中的MediaRecorderClient。MediaRecorderClient中会创建出StagefrightRecorder,在StagefrightRecorder中完成视频录制、编码器设置任务,开启MediaWriter的start方法进行H.264编码。之后Stagefright即可使用Android封装的OpenMax接口,调用多媒体的H.264编码驱动,完成硬件编码操作。

4 实验结果

测试环境选择友善之臂的Mini210s开发板(操作系统:Android 2.3.1)作为服务视频采集端,PC机作为用户视频接收端。两种设备利用TP?LINK无线路由器通过WiFi建立连接。在该模式下,系统可清晰流畅的传送和播放720×480分辨率的视频,帧率可达30 f/s。

5 结 论

在ARM移动视频系统的分析研究的基础上,以高性能的S5PV210芯片开发板为硬件平台,编写了应用实验程序,实现了高清视频信号的采集、压缩编码、网络传输和上位机的流畅播放。文中的突出亮点在于综合了流行的Android操作系统、高性能的S5PV210芯片和热门的流媒体技术,详细分析了Android多媒体框架与底层驱动的接口关系,并设计编写了开发板软件和上位机高清视频监控软件。目前可实现720P,30帧的视频流播放。实验表明,系统运行可靠,实时性好。本方案可应用于各种视频监控、特别是移动视频监控领域等。

参考文献

[1] 李昂,宋海声,苏小芸.基于Android的视频监控系统设计与实现[J].计算机技术与应用,2012,38(7):138?139.

[2] 李琴,陈立定,任志刚.基于Android智能手机远程视频监控系统的设计[J].电视技术,2012,36(7):134?136.

[3] 朱小军,翟朝成,张志斌.基于Android手机的远程视频监控系统的设计与实现[J].自动化与仪器仪表,2013(2):149?151.

[4] 张雅楠,杨璐,郑丽敏,等.基于 Android 手机的远程视频监控系统的设计与开发[J].计算机应用,2013,33(z1):283?286.

[5] 魏崇毓,张菲菲.基于 Android 平台的视频监控系统设计[J].计算机工程,2012,38(14):214?216.

[6] 李红京.基于H.264视频压缩技术的网络视频传输系统设计[J].河北工业科技,2011,28(4):236?239.