随着移动互联网的普及与网络直播的火爆,现在人人都能做网络直播,做网络直播可以采用手机APP做直播,也可以采用PC端的软件来做直播。由于手机APP通常是平台绑定的,因此用手机做直播只能在该APP绑定的平台进行发布,无法搭建自己的网络直播平台。在此笔者仅以如何搭建自己的直播平台的思路来发表意见。
笔者从事网络直播已经5年多了,从2011年开始,笔者就一直从事网络直播平台的维护,期间积累了些许粗浅的经验,在此仅做抛砖引玉。
做网络直播需要三大软件模块,如下:
1)前端编码推流软件
用于音视频信号的采集、编码压缩与传输。是视频直播的源头,没有前端编码器软件,就无法产生内容。目前,前段编码推流模块视频采用H264压缩,音频采用AAC压缩,推流网络协议用RTMP协议。
2)流媒体转发服务器
用于接收前端编码器编码的直播媒体流,并进行网络转发,最终观众的播放器与流媒体服务器进行通信,由流媒体服务器对用户提供直播服务。
3)直播管理平台
用于管理直播频道、用户信息、交互与日志等应用性的功能,用户通过这个模块提供的功能来查询频道、登录,通过浏览器来接收直播。
以上三个模块,在做直播时必不可少,现在简单罗列笔者已经使用过的软件(仅为免费软件,收费软件暂时不做重点,或者忽略)。
一、前端编码推流软件
1)Flash Media Live Encoder 3.2
由著名的Adobe公司出品,值得信赖,Adobe好长时间已经停止更新了,时代比较久远了,但仍旧不失为一个好用的编码器软件。
网址:http://www.adobe.com
2)Open Broadcaster Software
开源并且免费的直播软件,是当前非常流行的直播软件,很多游戏直播就采用它,例如斗鱼直播,国内也有很多人将它改头换面成其它样子。
网址:http://www.obsproject.com
3)AVCast(串流直播)
国内串流直播团队开发的免费直播软件,免费但不开源。
二、流媒体转发服务器
1)Adobe Media Server 4.5
Adobe公司研发的专业直播服务器,不开源,不免费。但借助于互联网,你可以自己找到解决办法,您懂的。笔者曾经一直用这个软件做直播服务器。
2)Red5
开源免费的直播系统,采用Java开发,可以移植到任何平台,但需要安装Java虚拟机。
3) Nginx RTMP Module
由战斗民族俄罗斯人开发的Nginx的附加模块,功能强大,性能优越,但可惜只能在Linux下使用,用起来还是有点不方便。
4) CRtmpServer
开源并免费的直播服务器软件,性能也很优越,需要在Linux下编译。
三、直播管理平台
找了一圈,没有发现开源或者免费的,因此笔者决定自己开发,采用PHP,框架采用Thinkphp,目前已经能够支持多屏直播了。以后会介绍。
流媒体服务器与直播管理平台的选型在笔者的其它文章中有阐述,本文仅阐述前端编码软件的选型与比较,仅代表本人的观点,具体请您自己参考相关软件文档。
选择直播编码器的必要条件是:
1)必须支持H264编码,支持MP3或者AAC编码。
H264:又称AVC(高级视频编码),是当前移动终端首选的编码标准。
MP3:是音频编码标准,大家都熟悉,不多说。
AAC:即高级音频编码,比MP3音质还好,是做直播的首选,它有AAC-LC与HE-AAC连个档次,AAC-LC是地复杂度的AAC,兼容性好,HE-AAC是高效能AAC,压缩度高,音质与AAC-LC相当。
2)支持RTMP推流
RTMP:是实时消息协议的简称,有Adobe公司开发,虽然没有变成国际标准,但它是事实上的工业标准,无论哪个公司,只要做直播,就得用它,当今的手机直播APP推流所用的协议都是RTMP协议。
以下从功能到性能方便逐一介绍以上3款免费的编码推流直播软件:
1) Flash Media Live Encoder 3.2(以后简称FMLE)
2) Open Broadcaster Software(以后简称OBS)
3) AVCast(串流直播)(以后简称串流直播)
从界面上来看,3款软件主界面操作起来都相对比较简单,Flash Media LiveEncoder 3.2
的所有设置界面都放在主见面里了,功能一目了然,容易上手。但Open Broadcaster Software与iAVCast(串流直播)都有自己的独立设置界面。
点击OpenBroadcaster Software的设定按钮将出现它的设置界面如下:
Open Broadcaster Software的设置界面里包含了不少功能。
点击iAVCast(串流直播)的设置按钮出现的界面如下:
iAVCast(串流直播)的设置界面里也隐藏了不少功能。
笔者通过反复使用,仔细比较,得出以下比较成果。
比较项 | FLME | OBS | 串流直播 | 备注 |
编码标准 | ||||
H264编码 | ||||
MP3编码 | ||||
AAC-LC编码 | FLME需要插件可以支持 | |||
HE-AAC编码 | ||||
H265编码 | ||||
MPEG-4 编码 | ||||
MPEG-2 编码 | ||||
文件录制格式 | FLV | MP4、FLV | MP4、FLV、TS | |
码流输出 | ||||
多码流输出 | 3 | 1 | 4 | |
多服务器推送 | 2 | 1 | 2 | |
RTMP协议发布 | ||||
UDP协议发布 | ||||
HTTP协议发布 | ||||
RTMP发布验证 | RTMP推流时支持服务器端验证 | |||
录制文件规则命名 | 根据设置的规则命名文件 | |||
文件元数据注入 | ||||
高性能硬件加速编码 | ||||
NVENC硬件加速 | NVidia的显卡编码 | |||
QSV硬件加速 | Intel的集成显卡编码 | |||
CUDA硬件加速 | NVidia显卡的GPU编码 | |||
图像预处理与优化 | ||||
亮度对比度调节 | ||||
台标叠加 | OBS支持图片叠加 | |||
原始台标擦除 | ||||
字幕叠加 | ||||
滚动字幕功能 | ||||
滚动字幕计划任务 | ||||
美白功能 | 实质为图像亮度增强 | |||
美颜功能 | 实质为图像颜色叠加 | |||
上下左右切边 | ||||
动画图片叠加 | ||||
动画图片格式 |
| Gif | Gif、APNG、ANI | |
多场景切换 | ||||
多个来源叠加 | ||||
网络协议与服务 | ||||
UDP协议服务 | ||||
HTTP协议服务 | ||||
RTSP/RTP | ||||
UDP加密组播 | ||||
其它功能 | ||||
抓取缩略图 | ||||
多配置文件 | ||||
编码状态统计 | ||||
开机自启动 |
以上仅仅是从功能上进行了客观对比,对比的版本均为笔者书写这篇稿子时官方最新版本,后续版本的变化笔者无法预知。
通过长时间的使用,笔者发现未编码时OBS消耗的内存最高,FLME消耗的内存最少,笔者分析,可能是OBS功能最丰富,FLME功能最少的原因。在编码时,发现FLME消耗的内存最多,串流直播的内存最小。
编码一个720P的节目时,OBS与串流直播占的CPU均比较少,FLME占的CPU比较高,可能是FLME的编码器比较老旧的原因吧。
由于OBS不具备多码流编码,通过对比FLME与串流直播同时编码1080P,720P,480P三个码流的情况下,FLME占用的CPU资源明显高于串流直播,由于FLME没有硬件加速编码功能,因此没有进行硬件加速功能编码的对比。
通过一个星期的长期运行,OBS崩溃3册,串流直播与FLME稳定正常。
另外笔者发现,FLME与串流直播更容易上手,而OBS比较专业,OBS里面的某些参数至今笔者还没有完全弄明白,因此笔者觉得OBS更适合于专业用户,不过网络上有很多OBS的教程,要用好OBS也不算难。
在此,笔者做个总结:
1) 做IPTV,选择FLME与串流直播更合适,因为能够长期运行不死机。
2) 做现场直播与游戏直播,选择OBS与串流直播更合适,因为他们功能多。
3) 要往多个平台推送节目,只能选择FLME与串流直播。
4) 作为编码服务器来使用,应该选择FLME与串流直播,因为他们均能关闭预览功能,而且稳定。
5) 如果要用硬件加速编码,请选用OBS与串流直播。
对流媒体服务器的对比笔者将在下一篇文章里给出。本文仅代表个人观点,如有不妥,欢迎指正。
后续将比较Red5、Nginx Rtmp Module与CRtmpServer。由于FMS是收费版本,暂不比较。