FreeSWITCH視頻直播


大家都知道,如今,視頻直播比較火啊。

今天,在FreeSWITCH精英群里分享了FreeSWITCH做視頻直播相關的技術。

首先,要做直播就得有好機器。筆者買了一台阿里雲的主機,買的是按量付費的,4核4G內存,裝Debian 8.0.4(話說阿里雲終於有了Debian 8的鏡象了)。

FreeSWITCH直接有針對Debian 8的安裝包,不過筆者通常是編譯安裝,今天還是編譯安裝的。

安裝FreeSWITCH依賴:

apt-get install -y build-essential automake autoconf 'libtool-bin|libtool' wget curl python uuid-dev zlib1g-dev 'libjpeg8-dev|libjpeg62-turbo-dev' libncurses5-dev libssl-dev libpcre3-dev libcurl4-openssl-dev libldns-dev libedit-dev libspeexdsp-dev libspeexdsp-dev libsqlite3-dev perl libgdbm-dev libdb-dev bison libvlc-dev pkg-config libsndfile1-dev libopus-dev lua5.2-dev 

更多

apt-get install -y yasm nasm libavformat-dev libswscale-dev 

常用的工具

apt-get install -y git htop tcpdump 

Clone FreeSWITCH,使用master版,使用國內的鏡象,比官網的要快:

git clone http://git.coding.net/dujinfang/FreeSWITCH.git 

編譯安裝:

./bootstrap.sh ./configure make -j make install make sounds-install make moh-install 

安裝 mod_av

cd freeswitch.git cd src/mod/applications/mod_av make make install 

修改幾個地方:

首先,修改 conf/dialplan/default.xml ,找到 1234,把 1234改成任何其它的字符串,以防止FreeSWITCH sleep 10秒,表現就是打電話慢。

另外,修改 conf/autoload_configs/conference.conf.xml ,把里面的1920x1080改成1280x720。節省點機器資源和帶寬。

FreeSWITCH源代碼里有個 html5/verto/verto_communicator 目錄,安裝verto

cd html5/verto/verto_communicator ./debian8-install.sh 

執行完比后將生成dist目錄。

話說,上面說歸說,筆者不是那么做的。原因如下:

Veto communicator是用Angular框架開發的,依賴很多node.js相關的東西。很多,在阿里雲的服務器上,下載不下來。當然,這不是阿里雲本身的問題,你懂的。

所以,筆者早就在其它電腦上編譯好了dist。將里面的內容copy到 /root/www/vc 目錄下,備用。

修改 conf/autoload_configs/verto.conf.xml ,把下列內容加到 profile 里(前面):

<vhosts>     <vhost domain="localhost">         <param name="alias" value="seven.local freeswitch.org"/>         <param name="script-root" value="/root/www/vc"/>         <param name="root" value="/root/www/vc"/>         <param name="index" value="index.html"/>     <!--         <param name="auth-realm" value="FreeSWITCH"/>         <param name="auth-user" value="freeswitch"/>         <param name="auth-pass" value="rocks"/>     -->     </vhost> </vhosts> 

然后,mod_verto 就成了一個http服務器了。

啟動FreeSWITCH, load mod_av

用Chrome瀏覽器訪問: https://121.41.105.36:8082/

每一次訪問,需要輸入你的姓名和電子郵件。

呼叫3500,就可以進入視頻會議了。

杜老師視頻會議竟然不穿衣服!網警管不管?

還有人在視頻會議里放起了視頻(虛擬攝像頭):

我們自己的視頻會議做好了,可以共享屏幕了,以后,再也不用QQ那么難用的屏幕共享功能了。 下圖,杜老師正在共享FreeSWITCH控制台。

htop 看下機器性能

有同學問,上面的會議用的什么編碼?答:VP8,因為Chrome默認支持VP8。

那Chrome支持H264嗎?有一個選項可以試試啟動Chrome時在命令行里加上:

--enable-features=WebRTC-H264WithOpenH264FFmpeg 

好吧,上述會議普通SIP客戶端也是可以呼進來的。

這也算直播?

不算,上面是視頻會議。視頻會議的流是雙向的。而直播流是單向的。即,大部分人只是“看”。

其實,直播最關鍵的不是技術問題,而是,帶寬和CDN。

當前最流行的直播協議是Adobe的RTMP和Apple提出的HLS。RTMP是Flash時代提出的,HLS的全稱是Http Live Stream,是基於HTTP的。這兩種協議都適合CDN(Content Delivery Network)。CDN的作用是,如果有大量用戶同時看直播,同一地區的用戶會就近的訪問離自己最近的CDN網絡中的服務器,而CDN網絡負責內容的分發和緩存。

好了,CDN已超出我們討論的范圍了。再回到FreeSWITCH。

FreeSWITCH本身也可以通過mod_rtmp提供一路視頻流,但是HLS就不行了。現在直播通用的解決方案是使用FMS、Wowza、Nginx(with rtmp模塊)或crtmpserver。其它的配置都比較復雜,筆者發現crtmpserver還是比較省心的。裝一個:

apt-get install crtmpserver 

啟動

/etc/init.d/crtmpserver start 

服務啟動后,可以給它從FreeSWITCH里推一路RTMP流試一下了:

conference 3500-121.41.105.36 record rtmp://121.41.105.36/live/stream1 

是的,FreeSWITCH通過mod_av,使用錄像(record)的功能將視頻發送(推)到遠程的rtmp服務器上。當然,這里的遠程rtmp服務器就是crtmpserver提供的。

這個流也是可以“拉”的,即可以直接看。用VLC視頻播放軟件打開上述地址,理論上就能播放。但理論歸理論,筆者的VLC日志中顯示如下錯誤:

Server error: call to function _checkbw failed 

錯誤的原因可能是crtmpserver不支持_checkbw函數造成的,也可能是筆者的VLC 2.0版好久沒升級的緣故。總之,我們放棄了研究這一問題。

RTMP流播放器有很多,比如,我們用Google隨便就找到一個:

https://www.hlsplayer.net/rtmp-player 

打開上述地址后,輸入我們的視頻流的路徑:rtmp://121.41.105.36/live/stream1 就可以觀看了。

好玩吧?好吧,今天,就玩到這里了。小伙伴們都退出會議了,就我一個人還在玩。

總結一下,FreeSWITCH可以做直播嗎?大概就是這個樣子的。

上述IP地址已經打不開了。因為筆者買的是按量付費的,用完釋放了。

盤點一下,大致花了這么多錢:

供參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM