a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于SIP的嵌入式無線可視電話終端設計與實現

基于SIP的嵌入式無線可視電話終端設計與實現

作者: 時間:2009-02-26 來源:網絡 收藏

目前,許多國家都采用H.323作為IP電話網關之間的協議,把IP電話網關作為電路交換網和IP網絡的接口。但是,在下一代網絡中,由于大量IP產品的應用,使得端到端必須純IP網絡。3GPP已經確定將協議作為第三代移動通信全IP網絡的控制協議。(Session Initiation Protocol)協議是IETF于1999年提出的一種新的網絡多媒體通信交互信令,它相對于市場主體的H.323協議具有簡單、擴展性好、便于等優點。憑借這些優點,其得到業界的青睞,逐步成為NGN和3G多媒體子系統域中的重要協議。市場上出現越來越多支持的智能多媒體及相關軟件和軟交換設備,SIP將成為IP視頻電話業務的主流協議之一。

本文引用地址:http://www.j9360.com/article/152631.htm

  本文以為核心,通過幾個功能模塊的擴展,開發出一個SIP的視頻電話。該除了具備數字化和網絡化特點外,還采用了開放的SIP同其他電話設備進行通信,從而將網絡中任何一臺主機變成終端。同時,WIFI的網絡技術使得多媒體終端具備隨時部署的特點,并且逐步得到企業的認可。

1 總體方案

1.1 硬件系統結構

  本電話終端系統的硬件方案為:使用三星公司的通用ARM芯片配合操作系統WINCE5.0.NET各種外圍接口,視音頻編解碼處理和傳輸控制協議等。這樣既不存在芯片成本高的問題,又能保持很高的性能,可通過簡單的程序下載軟件升級或增加新的編解碼標準。系統的硬件結構框圖如圖1所示。實現該系統的要點是:在WINCE下添加USB攝像頭和USB網卡驅動模塊。

1.2 系統軟件結構

  系統硬件配置完成后,就需要定制平臺和編寫代碼實現各個功能模塊,最終實現整個系統。系統的軟件結構如圖2所示。

(1)用戶層:用戶的使用層,實現用戶用鍵盤撥號、接聽和掛斷電話等操作。

  (2)接口層:完成兩個功能,一是作為應用層和傳輸層的接口―建立套接字(SOCKET);二是擁有調用模塊層各個模塊的接口函數。

  (3)模塊層:系統核心層包括:SIP模塊、數據傳輸模塊、語音和視頻模塊。SIP模塊實現OSIP協議棧的3個模塊:解析器、有限狀態機和工具模塊。數據傳輸模塊中傳輸層使用UDP協議,用RTP/RTCP進行實時傳輸和控制。語音模塊和視頻模塊分別完成語音和視頻的采集與編解碼。

2 無線視頻電話終端的與實現

2.1 系統平臺

在WinCE產品開發中,內核定制和應用程序開發是非常重要的工作。

2.2 音頻編碼模塊的實現

系統初始化以后,音頻采集編碼模塊對應的子線程就被創建并掛起,當用戶需要采集音頻數據時再分別被喚醒。音頻采集編碼模塊主要完成語音的錄制和編碼。首先打開波形音頻輸入設備,準備好緩沖區,然后利用聲卡把語音錄入到準備好的緩沖區。一個緩沖區錄滿后,就可以對緩沖區中的數據進行編碼。其中音頻采集通過調用Windows低級音頻API函數族WaveIn和WaveOut來實現。編碼通過調用G.7XX音頻接口提供的編解碼器接口實現。

2.3 視頻采集編碼模塊的實現

筆者采用了OmniVision公司的OV7650 CMOS VGA 芯片。該芯片是一款高性能圖像壓縮芯片,輸出MJPEG視頻流數據。它的誤差穩定性非常好,可以獲取清晰度很高的視頻圖像,還可以靈活設置各路視頻清晰度,壓縮幀數。本系統直接從攝像頭驅動中獲取MJPEG視頻流數據,圖像采集流程如圖3所示。圖像采集模塊用到的主要函數有:

capInitCamera():用來初始化視頻設備,并獲取當前可用的視頻設備數目。

capSetVideoFormat():設置視頻格式和分辨率。本系統使用的視頻格式為RGB24,分辨率為320×240像素。

capGrabFrame():從驅動中抓取1幀圖像,并存儲在緩存FrameBuffer中。

capGetLastJpeg():將抓取的MJPEG格式的圖像轉換成JPEG格式,送到無線發送模塊。

視頻采集部分還有查詢視頻采集格式、設置明暗度、設置對比度等相關函數,這里不再詳述。在完成視頻采集后,再對視頻流進行的視頻壓縮。視頻編碼通過調用xvid視頻解碼器接口提供的編解碼器接口實現。音頻解碼回放模塊和視頻解碼回放模塊將接收到的音頻和視頻數據解碼后播放。視頻播放則將視頻數據格式轉化為RGB,再用函數DrawDibDraw將其顯示。

2.4 xvid解碼算法在實時傳輸部分的優化

2.4.1 xvid解碼對零系數塊的處理分析

在解碼過程中,如果知道圖像宏塊/塊為零系數塊,則可以直接跳過該塊的解碼過程(包括IQ和IDCT過程),從而大大節省解碼的計算量。在編碼器模型Xvid的程序中看到,在IDCT部分,參數CBP(編碼塊模式)是專門用來指示正在進行編碼和不再進行編碼的宏塊的信息。它是一個6bit的稽核,每個都代表了一個宏塊的一小塊。bit的狀態表示了該塊是否被編碼。如果塊的所有系數都為零,則塊就沒有被編碼。這個參數在進行IQ、IDCT、反向掃描和重建之前被檢驗,這些過程并不對CBP為零的塊進行。通過CBP解碼過程,在塊的基礎上的所有冗余計算都被減少了。

在Xvid解碼程序decoder.c的decoder_mbinter()函數中,最后有如下判斷:

If(cbp)

Decoder_mb_decode(dec,cbp,bs,py_cur,pu_cur,pv_cur,reduced_resolution,pMB);

由此說明在參數CBP為零的情況下是不做宏塊解碼工作的。

但是這里可以看出,CBP參數為零代表的是整個宏塊量化后的DCT系數都為零,這里執行的是對整個宏塊后續解碼的跳出工作。而對于整個宏塊量化后的DCT系數不全為零,只有幾個8×8的塊量化后的DCT系數為零的情況下,在decode.c的decoder_mb_decode()函數中有如下過程:

For(i=0;i6;i++){

If(cbp(1(5-i)))){

Memset(block,0,64*sizeof(int16_t));

Start_timer();

Get_inter_block(bs,block,direction);

Stop_coding_timer();

Stop_iquant_timer();

Stop_idct_timer();

}

}

從以上程序看出:由于CBP有6bit,每個bit都代表了一個宏塊中的一個8×8小塊,因此當相應的8×8塊為零時,就直接跳過對該8×8塊的反向量化和IDCT過程。

2.4.2 xvid解碼中IDCT和IQ的優化

在IDCT程序中加入判斷語句,把全系數IDCT根據判斷前6個(精確度低一些)或者10個DCT系數的值分別進行0系數IDCT變化(直接賦零)、3系數IDCT變換、64系數IDCT變換,這樣得到的程序計算量比原程序減少很多。

在這里用If判斷,如果這10個DCT系數都為零,則認為此塊是全0DCT系數,直接令此塊的所有IDCT后的系數為零。如果前3個系數block[0]、block[1]、block[8]不全為零,后7個系數block[2]、block[3]、block[9]、block[10]、block[16]、block[17]、block[24]全為零,則認為此子塊系數是3DCT系數的,直接對其進行3系數的IDCT(程序已編好)。如果上述兩種都不滿足,就對其進行全系數的IDCT。

判斷工作在XVID程序的idct.c中進行,在原始的函數idct_int32(short*const block)中加入判斷程序。

IQ部分的優化思路和IDCT優化類似,不再詳述。

2.5 用戶代理的實現

SIP UA模塊用于會話的建立、修改、終止,起著信令控制作用。此模塊使用的SIP協議棧是OSIP2和EXOSIP。

OSIP2協議棧的開發步驟為:

(1)初始化:主要調用函數osip_global_init()和osip_init(),操作代碼如下:

Osip_t*osip;

if(!osip_global_init())

Return -1;

If(!osip_init())

Return -1;

Osip棧需要在運行前初始化。在使用Osip棧之前,osip_global_init()函數是第一個被調用的,并且只能調用一次。調用這個函數將初始化語法分析。

(2)注冊回調函數:包括發送消息、結束事務、發送失敗和4個狀態機相關的函數。

(3)建立事務:在注冊完回調函數后,應用可以建立用來調用OSIP的解析器。

EXOSIP有二種工作模式:事件模式和回調模式。本軟件采用的是事件模式。使用一個定時器,定時到時就通過函數eXosip_wait_event()去獲取SIP事件,SIP事件主要有EXOSIP_CALL_NEW、EXOSIP_CALL_ANSWERED等。事件獲取后,調用相應的事件處理函數,如SipCallNew、SipCallRinging、SipCallAnswered等。要建立、修改、終止呼叫還需要調用EXOSIP的osip_build_initial_invite、eXosip_initiate_call等函數。

2.6 音視頻數據傳輸的實現

利用RTP/RTCP實現語音視頻流的實時傳輸。RTP負責數據發送和接收,RTCP負責網絡丟包、誤碼情況的反饋等。通過調用JRTPLIB提供的庫函數就可以開發出高質量的音/視頻傳輸程序。

發送端調用JRTPLIB提供的庫函數實現語音視頻等的實時發送過程為:(1)通過調用RTPSession類的構造函數創建一個RTP會話實例,然后調用RTPSession類的方法對其初始化,設置負載類型、標識和時戳增量,以及指定流媒體的目標地址;(2)設置RTP會話參數,通過調用RTPSessionParams類的SetOwnTimeStampUnit()方法設置時間戳和RTP傳輸參數;(3)通過調用SendPacket()方法向目標地址發送采集編碼后的音視頻數據。接收端的創建RTP會話實例和RTP會話參數設置與發送端的設置相同。

本文設計和實現了一個基于SIP的網絡無線終端模型。該終端支持音頻和視頻的實時通信。終端之間采用開放的SIP進行通信,SIP的應用避免了采用私有協議所帶來的封閉性,提高了同其他設備的互通性;同時利用WiFi技術提高了視頻電話終端的便攜性。SIP協議具有簡單、可擴展的特性,將會在下一代網絡中占有重要地位。目前對SIP在視頻電話系統中的應用還處于試驗階段,能與之通信的SIP設備還不多,但隨著NGN平臺的建立和SIP設備的不斷增多,其靈活性和互通性的優點會逐漸體現出來。支持多人的終端將是進一步要研究的課題,前景一片光明。

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


評論


相關推薦

技術專區

關閉