首页 >> 大全

【入门】无插件web直播解决方案,ffmpeg+nginx-http-flv

2023-07-28 大全 28 作者:考证青年

作者大da一笔带过的事,可花费我了很长时间尝试。

总结:

wget http://nginx.org/download/nginx-1.1.17.tar.gzgit clone git://github.com/winshining/nginx-http-flv-module.git

2.修改nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf #打开配置文件

...http {include       mime.types;default_type  application/octet-stream;keepalive_timeout  65;server {listen       80; #http-flv的拉流端口...# http-flv的相关配置location /live {flv_live on; #打开HTTP播放FLV直播流功能chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头}...}
}rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;rtmp {out_queue           4096;out_cork            8;max_streams         128;timeout             15s;drop_idle_publisher 15s;log_interval 5s; #log模块在access.log中记录日志的间隔时间,对调试非常有用log_size     1m; #log模块用来记录日志的缓冲区大小server {listen 1935;server_name www.test.*; #用于虚拟主机名后缀通配#ffmpeg推流的application application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}...}...
}

推流设置

ffmpeg -f dshow -i video="Integrated Webcam" -g 25 -vcodec libx264  -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/myapp/mystream

-g 25:每隔25帧,插入一个关键帧,可提高缓冲速度。而且延迟不会明显增加。

flv.js的配置

var flvPlayer = flvjs.createPlayer({type: 'flv',enableWorker: true,     //浏览器端开启flv.js的worker,多进程运行flv.jsisLive: true,           //直播模式hasAudio: false,        //关闭音频             hasVideo: true,stashInitialSize: 128,  enableStashBuffer: false, //播放flv时,设置是否启用播放缓存,只在直播起作用。url: ''});

效果图:

================================================================================================

++flv.js播放器累计时延的尝试消除

问题:使用中发现,如果最小化播放器的页面,或者进行浏览器页面切换,会增加播放器时延。正如以下资料中描述的“切换前后台带来的累积延时”。转自:

优化切换前后台带来的累积延时

在直播场景中,有一种情况是切换前后台造成累积延时。这里举个例子:在前台时,直播视频在播放,然后退到后台,此时暂停播放器,音视频数据继续缓存,当回到前台时,继续从刚才退出时的视频流数据开始播放,而实际的直播现在已经不在这个时间点了。这段前后台切换的时间里,就积累了一段延时。

对于这种延时改怎么处理呢?

一种解决方法:我最终在flv.js 的相关issue中找到了一种解决方法。代码如下:

setInterval(function () {console.log("时延校正判断");if (!_video.buffered.length) {return;}var end = _video.buffered.end(0);var diff = end - _video.currentTime;console.log(diff);if (diff >= 4) {console.log("进行时延校正");_video.currentTime = end;//alert("时延过长,请点击时延校准");}}, 3000)

这种方法对video..end(0)和video.进行差值判断。若差值大于一定值,自动进行校准。

其原理是:获取了视频的缓冲范围,如果缓存超过一定长度,就跳跃播放。

也可不进行校准,直接停止播放,提醒用户刷新界面(一些直播网站也是这么做的,用户离开时间过长将拒绝播放)。

相关资料:直播中累积延时的优化,低延时直播应用,flv.

感谢网友的资料,感谢群友的思路,感谢各位开源大佬。

================================================================================================

++保存直播视频到服务器

user root; #给Nginx足够的文件访问权限rtmp {out_queue           1024;out_cork            8;max_streams         128;timeout             15s;drop_idle_publisher 15s;log_interval 5s; #log模块在access.log中记录日志的间隔时间,对调试非常有用log_size     1m; #log模块用来记录日志的缓冲区大小server {listen 1935;server_name www.test.*; #用于虚拟主机名后缀通配application myapp {live on;record video;                         #记录直播视频record_path /tmp/rec;                 #视频保存路径record_suffix -%d-%b-%y-%T.flv;       #视频保存名:日期+.flv....

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了