FreeSWITCH視頻直播

你們都知道,現在,視頻直播比較火啊。html

今天,在FreeSWITCH精英羣裏分享了FreeSWITCH作視頻直播相關的技術。html5

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

FreeSWITCH直接有針對Debian 8的安裝包,不過筆者一般是編譯安裝,今天仍是編譯安裝的。python

安裝FreeSWITCH依賴:git

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

更多sql

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

經常使用的工具bootstrap

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地址已經打不開了。由於筆者買的是按量付費的,用完釋放了。

盤點一下,大體花了這麼多錢:

供參考:

相關文章
相關標籤/搜索