引言 視頻電話終端依據其使用方式的不同,大體可分為“PC到PC”型和“電話到電話”,“PC到電話”型三大類。“電話到電話”型產品兩端都不需要計算機,電話終端本身包含音視頻處理器或者音視頻處理軟件完成音視頻即時通訊功能。由于此類產品使用簡單、安裝方便、便于控制、性價比合理等優點..市場前景廣闊,是目前國內外研究的熱點。 SIP(Session Initiation Protocol)協議是IETF于1999年提出的一種新的網絡多媒體通信的交互信令,它相對于市場主體的H.323協議具有簡單、擴展性好、便于實現等優點,憑借其簡單、易于擴展、便于實現等諸多優點越來越得到業界的青睞,它正逐步成為NGN和3G多媒體子系統域中的重要協議。市場上出現越來越多支持SIP的智能多媒體終端及相關軟件和軟交換設備,SIP將成為IP視頻電話業務的主流協議之一。 本文提出了一個基于SIP的嵌入式無線視頻電話終端,它除了采用數字化和網絡化的手段以外,還使用了嵌入式Wince設備代替原有系統的軟電話軟件,提高了電話設備的移動性和靈活性。更為重要的是它采用了開放的SIP同其他電話設備進行通信,從而將網絡中任何一臺主機變成終端,一方面擴展了通信范圍,另一方面還可以同執行SIP的其他設備進行通信。同時,基于IP網絡技術的多媒體通信以其部署簡單,業務豐富,成本低廉等特點逐步得到企業的青睞。 1 總體方案設計 1.1 硬件系統結構 本文確定的電話終端系統的硬件方案為:使用三星公司的通用ARM芯片S3C2410配合嵌入式操作系統WINCE5.0.NET實現各種外圍接口,視音頻編解碼處理,和傳輸控制協議等。這樣既不存在芯片成本高的問題,又能保持很高的性能,可通過簡單的程序下載實現軟件下載升級或者增加新的編解碼標準。系統的硬件結構框圖如圖1所示。實現該系統的要點是:在WINCE下添加USB攝象頭和USB無線網卡驅動模塊。 圖1 系統硬件結構圖 1.2應用軟件結構 在系統硬件完成后,剩下的需要大量的工作來定制平臺和編寫代碼實現各個功能模塊,最終實現整個系統。系統的軟件結構如圖2所示。音頻編碼采用G.711/729/723.1,是為了讓終端能適應音頻編解碼的非對稱操作。本文根據視頻電話終端的特點和當前實現的技術難點主要討論視頻采集傳輸和SIP協議棧2大核心技術的軟件實現。 圖2 軟件系統結構圖 2 無線視頻電話終端的設計與實現 2.1 系統平臺的設計 在WinCE產品開發中,主要有內核定制和應用程序開發兩項非常蓖要的工作。 2.2 音頻編碼模塊的實現 在系統初始化以后,音頻采集編碼模塊對應的子線程就被創建并掛起。當用戶需要采集音頻數據時才分別被喚醒。音頻采集編碼模塊主要完成語音的錄制和編碼處理過程。首先打開波形音頻輸入設備,準備好緩沖區;然后利用聲卡把語音錄入到準備好的緩沖區里區,一個緩沖區錄滿后,就可以對緩沖區里的數據進行編碼。其中音頻采集通過調用Windows低級音頻API函數族WaveIn和WaveOut來實現.編碼通過調用G.7XX音頻接口提供的編解碼器接口實現。 2.3 視頻采集編碼模塊的實現 2.3.1 視頻采集編碼模塊 筆者采用了中星微301PLUS快速主控芯片。該芯片是一款高性能圖像壓縮芯片。輸出MJPEG視頻流數據。它的誤差穩定性非常好,可以獲取清晰度很高的視頻圖像,而且還可以靈活設置各路視頻清晰度,壓縮幀數。本系統直接從攝像頭驅動中獲取MJPEG視頻流數據,圖像采集流程如圖3所示。圖像采集模塊用到的主要函數有: capInitCamera() 用來初始化視頻設備,并獲取當前可用的視頻設備數目。 capSetVideoFormat() 設置視頻格式和分辨率。本系統使用的視頻格式為RGB24,分辨率為320x240像素。 capGrabFrame() 從驅動中抓取1幀圖像,并存儲在緩存FrameBuffer中。 capGetLastjpeg() 將抓取的MJPEG格式的圖像轉換成JPEG格式.送到無線發送模塊。 圖3 視頻編碼模塊流程 視頻采集部分還有查詢視頻采集格式、設置叫暗度、設置對比度等相關函數,不再詳述。在完成視頻采集后,再對視頻流進行H.263+的視頻JK締。視頻編碼通過調用H.263+視頻接口提供的編解碼器接口實現。音頻解碼回放模塊和視頻解碼回放模塊將接收到的音頻和視頻數據解碼后播放。視頻播放則將視頻數據格式轉化為RGB.再用函數DrawDibDraw函數將其顯示。 2.4 語音視頻流實時傳輸部分的實現 2.4.1 配置無線網卡 本次開發通過開發板和主機之間的無線網卡構建無線局域網絡,能夠實現點對點的無縫連接,筆者通過此無線網絡可以實現文件傳輸、視頻通信等應用。開發板端的無線網卡也需要加載驅動才能運行。 2.4.2 音視頻數據傳輸的實現 利用RTP/RTCP實現語音視頻流的的實時傳輸.RTP負責數據發送和接收,RTCP負責網絡丟包、誤碼情況的反饋等。JRTPLIB是一個用C++語言實現的,面向對象的開源的RTP庫,它通過調用JRTPLIB提供的庫函數就可以開發出高質量的音,視頻傳輸程序。 發送端調用JRTPLIB提供的庫函數實現語音視頻等的實時發送的過程是: 1) 通過調用RTPSession類的構造函數創建一個RTP會話實例.然后調用RTPSession類的方法來對其進行初始化操作,來設置負載類型、標識和時戳增量。以及指定流媒體的目標地址。 2) 設置RTP會話參數,通過凋用RTPSeftsionParams類的SetOwnTimeStampUnit()方法來設置時間戳和設置RTP傳輸參數。 3) 調用SendPacket()方法用來向目標地址發送采集編碼后的音視頻數據。接收端的創建RTP會話實例和RTP會話參數設置和發送端的設置是一樣的。 2.5 SIP用戶代理的實現 SIP UA模塊用于會話的建立、修改、終止,起著信令控制作用。此模塊使用的SIP協議棧是OSIP2和EXOSIP。 EXOSIP有2種工作模式:事件模式和同調模式。本軟件采用的是事件模式,使用一個定時器,定時到了后就通過函數exosip_wait_event()去獲取SIP事件,SIP事件主要有EXOSIP_CALL_NEW、EXOSIP_CALL_ANSWERED等。獲取到事件后.就調用相應的事件處理函數,如SipCallNew、SipCallRinging、SipCallAnswered等等。要建立、修改、終止呼叫還需要調用EXOSIP的以下幾個函數:osip_build_initial_invite、eXosip_initiate_call等。 呼叫的有關控制變量都存在CCall類中,如呼叫ID、對話ID、對端IP、對端RTP端口、語音通信的線程號、是否允許有RTP流等。SIP系統中的呼叫類型主要有兩個用戶代理之問的普通呼叫、重定向呼叫和通過代理服務器的呼叫。 3 結語 本文設計和實現了一個基于SIP的無線視頻電話終端,該終端使用嵌入式WINCE設備代替傳統的USB電話和軟電話軟件,提高了電話系統的移動性和靈活性。終端之間采用開放的SIP進行通信,實現電話的呼叫,接聽,關閉和重定向等功能。SIP的應用避免了采用私有協議所帶來的封閉性,提高了同其他設備的互通性,擴大了通信的物理范周,也節約了通話成本。同時利用WIFI技術的加入提高了視頻電話終端的便攜性。目前SIP在視頻電話系統中的應用還處于試驗階段,能與之通信的SIP設備還不是很多,但隨著NGN平臺的建立和SIP設備的不段增多.它的靈活性和互通性的優點會逐漸體現出來。同時,基于IP網絡技術的多媒體通信以其部署簡單,業務豐富,成本低廉等特點逐步得到企業的青睞。 本文作者創新點:1.在WINCE5.0嵌入式操作系統上實現可視電話終端,WINCE5.0相比較LINUX和過去WINCE的低版本操作系統來說實時性方面大大提高。目前目內的SIP電話都是基于嵌入式LINUX或者WINCE低版本系統。2.在802.1la/b/g無線局域網(WLAN)上采用VoIP技術實現VoWiFi電話終端語音視頻通話功能。3.本義實現的SIP電話終端口可以集成多種業務,如語音信箱.通過WIFI無線上網,重定向呼叫等業務。 項目直接經濟效益30萬。 作者:李君懿,趙利,鄒柏程 來源:《微計算機信息》(嵌入式與SOC)2009年第2-2期 |