今年互联网最热门的就是直播。本文教大家如何利用现成的工具搭建一个简单流媒体直播点播服务系统,帮助大家了解一些流媒体系统的基本概念。
一、基本原理图
1.1 编码器
编码器将需要被直播的内容送到流媒体服务器,内容主要有音频、视频、图片等媒体元素。编码器选用我们的个人电脑 编码软件实现,负责将基带信号或内容流进行采集、编码和推送到流媒体服务器。
编码器软件有几种选择:FFmpeg、Wowza GoCoder和OBS。
FFmpeg擅长将本地音视频文件和网络上的实时流进行编码和传输;
Wowza GoCoder作为我们下面选择的流媒体服务器产品的配套App,负责通过iPhone摄像头采集实时场景画面进行直播。
1.2 流媒体服务器
一般流媒体主要会提供两种协议的流的内容:Adobe公司的RTMP(Real Time Messaging Protocol)实时消息传送协议,和Apple公司的HLS(HTTP Live Streaming)基于HTTP的流媒体网络传输协议。
1.3 播放终端
有iPhone、iPad、Mac的用户,使用safari浏览器可直接播放HLS协议的流媒体内容。
VLC播放器则在所有移动设备和电脑上都有相应的版本,可用来播放RTMP和HLS协议的流媒体内容,推荐使用。
其他主要访问流媒体内容的方式主要是通过拥有丰富前端功能的App或者是直播网站来播放。本文不再赘述。
二、工具的准备
2.1 FFmpeg
2.2 Wowza GoCoder
2.3 OBS
2.4 Wowza StreamingEngine
如果是项目中需要用到流媒体服务,则需要购买正式的License,并购买阿里云虚拟机进行部署。
Wowza StreamingEngine的安装:阿里云上使用的操作系统是Centos6.5 64位。
下载的Wowza版本为Linux 64-bit版。将下载后的软件包上传到服务器,并赋予其可执行权限:sudo chmod x WowzaStreamingEngine-4.5.0-linux-x64-installer.run
执行这个文件:sudo ./WowzaStreamingEngine-4.5.0-linux-x64-installer.run
根据系统提示,一步步向下安装,在安装过程中,会提示输入管理员用户名密码和License,这时填入之前申请到的测试License即可。
安装成功后,需要启动两个服务:
service WowzaStreamingEngine start
service WowzaStreamingEngineManager start
前者启动引擎本身,后者启动引擎的管理服务。
引擎及其管理服务启动后,即可通过管理页面对其进行可视化操作。
2.5 VLC
三、实验
3.1 实验一 使用FFmpeg编码推送一个电影直播流
在编码器上运行FFmpeg命令
./ffmpeg -i movie.mp4 -vcodec h264 -vb 1000k -s 800×600 -acodec aac -ab 64k -strict -2 -f flv rtmp://[user:password]@[ip]/live/[streamname]
其中,-i参数表示输入一个视频文件给FFmpeg,后面跟视频文件的具体路径。
-vcodec和-acodec表示采用的视频和音频编码算法,这里选用h.264和aac编码能够适配网络播放。
-vb和-ab分别视频和音频的码率,决定了视频的清晰度和对带宽的占用。
-s表示输出的视频的分辨率。
-f代表输出的格式,这里使用flv是以流的形式输出。
FFmpeg开始执行编码的窗口输出:
打开VLC播放器,输入rtmp://[ip]/live/[streamname],即可同步观看流媒体服务器上的电影视频流。
3.2 实验二 使用Wowza GoCoder做现场直播
选择 Wowza Streaming Engine
设置Host、Application和Source Authentication分别如下,
最终选择一个码率,点按红色按钮开始摄录、编码和推流
在VLC上观看效果
3.3 实验三 使用OBS对直播内容进行整合包装
打开OBS,在设置界面中,对其进行简单设置
在主界面中,为场景添加不同的媒体源,对视频音频进行叠加包装,并开始编码推流。这里我们在画面上叠加了电影、图片、窗口以及将一路广播直播流叠加到音频流中去,最终混合输出。
在Safari浏览器中,通过HLS协议观看流的内容
3.4 实验四 对内容进行点播
将需要被点播的音视频文件进行转码(FFmpeg h264 aac)。将转码后的文件上传到WowzaStreamingEngine的点播目录 /usr/local/WowzaStreamingEngine/content/ 。
如我们在目录中存放了一个动感101频率2016年10月16日22点档的节目音频,即可通过以下链接进行点播播放:
hls协议:
http://wowza.a-radio.cn:1935/vod/1017_2016_10_16_22.mp4/playlist.m3u8
rtmp协议:
rtmp://wowza.a-radio.cn/vod/1017_2016_10_16_22.mp4
一般在生产环境中,点播系统会有一个数据库存储音视频文件的元数据,前端的App通过WebService接口获取点播数据,再调取流媒体服务器集群中的文件进行流化播出。
最后,希望大家在实现实验功能的基础上,能深入摸索,做一些有趣的配置和实践。:)