如何使用 video.js

问题描述

我正在使用 video.js 播放 m3u8 链接。 我发现它会在播放过程中不断下载 .ts 段。

我想为准备期创建一个加载覆盖,当一切完成后,它就会消失,用户可以像本地一样观看视频。

那么,是否可以在播放前在加载期间预加载所有片段?

更新

我发现 m3u8 文件包含 .ts 链接,是否可以预下载这些 blob 并拦截 fetch 请求以返回下载的 blob 作为响应?

#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:60
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-START-TIME:3516
#EXT-X-PROGRAM-DATE-TIME:2021-02-19T14:55:59+08:00
#EXTINF:2.01,2758527764_1103365203_1.ts?start=0&end=91931&type=mpegts&resolution=320x240
#EXT-X-PROGRAM-DATE-TIME:2021-02-19T14:56:01+08:00
#EXTINF:1.979,2758527764_1103365203_1.ts?start=91932&end=171643&type=mpegts&resolution=320x240
#EXT-X-PROGRAM-DATE-TIME:2021-02-19T14:56:02+08:00
#EXTINF:1.932,2758527764_1103365203_1.ts?start=171644&end=248159&type=mpegts&resolution=320x240
#EXT-X-PROGRAM-DATE-TIME:2021-02-19T14:56:04+08:00
#EXTINF:2.002,2758527764_1103365203_1.ts?start=248160&end=318659&type=mpegts&resolution=320x240
#EXT-X-PROGRAM-DATE-TIME:2021-02-19T14:56:06+08:00
#EXTINF:2.064,2758527764_1103365203_1.ts?start=318660&end=393295&type=mpegts&resolution=320x240

解决方法

我认为您不会使用自适应流式传输,因此您不应使用 HLS 或 DASH。

也许您可以使用示例 mp4 播放来获得这种体验。

,

您可以将“videojs.Vhs.GOAL_BUFFER_LENGTH”值设置为较高的数字。这是将被预加载的秒数。但是,当缓冲太多时会出现播放问题。原因是所有这些缓冲段最终都会吃掉 ram。在中端移动设备上,超过几分钟的预加载会使视频无法使用。

我与几千名学生一起使用它,他们可以预加载更大的块(10 分钟),因此在低带宽连接时他们不会连续中断。