Nginx 播放实时流时向每个m3u8和ts文件追加参数
我在流媒体直播环境中使用videojs,并使用nginx安全URL保护流。详情请参阅此处- 该算法工作正常,播放器能够检测live.m3u8文件何时可用。然而,当我玩小溪时,我只得到一个旋转的轮子。在JS控制台上,我看到子播放列表(例如live_109.m3u8 URL)没有所需的md5哈希和到期时间戳,因此nginx返回403 流URL格式为-Nginx 播放实时流时向每个m3u8和ts文件追加参数,nginx,video.js,live-streaming,Nginx,Video.js,Live Streaming,我在流媒体直播环境中使用videojs,并使用nginx安全URL保护流。详情请参阅此处- 该算法工作正常,播放器能够检测live.m3u8文件何时可用。然而,当我玩小溪时,我只得到一个旋转的轮子。在JS控制台上,我看到子播放列表(例如live_109.m3u8 URL)没有所需的md5哈希和到期时间戳,因此nginx返回403 流URL格式为- https://example.com/video/live.m3u8?md5=xznbbmbbbbbxncb&expire=12345678
https://example.com/video/live.m3u8?md5=xznbbmbbbbbxncb&expire=123456788
当我播放流时,控制台提示播放机正在尝试调用
https://example.com/video/live_109.m3u8
由于没有md5和expiry参数,nginx将发送403,我明白了
添加?md5=xznbbbxncb&expire=123456788同样适用于live_109.m3u8
我确信单独的segments.ts文件也会出现同样的问题
我的问题是,如何将?md5=xznbmbbbxncb&expire=123456788附加到从页面调用的每个.m3u8和.ts文件中。我自己找到了答案。下面的代码片段显示了如何借助videojs进行此操作-
<script src="https://unpkg.com/@videojs/http-streaming@1.11.2/dist/videojs-http-streaming.js"></script>
<video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268"
data-setup='{}'>
</video>
<script>
videojs.Hls.xhr.beforeRequest = function(options){
options.uri = options.uri+'/liveout/?md5=_PwgAm2z_kO8FgmWRWXvhQ&expires=1574698730';
//.replace('cloudfront.net', 'foo.com');
console.log(options);
return options;
};
var player=videojs('my_video_1');
player.ready(function() {
this.src({
src: 'https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8',
type: 'application/x-mpegURL'
});
});
</script>