Nginx 播放实时流时向每个m3u8和ts文件追加参数

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

我在流媒体直播环境中使用videojs,并使用nginx安全URL保护流。详情请参阅此处-

该算法工作正常,播放器能够检测live.m3u8文件何时可用。然而,当我玩小溪时,我只得到一个旋转的轮子。在JS控制台上,我看到子播放列表(例如live_109.m3u8 URL)没有所需的md5哈希和到期时间戳,因此nginx返回403

流URL格式为-

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>