2017-01-31 173 views
0

我正在为Web用户提供一些(html5兼容)视频。我正在使用videojs显示那些设置为“auto”的属性设置为“预加载”的视频。预加载HTML5视频使连接保持打开状态

我知道,浏览器通常只加载一部分视频,这对我来说没问题。问题是,它通过写OutputStream不断被分派视频与后端(春季启动),打开连接:

while ((read = input.read(buffer)) > 0) { 
    output.write(buffer, 0, read); // once video is preloaded, it keeps waiting here 
    output.flush(); 
} 

后1分钟,如果用户不点击播放按钮,它会抛出一个ClientAbortedException: java.net.SocketTimeoutException

预加载完成后,有什么办法可以让浏览器关闭连接吗? (请注意,对于我们的系统,如果不使用,尽快关闭InputStream非常重要)。

回答

1

是的,我同意。这是一个问题。

只有在使用播放列表和片段(如HLS和DASH)时,才能使用下方的自适应。

如果您正在播放静态文件(vod)并将其片段缓存在浏览器的缓存中,则可以使用设置的超时功能重新启动播放器,并重新加载所有设置,将preload属性替换为“none”就绪事件。所以,你可以在几秒钟内控制你想要的缓存。

var stopcache = true; 
// when ready, cache segments by 5 seconds and restart player 
player.on('ready',function(){ 
    setTimeout(function() { 
     if (stopcache) { 
     stopcache = false; // avoid repeat 
     player.preload('none'); // or false if API allows 
     player.autoplay(false); 
     player.src(''); 
     player.src({ 
      type:'application/x-mpegURL', 
      src:'//example.com/hls/stream.m3u8' 
     }); 
     } 
    }, 5000); 
}); 
// avoid player reload if user played the file 
player.on('play',function(){ stopcache = false; }); 

这只是一个sugestion,我没有尝试,但我相信它会成功,因为播放列表和段由浏览器(VOD)缓存。播放实况视频时我使用相同的技术,当用户在暂停后按播放时重新加载网址,迫使播放器从实际实况段开始。

+0

我们不使用播放列表,但您的解决方案给了我一些见解。谢谢。 – Ivan