缐曉林 游向東 潘 力
摘要:本文介紹一款硬件基于i.Mx27、軟件基于SIP協議的網絡視傳機的設計與實現,對該產品的軟硬件實現做全面闡述。
關鍵詞:網絡視傳機;i.MX27;sIP;Linphone;MiniGUI
前言
隨著因特網的發展成熟、用戶需求的增長以及宏觀環境變暖等條件的刺激,基于網絡的音視頻通信行業迅速發展起來。本文介紹基于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的端到端的協議,它實際上是在因特網上提供“約會”服務。用來實現v0IP的開放協議,最常用的有三種,SIP、MGCP(Media GatewayControl Protoc01)和H.323。
SIP協議是專門為IP電話,尤其是結合Internet設計的協議,同傳統的H.323協議相比,SIP擁有明顯的優越性:優異的可擴展性,大大提高了系統的處理能力:與Internet緊密結合,使通訊更加輕松便捷的:卓越的開放性,不僅能夠對手機、PDA等移動設備提供良好的支持,對于在線即時交流、語音和視頻數據傳輸等多媒體應用也能夠很好地完成。
SIP協議支持5方面的能力:用戶定位、用戶可用性、用戶能力、會話建立、會話管理。SIP協議本身不提供業務,但是它提供業務支持的基礎。SIP協議本身也不提供會議控制,但是SIP協議可以與任何一個會議控制的協議綁定。
Linohone
Linphone是基于WEB的IP電話工具,運行于Linux和Windows Xp下。通過Linphone可以在互聯網上和其他人自由地進行聲音、視頻通信,也可以進行及時文本信息傳送。Linphone是遵從SIP協議開發的,它需要和支持SIP協議的電話或者代理服務器進行相互操作。如果把基于Linphone開發的VolP設備通過PSTN帳號注冊到電信服務器上,就可以通過它和普通電話進行通話了。但是這些通話不是免費的,因為PSTN是收費服務。Linphone是開源免費軟件,可以自由下載和重新發布。
MinGUI
MiniGUI是面向實時嵌入式系統的輕量級圖形用戶界面支持系統。目前,MiniGUI已成為跨操作系統的圖形用戶界面支持系統,可在Linux/uClinux、eCos、uC/OS—II、VxWorks等操作系統上運行。
MiniGUI為實時嵌入式操作系統提供了完善的圖形及圖形用戶界面支持。可移植性設計使得它不論在哪個硬件平臺、哪種操作系統上運行,均能為上層應用程序提供一致的應用程序編程接口(API)。MiniGUI的技術優勢:輕型、占用資源少,高性能、高可靠性,可配置,可伸縮性強,跨操作系統支持等。
視傳機的實現
視傳機的最主要功能包括:通過IP或者向服務器注冊的ID號呼叫另一臺接在網絡上的設備,進行視頻流實時雙向收發(1幀25幀/s),最高分辨率可達640×480(廣播級圖像質量/DI),可設置音頻流格式,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至開發板。

Unphone功能結構
Linphone1.6.0版本的功能結構如圖1。
console包括了整個終端界面部分,將界面操作和命令行輸入交由下層處理。
coreapi包含Linphone大部分核心接口函數,如讀配置文件進行程序初始化、呼叫的建立和結束、對sDP消息的處理等。
osip2是一個短小簡潔的sip協議棧,專注于sip底層解析。
exosip是osip2的一個擴展協議集,它部分封裝了osip2協議棧,使得它更容易被使用。