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

今天,在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. CentOS6.7安装部署之Tomcat多实例

    Tomcat单机多实例配置 操作前的准备:关闭防火墙,配置好IP地址,安装好JAVA环境 1.首先创建tomcat所有实例共同的工作目录/data/webapps以及tomcat所有实例的所在目录/d ...

  2. Python时间模块。

    python中时间的表示方式 unix时间戳,字符串时间,格式化时间 时间模块有,time,datetime,calendar #time模块 import time #获取本地时间戳,返回浮点数 p ...

  3. docker学习8-搭建nginx环境

    前言 使用 docker 搭建 nginx 环境 下载镜像 使用docker pull 拉取最新的 nginx 镜像 [root@yoyo ~]# docker pull nginx Using de ...

  4. spring-mvc.xml 和 application-context.xml的配置与深入理解

    在java框架这个话题,前几篇文章是基于搭建ssm项目框架,以及web.xml的配置讲解,本篇主要就ssm框架的其他配置文件进行深入讲解,他们分别是:1.application-context.xml ...

  5. Caused by: java.lang.IllegalStateException: duplicate key: datasource

    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...

  6. Solr的集群搭建(索引库)

    Solr的集群的搭建 Solr集群原理 SolrCloud概念以及结构 概念: SolrCloud(Solr云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用Solr ...

  7. rhel6.2配置在线yum源

    由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源. 本文包括配置本地源及第三方源.第三方源包括:网易,epel, ...

  8. Async/await promise实现

    An async function can contain an await expression that pauses the execution of the async function an ...

  9. 11.06水题Test

    11.06水题比赛 题目 描述 做法 \(BSOJ5150\) 求\(n\)个数两两之差的中位数 二分中位数,双指针判定\(\le x\)差值对数 \(BSOJ5151\) 求树的最大匹配和其个数 来 ...

  10. 【转载】windbg 常用命令详解

    windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...