李宇成+史維霖
摘 要: 針對現有網絡視頻監控的局限性和相應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.