大家都知道,如今,视频直播比较火啊。

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

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

供参考:

FreeSWITCH视频直播的更多相关文章

  1. 【腾讯bugly干货分享】HTML 5 视频直播一站式扫盲

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直 ...

  2. 【腾讯Bugly干货分享】H5 视频直播那些事

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...

  3. 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  4. iOS----集成ijkplayer视频直播

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  5. 使用Quicktime 实现视频直播(Live video using Quicktime) (转)

    Quicktime是一个跨浏览器的播放插件,可以实现RTSP视频直播,可用于电视直播或视频监控平台.本文主要讲了关于播放器如何实现直播.事件响应.播放器全屏.动态修改播放路径等问题. 需要准备的软件: ...

  6. 超强教程:如何搭建一个 iOS 系统的视频直播 App?

    现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优 ...

  7. iOS集成ijkplayer视频直播框架,遇到的bug和坑...

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #555555 } p. ...

  8. 集成IJKplayer视频直播框架

    ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...

  9. 视频直播APP开发分析

    视频直播APP开发到目前为止都还是热门的一个行业,而且发展到现在直播的种类非常多,很多行业都打入了直播行业,再也不是单纯的人物直播这么单一了.视频直播APP开发行业就像是吃螃蟹,来的早的人不懂如何吃, ...

随机推荐

  1. Python xlrd模块读取Excel表中的数据

    1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...

  2. python正则表达式(4)--search方法

    1.re.search函数 re.search 扫描整个字符串并返回第一个成功的匹配,如果匹配失败search()就返回None. (1)函数语法: re.search(pattern, string ...

  3. ImportError: No module named wx

    先检查下Python中是否有此模块 $ python >>> import wx ImportError: No module named wx  wx模块的确没有安装. 要安装wx ...

  4. Python库的使用之-Sys模块

    Python标准库之sys模块使用详解,讲解了使用sys模块获得脚本的参数.处理模块. 使用sys模块操作 模块搜索路径.使用sys模块查找内建模块.使用sys模块查找已导入的模块,重定向输出以及重定 ...

  5. 怎么避免写bug?

    1:关注可能的业务逻辑异常:业务逻辑异常 可以通过各种输入输出 和 预期进行比较 即可很快发现. 2:关注可能的运行逻辑异常: 如 copy对象: 对象引用等 这类异常只看代码逻辑时很难发现的:代码写 ...

  6. Synchronized性质

    Synchronized可重入性质 * 什么是可重入:指的是同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁,而不是释放当前的锁去重新获取一个锁,这是它的一个优点 * 好处:避免死锁,提升封 ...

  7. jdk是什么

    jdk是对java基础环境和相应开发平台标准和工具包的封装(zip) 开发平台 j2se j2ee j2me; 基础环境: 虚拟机.运行环境 JDK是整个JAVA的核心,包括了Java运行环境JRE( ...

  8. js原型结构图

    要素:对象原型.函数原型: [p]  原型对象: p    模版对象: 要构造的对象的信息: 构造函数具有原型对象和模版对象: 普通对象只具有模版对象: https://zhuanlan.zhihu. ...

  9. 传统ELK分布式日志收集的缺点?

    传统ELK图示: 单纯使用ElK实现分布式日志收集缺点? 1.logstash太多了,扩展不好. 如上图这种形式就是一个 tomcat 对应一个 logstash,新增一个节点就得同样的拥有 logs ...

  10. npkill 一个方便的npm 包清理工具

    npm 包很好用,但是占用空间太多了,npkill 提供了一个方便的工具,可以帮助我们查找安装的npm 包,以及进行清理 安装 npm install -g npkill 简单使用 命令 npkill ...