你們都知道,現在,視頻直播比較火啊。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地址已經打不開了。由於筆者買的是按量付費的,用完釋放了。
盤點一下,大體花了這麼多錢:
供參考: