作者:缐曉林 游向東 潘力
前言
隨著因特網的發展成熟、用戶需求的增長以及宏觀環境變暖等條件的刺激,基于網絡的音視頻通信行業迅速發展起來。本文介紹基于Freescale公司i.MX27硬件平臺,基于SIP(初始會話協議)協議的網絡視傳機的設計與實現。
視傳機的軟硬件技術基礎
i.MX27
將視頻編解碼功能嵌入到多媒體應用處理器中已經成為一個趨勢。Freescale DragonBall家族最新成員i.MX27多媒體應用處理器,片內集成H.264/MPEG4全雙工硬件編解碼視頻處理單元,是嵌入式多媒體應用處理器的一顆新星,可廣泛應用于多種產品中。i.MX27處理器內部的硬件編解碼模塊性能強勁,可以達到H.264/MPEG4編解碼D1分辨率:720×576@25fps;720×480@30fps;全雙工編解碼同時進行可以達到VGA分辨率:640×480@30fps。
SIP協議
SIP是由IETF(國際互聯網標準制定組織)制定的面向 Internet 會議和電話的信令協議。SIP是一個應用層的協議,可以建立,修改或者中止多媒體會話或者呼叫。它是一個基于ASCII的端到端的協議,它實際上是在因特網上提供“約會”服務。用來實現VoIP的開放協議,最常用的有三種,SIP、MGCP(Media Gateway Control Protocol)和H.323。
SIP協議是專門為IP 電話,尤其是結合Internet設計的協議,同傳統的H.323協議相比,SIP 擁有明顯的優越性:優異的可擴展性,大大提高了系統的處理能力;與 Internet 緊密結合,使通訊更加輕松便捷的;卓越的開放性,不僅能夠對手機、 PDA 等移動設備提供良好的支持,對于在線即時交流、語音和視頻數據傳輸等多媒體應用也能夠很好地完成。
SIP協議支持5方面的能力:用戶定位、用戶可用性、用戶能力、會話建立、會話管理。SIP協議本身不提供業務,但是它提供業務支持的基礎。SIP協議本身也不提供會議控制,但是SIP協議可以與任何一個會議控制的協議綁定。
Linphone
Linphone是基于WEB的IP電話工具,運行于Linux和Windows Xp下。通過Linphone可以在互聯網上和其他人自由地進行聲音、視頻通信,也可以進行及時文本信息傳送。Linphone是遵從SIP協議開發的,它需要和支持SIP協議的電話或者代理服務器進行相互操作。如果把基于Linphone開發的VoIP設備通過PSTN帳號注冊到電信服務器上,就可以通過它和普通電話進行通話了。但是這些通話不是免費的,因為PSTN是收費服務。Linphone是開源免費軟件,可以自由下載和重新發布。
MiniGUI
MiniGUI是面向實時嵌入式系統的輕量級圖形用戶界面支持系統。目前,MiniGUI已成為跨操作系統的圖形用戶界面支持系統,可在Linux/uClinux、eCos、uC/OS-II、VxWorks等操作系統上運行。
MiniGUI為實時嵌入式操作系統提供了完善的圖形及圖形用戶界面支持。可移植性設計使得它不論在哪個硬件平臺、哪種操作系統上運行,均能為上層應用程序提供一致的應用程序編程接口(API)。MiniGUI的技術優勢:輕型、占用資源少,高性能、高可靠性,可配置,可伸縮性強,跨操作系統支持等。
視傳機的實現
視傳機的最主要功能包括:通過IP或者向服務器注冊的ID號呼叫另一臺接在網絡上的設備,進行視頻流實時雙向收發(1幀-25幀/s),最高分辨率可達640×480(廣播級圖像質量/D1),可設置音頻流格式,G.711/GSM/SPEEX,此功能適用于高網絡帶寬的應用環境。另外視傳機還可以實現電影播放,音視頻單向傳輸(遠程監控),音視頻錄制播放,圖片單雙向收發,音視頻郵件收發等功能。
視傳機實現這些功能基本原理就是用MiniGUI制作圖形界面進行人機交互,用戶通過鍵盤或者遙控器進行指令輸入,MiniGUI接收用戶指令,并傳給操作系統(這里我們使用Linux 2.6.19),操作系統根據指令的不同進行不同的操作,例如若用戶想進行視頻呼叫,操作系統就將指令發給Linphone,Linphone就在SIP協議的基礎上發起視頻呼叫,根據對方不同的狀態給出不同的響應,對方不在線、對方忙、對方正常應答等,在正常應答的情況下雙方協商音頻視頻通信編解碼方式,建立呼叫,進行音視頻通信,然后任意一方掛機,退出,完成一次通信,期間還可以進行音視頻錄制等操作。再如若用戶想進行電影播放,則操作系統會調出播放程序,播放用戶指定的電影文件。
視頻流的流程如下:由攝像頭(支持自帶插針式和TV輸出兩種)采集圖像數據,交給操作系統,操作系統根據用戶需要,將視頻數據進行本地顯示、編碼錄制或者發送到對端,對端收到視頻數據送入VPU單元進行解碼,然后顯示或者錄制等。通話過程中音頻流的流程為:通過mic采集音頻數據,交給操作系統,操作系統將數據送給Linphone,Linphone進行一定格式的編碼,然后發送到對端,對端再進行相應的解碼,再將數據輸出到音箱或者耳機。
視傳機主要軟件Linphone的移植
Linphone有很多個版本,可以通過www.linphone.org免費下載。我們這里使用帶視頻功能的linphone1.6.0版本,要將這個Linphone使用在開發板上,需要做3個方面的工作:添加H264硬件視頻編解碼器(使用i.MX27的VPU單元進行視頻編解碼),修改程序使之與操作系統和其他應用程序進行通信,最后交叉編譯Linphone至開發板。
Linphone功能結構
Linphone1.6.0版本的功能結構如圖1。
console包括了整個終端界面部分,將界面操作和命令行輸入交由下層處理。
coreapi包含Linphone大部分核心接口函數,如讀配置文件進行程序初始化、呼叫的建立和結束、對SDP消息的處理等。
osip2是一個短小簡潔的sip協議棧,專注于sip底層解析。
exosip是osip2的一個擴展協議集,它部分封裝了osip2協議棧,使得它更容易被使用。
mediastreamer模塊負責語音及鈴音等的處理及傳輸,視頻的編解碼(調用ffmpeg的庫)、聲卡的選擇等。
ortp將音視頻打包為rtp包發送至指定端口。
speex是一種音頻解碼庫。
添加H264硬件視頻編解碼器
Linphone1.6.0 本身具有視頻編解碼功能,默認具有H263 、mpeg4、mjpeg等編解碼器,我們要仿照這些編解碼器的源碼結構添加H264解碼器,重要的是將編解碼器的軟件編解碼部分替換成i.MX27的 VPU(視頻處理單元)來進行硬件編解碼,因為i.MX27的CPU處理速度有限,遠及不上PC的CPU,而i.MX27的VPU則是專門進行視頻編解碼處理的協處理器,在處理視頻數據的時候是不需要CPU參與。
代碼的添加過程如下:在向Linphone注冊編解碼器的地方添加H264編解碼器,使得Linphone具備H264編解碼器的功能選項,注冊的內容包括:編解碼器id,一些名稱文本等標識符,編解碼器初始化,視頻數據預處理、處理、后處理,編解碼器銷毀(釋放系統資源)等函數鏈接,編解碼器方法(進行基本視頻編解碼處理之外的操作)等。注冊好編解碼器后,就是如何真正實現編解碼器對視頻流的編解碼處理了,也就是編解碼器的初始化,視頻數據預處理、處理、后處理,編解碼器銷毀等函數的實現。視頻處理的軟件部分主要包括內核空間的驅動和編解碼庫以及用戶空間的應用程序。內核驅動負責系統控制和系統資源的申請和釋放,提供一些IOCTRL接口給用戶空間的應用程序使用調配系統硬件資源;用戶空間的應用程序調用適當的IOCTRL和編解碼庫函數來實現復雜的編解碼系統。
VPU的內核驅動主要包括以下功能:模塊初始化、器件初始化、中斷服務策略、文件操作策略、器件關閉、編解碼庫、系統IO操作等。
視頻編解碼的計算和絕大部分視頻流的壓縮/解壓縮都是由i.MX27的硬件VPU單元來完成的,這樣軟件就不需要過多的控制或者時間消耗等來實現一個復雜的編解碼系統。VPU的硬件數據流可以用一個mpeg4格式數據的解碼實現過程展示(見圖2)。
硬件編解碼速度快、效率高、功耗和熱功耗低,節省了CPU的資源,實現了良好畫質的傳輸,這一點充分體現了i.MX27芯片在視頻處理方面的優勢。
結語
本文基于linphone、ffmpeg、speex、minigui、linux等開源軟件實現了嵌入式可視終端軟件系統——視傳機樣機,如圖3所示。樣機充分使用已有的開源軟件成果進行開發,實現語音通話,視頻通話,視頻監控,媒體文件播放等基本的功能。
責任編輯:gt
-
人機交互
+關注
關注
12文章
1217瀏覽量
55478 -
接口
+關注
關注
33文章
8691瀏覽量
151707 -
遙控器
+關注
關注
18文章
840瀏覽量
66461
發布評論請先 登錄
相關推薦
評論