修改该文件:
listen 1935;max_connections 200;srs_log_tank file;srs_log_file ./objs/srs.log;http_api { enabled on; listen 1985;}http_server { enabled on; listen 8080; dir ./objs/nginx/html;}stats { network 0; disk sda sdb xvda xvdb;}vhost __defaultVhost__ { # http-flv设置 http_remux{ enabled on; mount [vhost]/[app]/[stream].flv; hstrs on; } # hls设置 hls{ enabled on; hls_path ./objs/nginx/html; hls_fragment 10; hls_window 60; }}
然后执行:
sudo /etc/init.d/srs reload
让配置即时生效,VLC Player里下列3个地址,应该都可以播放了:
协议 | 地址 |
rtmp | rtmp://srs_server_ip:1935/live/livestream |
http flv | http://srs_server_ip:8080/live/livestream.flv |
hls | http://srs_server_ip:8080/live/livestream.m3u8 |
要注意的是:hls是把实时的视频流,分成1个个小的切片,保存在/usr/local/srs/objs/nginx/html/live/ 目录下,参考下图:
不太严谨的话,可以理解为播放的是服务器上已经生成好的视频片段,因此就算在obs把实时视频直播源切断,还是可以播放一段时间的。(实时生成视频切片需要时间,而且每个切片本身是N秒一切割,所以不难理解为啥hls协议延时最大)
h5播放hls:
借助项目,可以很容易实现.m3u8的hls播放:
video-js HLS demo
但播放时,如果h5页面与.m3u8的视频源不在同一个域名,浏览器会遇到跨域问题。
网上有一种解决办法,是修改srs的源码,增加Access-Control-Alow-Orogin:*,但个人不推荐这种做法,一来把安全性降低了,容易造成盗播等安全问题。二是如果官网以后fix bug了,自己又得改一次。
更好的办法,是在srs前面放一个nginx,做转发来解决跨域问题。通常h5页面,是通过nginx来访问的,可以在nginx里,把特定视频源路径,转发到后端srs服务器上,参考以下配置:
location /srs/ { proxy_pass http://10.2.*.*:8080/; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; }
这样,请求http://localhost:81/srs/live/livestream.m3u8的请求,都会转发到http://10.2.X.X:8080/live/livestream.m3u8上,跨域问题解决后,就可以正常播放了,参考下图的效果:
tips: obs+srs支持多路视频源同时直播,上图中阿凡达+本机摄像头,二路视频同时推流/拉流,毫无影响。
h5播放http-flv
首先要感谢 ,可以不依赖于flash player,纯js+html实现flv的播放。flv.js demo
当然,如果播放端环境可控(比如pc端,且能确定安装并允许支行flash player)直接用flash player播放flv效果更好。