点播或直播系统搭建

前言
由于机缘巧合需要搭建一个点播或直播系统进行HLS流下载测试,说干就干,网上查了一圈,有个大概的框架,就是通过NGINX、RTMP以及FFmpeg这个三个东西实现。
搭建环境
机器的系统为ubuntu18.0。如果只需要HLS点播的话,RTMP是非必须的。
安装NGINX
安装命令如下
|
|
安装完成后,nginx不会默认启动的,需要手动启动一下,命令如下:
|
|
启动后可以通过浏览器访问80或者8080端口来确定nginx是否正常安装。
实现HLS点播
要实现HLS点播则需要将MP4或者其他格式的视频通过ffmpeg切片成若干ts文件和一个m3u8播放列表文件
|
|
mp4->m3u8切片
|
|
注: FFmpeg转化HLS时附带的指令: -hls_time n : 设置每片的长度,默认值为2,单位秒 -hls_list_size n : 设置播放列表保存的最多条目,设置为0会保存所有分片信息,默认值为5 -hls_wrap n: 设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0 -hls_start_number n : 设置播放列表中sequence number的值,默认值为0 -hls_key_info_file file: 设置加密所用到的加密信息文件路径
加密 基本的切片不安全,为了防盗链那就需要使用AES-128对每一个分片进行加密,最后生成带有加密信息的播放列表m3u8文件
- 生成密钥
|
|
- 生成初始向量
|
|
- 创建keyinfo文件 格式如下:
key URI # 密钥文件的网络访问路径 Key file # 密钥文件的本地路径,最好使用绝对路径,不然会发生错误 IV # 初始向量的值
举个例子:
http://ip:port/demofour/hls.key /home/xxxx/Documents/hls.key 7504092c985e9afc919bde11b0878273
- 使用密钥信息文件加密切片
|
|
把切片后的ts文件和播放列表文件一起放入NGINX的解析目录下(/var/www/html/)
最后使用PotPlay或者VLC play试试能不能播放,视频播放链接如下:
http://ip:80/demo/demo.m3u8
实现HLS直播
NGINX配合FFmpeg做流媒体服务器的原理是: NGINX通过RTMP模块提供RTMP服务, FFmpeg推送一个RTMP流到NGINX,然后客户端通过访问NGINX来收看实时视频流. HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是FFmpeg推送流仍然是RTMP的,具体可以参考链接1。
1.安装NGINX的RTMP插件
|
|
2.修改nginx.conf
|
|
3.重启NGINX使以上配置生效
|
|
4.推流 可以将本地的视频或者摄像头的视频流推送到RTMP中,也可以在其他的机器上将视频流推送到RTMP中。推送的地址为rtmp://ip:1935/hls/stream
ip可以根据RTMP服务所在的IP设定,端口不指定的话默认就是1935,stream可以是自定义的视频流名字。
尝试使用FFmpeg推送MP4视频流到RTMP服务中
|
|
5.播放测试 使用PotPlay播出测试,确认此时的直播视频流能够正常的观看,播放的地址为 http://ip:8080/hls/stream.m3u8
如果不特别指定端口的话即为8080