1. 程式人生 > >freeswitch 音視訊編碼支援

freeswitch 音視訊編碼支援

我建了一個 Freeswitch 核心研究 交流群, 45211986, 歡迎加入, 另外,提供基於SIP的通訊伺服器及客戶端解決方案。

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,更像是一個信令代理,效能最高,但提供的功能有限。

相關推薦

freeswitch 視訊編碼支援

我建了一個 Freeswitch 核心研究 交流群, 45211986, 歡迎加入, 另外,提供基於SIP的通訊伺服器及客戶端解決方案。 1. freeswtich對高清(HD)語音編碼的支援 freeswitch支援 大部分高清語音編碼,包括Spee

android視訊指南-支援的媒體格式

本文描述了Android平臺提供的媒體編解碼器、容器和網路協議支援。 作為應用程式開發人員,您可以使用任何可以在任何Android裝置上使用的媒體編解碼器,包括Android平臺提供的媒體編解碼器和特定於裝置的媒體編解碼器。然而,使用與裝置無關的媒體編碼配置檔

H.264/ACC視訊編碼流的RTP/RTSP傳輸實現(1)

目標:   實現一個用於H.264/ACC音視訊編碼流的RTP/RTSP傳輸的簡單伺服器,主要通過此過程學習基於RTP的NAL、ADTS碼流封裝技術和基於RTSP的視訊互動控制技術。完整系統應該包括伺服器和客戶端兩個部分,其中伺服器負責接收客戶端請求、封包以及

live555對於實時視訊支援

live555本身,可以支援將檔案作為源,提供RTSP播放伺服器功能。 為了使live555能夠支援實時流的播放,需要進行改造。 有兩種方式:1,一個比較簡單,可以使用管道檔案的方式。缺點是當碼流較大時,   會明顯的卡頓、馬賽克。(測試超過80K時會卡得非常厲害)2,再一

使用MediaCodec實現H264編碼「第四章,Android視訊編碼那點破事」

  本章僅對部分程式碼進行講解,以幫助讀者更好的理解章節內容。 本系列文章涉及的專案HardwareVideoCodec已經開源到Github,支援軟編和硬編。使用它你可以很容易的實現任何解析度的視訊編碼,無需關心攝像頭預覽大小。一切都如此簡單。目前已迭代多個穩定版本,歡迎

【轉貼】資料性文章:關於移動裝置的視訊編碼支援

The bad news first. There are hundreds of mobile devices out there, and it’s basically impossible to support 100.0% of them. The good news is that mobile

Android硬體編碼視訊編碼以及視訊混合

概述 通常來說,對於同一平臺同一硬體環境,硬編硬解的速度是快於軟體編解碼的。而且相比軟體編解碼的高CPU佔用率來說,硬體編解碼也有很大的優勢,所以在硬體支援的情況下,一般硬體編解碼是我們的首選。  在Android中,我們可以直接使用MediaRecord來進行錄影,但

視訊編碼格式和封裝格式的關係和區別是什麼?

每一種格式都與當時的時代背景相關。 以下介紹都是按照時間順序進行: 1:mpeg應該是比較老的格式。這種格式是當時用於vcd。裡面的視訊壓縮用的是mpegv,音訊編碼是mpega。編碼效能低下,目前已經基本淘汰,僅在ktv行業還在大規模使用。 2:mp4是之後比較流行的格式,這個其實與蘋果公司主推的mov格式

Android使用系統API進行視訊編碼

一、前言 上一篇文章我講到,我用libx264對視訊進行h264編碼效率非常低下,原因在於libx264採用的是軟編碼。於是我在網上搜索得知使用系統的API可以對視訊進行硬編碼,從而減少cpu的壓力,達到提高效率的作用。我寫了一個demo試了一下,果真效率提高

即時通訊視訊開發(八):常見的實時語音通訊編碼標準

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(六):如何開始音訊編解碼技術的學習》 《即時通

即時通訊視訊開發(七):音訊基礎及編碼原理入門

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(五):認識主流視訊編碼技術H.264》 《即時

即時通訊視訊開發(五):認識主流視訊編碼技術H.264

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(三):視訊編解碼之編碼基礎》 《即時通訊音視訊

即時通訊視訊開發(三):視訊編解碼之編碼基礎

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(一):視訊編解碼之理論概述》 《即時通訊音視訊

C++實現RTMP協議傳送H.264編碼及AAC編碼視訊直播

  RTMP(Real Time Messaging Protocol)是專門用來傳輸音視訊資料的流媒體協議,最初由Macromedia 公司建立,後來歸Adobe公司所有,是一種私有協議,主要用來聯絡Flash Player和RtmpServer,如FMS, Red5, 

iOS視訊—FFmepg基礎知識:命令列工具使用&封裝格式&視訊編碼音訊編碼資料瞭解&視訊畫素音訊取樣資料格式

iOS音視訊相關目錄 FFmepg基礎知識 封裝格式 1、封裝格式:mp4、mov、flv、wmv等等… 2、作用:視訊流+音訊流按照格式進行儲存在一個檔案中 3、MPEG2-TS格式:傳輸流,又稱TS、TP、MPEG-TS或M2T,用於音效、影象與資料的通訊協議。屬於

C++實現RTMP協議傳送H.264編碼及AAC編碼視訊

作者HBStream   RTMP(Real Time Messaging Protocol)是專門用來傳輸音視訊資料的流媒體協議,最初由Macromedia 公司建立,後來歸Adobe公司所有,是一種私有協議,主要用來聯絡Flash Player和RtmpServer

Android如何回撥編碼後的視訊資料

有開發者提到,在推送RTMP推送端的基礎上,希望能回撥編碼後的音視訊資料,便於開發者對接第三方系統,如GB28181. 為此,我們加了一下介面: 1. 設定音視訊callback 對應介面: /** * Set Audio Encoded Data Callba

C同學的工作筆記 螢幕錄製/暫停及視訊混合編碼

最近做到螢幕錄製,費了些功夫,簡單記錄下開發過程 5.0中提供了MediaProjection類來實現錄屏,用起來也簡單 核心是MediaProjection、MediaCodec、MediaMuxer 我的理解就是:採集 -> 轉碼 -> 混合生存檔案

關於LED電視機視訊編碼H.264,MPEG4,MPEG2能支援哪些格式的視訊檔案

MPEG4封裝格式能支援.MPG、.3GP、.MP4等視訊檔案格式的視訊。 今天買了一臺很普通的LED電視機,當前電視機基本都提供USB介面,以便播放U盤或者行動硬碟的視訊資源,可是在問賣家電視機支援什麼格式的視訊檔案時,他告訴我支援H.264,MPEG4,M

ffmpeg的那點小事兒--編譯ffmpeg同時支援libx264(視訊編碼)和libfdk(音訊編碼

ffmpeg的那點小事兒--編譯ffmpeg同時支援libx264(視訊編碼)和libfdk(音訊編碼) 主要是shell指令碼編寫上的問題,直接上指令碼程式碼 #!/bin/bash #1、首先:定義下載的庫名稱 source="ffmpeg-4.0.2" #2、其次:定義".h/