歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Freeswitch 音視頻編碼支持

1. freeswtich對高清(HD)語音編碼的支持

freeswitch支持 大部分高清語音編碼,包括Speex,G.722,G.722.1(Siren) 及SILK,與之對比,asterisk 1.8版本之前只支持采樣為8000的常用語音編碼,1.10後asterisk開始從新架構其media codec模塊,以全面支持高清等寬頻語音編碼。

2.有些語音編碼以模塊方式加載(G729等),有的則屬於freeswitch core部分(G711),系統默認不加載所有語音編碼,對於沒有加載的編碼,可以通過配置

modules.conf.xml配置,在fs_cli上 執行 "show codec" 會顯示當前系統已經加載的編碼:

type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,G.711 alaw,CORE_PCM_MODULE
codec,G.711 ulaw,CORE_PCM_MODULE
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp
codec,G.726 16k (AAL2),mod_spandsp
codec,G.726 24k,mod_spandsp
codec,G.726 24k (AAL2),mod_spandsp
codec,G.726 32k,mod_spandsp
codec,G.726 32k (AAL2),mod_spandsp
codec,G.726 40k,mod_spandsp
codec,G.726 40k (AAL2),mod_spandsp
codec,G.729,mod_g729
codec,GSM,mod_spandsp
codec,H.261 Video (passthru),mod_h26x
codec,H.263 Video (passthru),mod_h26x
codec,H.263+ Video (passthru),mod_h26x
codec,H.263++ Video (passthru),mod_h26x
codec,H.264 Video (passthru),mod_h26x
codec,LPC-10,mod_spandsp
codec,PROXY PASS-THROUGH,CORE_PCM_MODULE
codec,PROXY VIDEO PASS-THROUGH,CORE_PCM_MODULE
codec,Polycom(R) G722.1/G722.1C,mod_siren
codec,RAW Signed Linear (16 bit),CORE_PCM_MODULE
codec,Speex,mod_speex
codec,iLBC,mod_ilbc
以模塊方式加載的編碼在目錄 src\mod\codecs下面,所以如果我們想添加自己的編碼,在此目錄下參考其他實現即可,freeswitch對新編碼的添加接口也及其簡單,主要為注冊幾個四個回調,init,encode,decode,destroy,然後通過 switch_core_codec_add_implementation 把這幾個回調的實現注冊進去。

3. 設置編碼的優先級

vars.xml可以設置系統默認使用的編碼,為全局設置,下面兩個變量,一個表示呼入,一個表示呼出。
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G722,PCMA,PCMU,GSM"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=G722,PCMA,PCMU,GSM"/>

同時,不同的協議類型(SIP,和H323等)可以設置自己的編碼優先級,比如采用SIP協議時,可以在
sofia.conf.xml
<settings>
 <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
 <param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
</settings>

這裡,SIP協議類型繼承了vars.xml的全局設置(呼入,呼出)。

4. 對編解碼轉換的支持
(1)作為B2BUA,freeswitch支持大部分音頻編碼的轉換,但無視頻編碼轉換功能。
(2)對於語音編碼 G721 / G728 / G719 / AMR,只支持轉發,不支持轉換。
(3)freeswitch支持的視頻編碼 (只轉發)
H261 - H.261 Video
H263 - H.263 Video
H263-1998 - H.263-1998 Video
H263-2000 - H.263-2000 Video
H264 - H.264 Video
Provided by mod_h26X.
Theora passthrough.
Provided by mod_theora.
MP4 Video passthrough.
Provided by mod_mp4v.

(4)媒體代理
freeswitch對媒體的處理有三種方式:

a.默認方式:媒體通過freeswitch,
RTP被freeswtich轉發,
freeswitch控制編碼的協商並在協商不一致時提供語音編碼轉換能力,
支持錄音,二次撥號等。

b.代理模式: 媒體通過freeswitch轉發,但是不處理媒體
  RTP通過freewtich轉發(只改動sdp c= ip)
  freeswtich不控制 sdp參數,只是轉發。
  通話的終端必須有一致的語音或者視頻編碼,因為freeswitch此時不支持轉碼(適合視頻編碼)
  不支持錄音, 二次撥號等功能

c.不轉發也不處理媒體
此模式下freeswitch更像是一個信令proxy,媒體不會通過freeswitch,sdp消息體也不做修改,沒有錄音,二次撥號等功能。


三種方式在不同應用場景下各有優點,對於a,也是默認方式,更適合呼叫中心等富功能應用,但性能相比其他兩個也是最差的,對於b,更適合處理nat問題,
可以考慮用這種模式做一個session border controlor,也適合於外部MCU配合做為視頻會議,性能也明顯好於a,對於 c,更像是一個信令代理,性能最高,但提供的功能有限。

用Perl 語言寫freeswitch dialplan http://www.linuxidc.com/Linux/2012-10/73255.htm

FreeSWITCH 錄制視頻並播放 http://www.linuxidc.com/Linux/2012-08/68043.htm

FreeSWITCH 的詳細介紹:請點這裡
FreeSWITCH 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved