修改該文件:
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:
借助video-js項目,可以很容易實現.m3u8的hls播放:
<head>
<title>video-js HLS demo</title>
<link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
</head>
<body>
<video id='my-video' class='video-js' controls preload='auto' width='640' height='320' poster='avatar-poster.jpg'
data-setup='{ "html5" : { "nativeTextTracks" : true } }'>
<source src='http://10.2.*.*:8080/live/livestream.m3u8' type="application/x-mpegURL">
<p class='vjs-no-js'>
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a href='https://videojs.com/html5-video-support/' target='_blank'>supports HTML5 video</a>
</p>
</video>
<script src='https://vjs.zencdn.net/7.4.1/video.js'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"></script>
<script>
var player = videojs('my-video');
player.play();
</script>
</body>
但播放時,如果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
首先要感謝 B站開源的flvjs,可以不依賴於flash player,純js+html實現flv的播放。<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>flv.js demo</title>
<style>
.mainContainer {
display: block;
width: 640px;
}
.urlInput {
display: block;
width: 100%;
margin-top: 8px;
margin-bottom: 8px;
}
.centeredVideo {
display: block;
width: 100%;
height: 320px;
}
.controls {
display: block;
width: 100%;
text-align: left;
}
</style>
</head>
<body>
<div class="mainContainer">
<video id="videoElement" class="centeredVideo" controls autoplay width="640" height="320">Your browser is too
old which doesn't support HTML5 video.</video>
</div>
<br>
<div class="controls">
<button onclick="flv_start()">開始</button>
<button onclick="flv_pause()">暫停</button>
<button onclick="flv_destroy()">停止</button>
<input style="width:100px" type="text" name="seekpoint" />
<button onclick="flv_seekto()">跳轉</button>
</div>
<script src="./flv.min.js"></script>
<script>
var player = document.getElementById('videoElement');
if (flvjs.isSupported()) {
var flvPlayer = flvjs.createPlayer({
type: 'flv',
isLive: true,
enableWorker:true,
enableStashBuffer:false,
stashInitialSize:128,
url: 'http://localhost:81/srs/live/livestream.flv',
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flv_start();
}
function flv_start() {
player.play();
}
function flv_pause() {
player.pause();
}
function flv_destroy() {
player.pause();
player.unload();
player.detachMediaElement();
player.destroy();
player = null;
}
function flv_seekto() {
player.currentTime = parseFloat(document.getElementsByName('seekpoint')[0].value);
}
</script>
</body>
</html>
當然,如果播放端環境可控(比如pc端,且能確定安裝並允許支行flash player)直接用flash player播放flv效果更好。
