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地址已经打不开了。由于笔者买的是按量付费的,用完释放了。

盘点一下,大体花了这么多钱:

供参考:

相关文章
相关标签/搜索