nginx + rtmp 直播推流

日志 / 2440人浏览 / 0人评论
最近对直播有兴趣,研究了一下直播推流的方法
首先需要了解几个协议
  • RTMP
  • HLS

首先要有一个带有nginx-rtmp-moudle模块的nginx

确定nginx带有nginx-rtmp-moudle模块后,鉴于nginx-rtmp-moudle模块支持hls, 可以直接在nginx配置文件修改

修改nginx配置文件:


$ vim /www/server/nginx/conf/nginx.conf

需要加入rtmp相关代码以及一个直播流的存储设置的代码



rtmp {  
  
    server {  
  
        listen 1935;  #监听的端口
  
        chunk_size 4000;  
        
        application hls {
            live on;
            hls on;
            hls_path /www/wwwroot/default/hls;#视频流存放地址
            hls_fragment 5s;
            hls_playlist_length 15s;
            hls_continuous on; #连续模式。
            hls_cleanup on;    #对多余的切片进行删除。
            hls_nested on;     #嵌套模式。
        }
    } 

}

server{
        listen      80;
        location /hls {  #添加视频流存放地址。
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
                #访问权限开启,否则访问这个地址会报403
                autoindex on;
                alias /www/wwwroot/default/hls;#视频流存放地址,与上面的hls_path相对应
                expires -1;
                add_header Cache-Control no-cache;
                #防止跨域问题
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';  

        }

}

其中rtmp 代码段与http同级, server代码段在http里


重启nginx

$ nginx -s reload


防火墙要开放1935端口



直播推流配置:

下载一个obs软件.(https://obsproject.com/)

配置如下

配置好之后,点击 '开始推流',
可以看到在 /www/wwwroot/default/hls/abcd/ 文件夹里生成 index.m3u8 这个文件.

观看直播:

- 采用小程序的方式观看

由于web端解析 m3u8格式的视频比较麻烦,此次使用的是微信小程序的直播组件


<video id="myVideo" src="http://192.168.37.128:80/hls/abcd/index.m3u8"

enable-danmu danmu-btn="{{false}}" controls>video>


成功拉取到直播流, 效果还不错,延时大概15秒.

- 采用web网页falsh的方式观看(是rtmp的方式)

首先要修改nginx配置,增加一个live应用, 不再转化为hls

rtmp {

server {
.......

application live {
live on;
record off;
}

}

重启nginx,配置OBS ,配置后直接开始推流


网页代码如下:


使用video.js实现rtmp流的直播播放
    
    



























访问网址: http://192.168.2.139/v.html ,无法播放视频,原因是flash被谷歌浏览器屏蔽了,需要勾选允许,刷新后可正常播放 (注意falsh版本可能不兼容浏览器,需要重新下载adobe flash player)





- 对比了一下,hls播放和rtmp播放的延迟存在较大的差别,rtmp播放延迟在3到4秒, hls播放延迟在10秒以上甚至可能30秒。不过rtmp播放在pc端需要依赖flash,falsh现在不太被浏览器支持,所以播放起来对用户操作不友好, 经测试发现手机上的UC浏览器不支持,无法播放




感谢博主,喝杯咖啡~

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我