1 引言
視頻監(jiān)控技術(shù)在國民生產(chǎn)的許多領(lǐng)域發(fā)揮著重要的作用。隨著嵌入式技術(shù)的逐漸發(fā)展和成熟,手持監(jiān)控終端成為可能。而手持監(jiān)控終端的可攜帶性和低功耗更極大地擴展了視頻監(jiān)控的應(yīng)用范同。本課題探索了一種手持監(jiān)控終端的設(shè)計方案。提供了簡捷易用的圖形用戶界面.實現(xiàn)了對MPEG4格式視頻壓縮數(shù)據(jù)的解碼及其在LCD上的播放。
2 系統(tǒng)的硬件平臺
本系統(tǒng)的處理器選用三星公司生產(chǎn)的具有ARM9內(nèi)核的S3C2410.S3C2410是32位RISC CPU.內(nèi)部帶有全性能的內(nèi)存處理單元(MMU).主頻為203MHz,最高可達260MHz。芯片內(nèi)部集成了大量的功能單元.包括:外部存儲器控制器、LCD控制器以及8通道10位ADC和觸摸屏接口等。系統(tǒng)的電源模塊采用TI公司的TPS73HD3XX系列芯片進行電壓轉(zhuǎn)換.可以分別獲得1.8V和3.3V電壓。根據(jù)應(yīng)用的需要.本系統(tǒng)選用了1M NOR Flash AM29LV800DB,64M NAND Flash U-K9F1208UDM-YC80和兩片32M SDRAM K4S561632C-TC75。液晶采用的是320x240的TFT真彩(65536色,16位)液晶屏。觸摸屏采用的是四線制電阻式觸摸屏。系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)硬件框圖
3 系統(tǒng)的軟件設(shè)計
本手持終端選用嵌入式Linux作為操作系統(tǒng)。在此基礎(chǔ)上運用了兩個開源軟件:圖形用戶界面庫MiniGUI和視頻編解碼庫ffmpeg。
3.1 基于MiniGUI的圖形用戶界面
MiniGUI是由北京飛漫軟件技術(shù)有限公司豐持的一個自由軟件項目.它為基于Linux的實時嵌入式系統(tǒng)提供一個輕量級的罔形用戶界面支持系統(tǒng)。本系統(tǒng)的圖形用戶界面使用了這個庫來實現(xiàn),它負責運用和管理FrameBuffer幀緩存驅(qū)動、觸摸屏和鍵盤驅(qū)動程序。通過MiniGUI庫。系統(tǒng)圖形用戶界面相關(guān)的部分得到廠很好的實現(xiàn).成功的建立了包括按鈕、菜單和背景網(wǎng)片在內(nèi)的圖形用戶界面。特別需要指出的是.因為本系統(tǒng)的數(shù)據(jù)接收和實時視頻解碼的操作涉及到大量的數(shù)據(jù)處理,所以應(yīng)用程序會分別為這些操作新開線程,如果一個線程因為數(shù)據(jù)的處理失敗而阻塞,圖形用戶界面線程仍可正常工作。用戶仍可以和軟件交互.終止阻塞的線程。
3.2 視頻解碼線程
本課題中。手持設(shè)備通過網(wǎng)絡(luò)接收MPEG4格式的視頻數(shù)據(jù)所以需要在手持設(shè)備上移植MPEG4的解碼庫。經(jīng)過對比和分析,選擇了ffmpeg開源項目作為這個手持設(shè)備的解碼庫。ffmpeg是自南軟件,為多媒體系統(tǒng)實現(xiàn)MPEG4流媒體技術(shù)提供了完整的解決方案.主要的組成部分是libavformat和libavcodec庫。libavcodec包含了很多常見的音視頻編解碼器.而libavformat則能夠很好的支持大部分的音視頻文件格式。
實時接收到的視頻數(shù)據(jù)可以作為一種特殊的流媒體文件.這種文件與一般的視頻文件相同。都有若干個基本的組成部分。首先,文件自身可以被叫做一個“容器”(container),“容器”的類型決定了視頻信息在文件中所處的位置。其次,文件包含有若干個“流”(stream);比如,通常有一個音頻流和一個視頻流(一個“流”只是一個對于一系列數(shù)據(jù)組成單位的形象的稱呼)。一個流中的數(shù)據(jù)組成單位叫做“幀”(frame)。每一個流由不同的“解碼器”解碼。從流中可以讀出“包”(packet)。包是一些數(shù)據(jù)塊,這些數(shù)據(jù)塊中包含了壓縮后的原始幀的數(shù)據(jù)。下面詳細地介紹一下利用ffmpeg的API函數(shù)進行解碼的過程。
首先,利用av_register_all()函數(shù)進行庫的初始化,向編解碼庫注冊所有可用的文件格式和編碼器,所以當有對應(yīng)的格式的文件被打開的時候.相應(yīng)的解碼器可以被自動地調(diào)用。通過av_open_input_file()函數(shù)打開視頻文件,把關(guān)于文件格式的頭和儲存信息讀到一個AVFormatContext結(jié)構(gòu)體中。接著,利用av_find_stream_info()函數(shù)檢查存儲在AVFormatContext結(jié)構(gòu)體中的文件的流信息,這個函數(shù)把正確的信息存儲在一個指針集合中.在這個集合中就可以找到需要的視頻流。關(guān)于流的編解碼器信息在AVCodecContext結(jié)構(gòu)體中,通過它就可以找到真正的編解碼器并且打開它。
利用avcodec_alloc_frame()函數(shù)分配一個用來存儲幀的空間pFrame。因為手持終端播放的視頻是565-bit的圖像,所以還需要把幀從原始格式轉(zhuǎn)化成RGB格式。ffmpeg提供了img_convert()函數(shù)做這個轉(zhuǎn)換。注意為轉(zhuǎn)換還需另外分配一個幀pFrameRGB用來存放轉(zhuǎn)換后的數(shù)據(jù)。接下來依次從視頻流中讀原始幀的數(shù)據(jù)包把數(shù)據(jù)包解碼到上面分配的pFrame中,一旦完成了一個幀的解碼,就把這個幀轉(zhuǎn)換成要求的RGB數(shù)據(jù)格式并且在液晶屏上顯示解碼后的視頻圖像。系統(tǒng)解碼的過程如圖2所示。
圖2 系統(tǒng)解碼的過程
3.3 數(shù)據(jù)接收線程
手持監(jiān)控終端通過SOCKET與視頻采集設(shè)備建立連接接收視頻數(shù)據(jù).但是接收到的MPEG4數(shù)據(jù),必須進行一定量的緩沖.然后才能調(diào)用ffmpeg的API函數(shù)進行解碼處理。本手持監(jiān)控終端在內(nèi)存中建立兩個隊列,一個是空閑的緩沖隊列,用以存放接收到的數(shù)據(jù):另一個是尚未處理的數(shù)據(jù)隊列.等待處理.兩個隊列頭尾相連組成一個環(huán)形緩沖列表。數(shù)據(jù)接收線程方面:當手持監(jiān)控終端接收到一個包的數(shù)據(jù),就從緩沖隊列的頭拿出一個緩沖區(qū)塊,把接收到的數(shù)據(jù)存放到這個緩沖區(qū)塊中,然后將這個緩沖區(qū)塊加入到數(shù)據(jù)隊列的尾部等待視頻解碼線程的讀取。視頻解碼線程方面:從數(shù)據(jù)隊列的頭拿出一個緩沖區(qū)塊,讀取數(shù)據(jù),將讀完的緩沖區(qū)塊加到緩沖隊列的尾部,等待再一次地接收數(shù)據(jù)。經(jīng)過測試,選擇32個緩沖區(qū)塊,每個緩沖區(qū)塊的大小選為24KB,會獲得比較好的抗擾動,抗延時的播放效果。系統(tǒng)的軟件結(jié)構(gòu)框圖如圖3所示。
圖3 系統(tǒng)軟件框圖
4 結(jié)束語
本文針對S3C2410硬件平臺和Linux操作系統(tǒng),設(shè)計并完成了在手持監(jiān)控終端上對實時視頻的播放,基本上達到了,預(yù)期的要求。由于本課題只是借鑒了流媒體的思想,利用的不是真正的流媒體技術(shù)所以會產(chǎn)生一定的播放延時,接下來的工作會探索流媒體技術(shù)在手持視頻終端上的應(yīng)用,進一步減少延時,以便可以更好的將流媒體技術(shù)利用到視頻監(jiān)控中。
創(chuàng)新點:本文所提出的手持監(jiān)控終端的設(shè)計方案充分利用了S3C2410的功能,并且創(chuàng)新性的把ffmpeg視頻編解碼庫移植到了基于S3C2410的硬件平臺上.通過建立循環(huán)數(shù)據(jù)鏈表的方法實現(xiàn)了視頻數(shù)據(jù)的接收和解碼的同時運行。
責任編輯:gt
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235280 -
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317633 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213836
發(fā)布評論請先 登錄
嵌入式Linux2.6在S3C2410上的移植技術(shù)探析
基于S3C2410嵌入式無線監(jiān)控系統(tǒng)的設(shè)計
基于S3C2410的嵌入式串口通信設(shè)計
基于S3C2410的手持監(jiān)控終端的研究與設(shè)計
S3C2410處理器 Bootloader(Vivi)源代碼
嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解-基于ARM
基于S3C2410嵌入式車載定位系統(tǒng)設(shè)計
Windows CE.NET在S3C2410處理器上的移植

S3C2410處理器特性
基于S3C2410和Windows CEnet的智能移動終端設(shè)計
基于S3C2410處理器對Windows CE 5.0操作系統(tǒng)實現(xiàn)BSP移植

基于在S3C2410處理器平臺上實現(xiàn)Windows CE.NET的應(yīng)用設(shè)計

基于S3C2410處理器實現(xiàn)USB網(wǎng)卡無線網(wǎng)絡(luò)功能的實現(xiàn)

基于S3C2410微處理器和Linux實現(xiàn)嵌入式網(wǎng)關(guān)的設(shè)計

評論