Nginx+nginx-rtmp-module的HLS流媒体服务器部署

耗尽温柔 提交于 2020-08-05 07:58:18

知识准备
              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 -i test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.58.173:1935/hls/test
由于我们配置了rtmp中的应用hls,支持hls协议,所以会在F:/hls/文件夹下创建一个test文件夹,里面保存了
推流生成的文件,进入到文件夹,可以看到0.ts和index.m3u8等文件,index.m3u8文件记录了文件的信息以及
文件切割之后的列表



取流指令
ffplay.exe http://192.168.58.173:80/hls/test3/index.m3u8
取流的时候,将不再经过rtmp协议进行流的获取,而是通过http服务获取,端口是http的服务端口
从上面可以看出来配置rtmp的hls应用是推流保存文件,配置http中的hls应用是配置拉流




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!