知识准备
HLS是Apple推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会通过HTTP请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差,不过优势是H5、IOS、Android都原生支持。
在nginx.conf中配置
推送的数据会保存在F:/hls,设置分片和时间段
rtmp {
server {
listen 1935;#监听端口,若被占用,可以更改
chunk_size 4000;#上传flv文件块儿的大小
application hls{
live on;
hls on;
hls_path "F:/hls/";#视频流文件目录
hls_fragment 1s;#没有生效
hls_playlist_length 30s;
hls_nested on; #默认是off。打开后的作用是每条流自己有一个文件夹
hls_cleanup off;#不清理ts
}
}
}
在http中的server添加m3u8数据类型的点播配置
http {
server {
listen 80;
server_name localhost;
location /hls { #这里也是需要添加的字段。
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias "F:/hls/"; #视频流文件目录,跟上面的hls_path保持一致
expires -1;
add_header Cache-Control no-cache;
}
推流指令
ffmpeg.exe -re -stream_loop -1 -i inputfile.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.11.172:1935/hls/home
-stream_loop -1:循环读取文件推流
由于我们配置了rtmp中的应用hls,支持hls协议,所以会在F:/hls/文件夹下创建一个test文件夹,里面保存了
推流生成的文件,进入到文件夹,可以看到0.ts和index.m3u8等文件,index.m3u8文件记录了文件的信息以及文件切割之后的列表
取流指令
ffplay.exe http://192.168.11.172:80/hls/home/index.m3u8
取流的时候,将不再经过rtmp协议进行流的获取,而是通过http服务获取,端口是http的服务端口
从上面可以看出来配置rtmp的hls应用是推流保存文件,配置http中的hls应用是配置拉流
注意:一旦启用hls,将无法通过ffplay.exe rtmp://192.168.11.172:1935/hls/home点播视频流