Video 標簽播放 m3u8 格式視頻

在不借助流媒體播放器的前提下,直接播放 m3u8 格式的視頻文件

更多精彩

寫在前面的話

為什么要播放 m3u8 格式的視頻

  1. 對于一個小視頻來說,理論上直接播放 mp4 的本地文件即可
  2. 但如果將網站部署到云上,其他用戶通過網址訪問時,想要看到這個視頻,就需要先完整的下載格式為 mp4 的視頻文件
  3. 當視頻文件下載完成后,網站才可以播放該視頻,這就對于用戶體驗是極大的下降

正規(guī)項目一般如何處理

  1. 對于一個大型項目來說,一般會視頻會使用流媒體播放器來播放視頻
  2. 例如阿里云的流媒體播放器,則是將所有視頻存儲到阿里云的流媒體服務器
  3. 網頁端通過阿里云為每個視頻提供的 VID 來訪問視頻
  4. 這首先需要在網頁端繼承一個流媒體播放器,同時還需要后端對接阿里云服務端,來獲取視頻的鑒權地址
  5. 帶來的好處是可以保證視頻資源相對安全,降低被人直接盜取的可能性
  6. 缺點則是對接起來過于繁瑣,在小項目上顯得得不償失
  7. 具體對接步驟可參考 Java + jQuery 實現阿里云點播

小項目可以如何快速操作

  1. 可以使用 FFmpeg 將普通的 mp4 格式的視頻文件轉換為 m3u8 格式
  2. 再使用 Video.js: 播放轉碼后的視頻

參考網址

  1. 前端video標簽播放m3u8格式視頻 - CSDN
  2. 網站播放視頻較慢,利用mp4轉m3u8解決 - 簡書

實現步驟

下載視頻轉碼工具 FFmpeg

  1. 前往 FFmpeg Download 下載對應版本的工具
    • 該工具不需要安裝,是通過命令行運行的
  2. 需要注意的一點:如果是 Mac 用戶,可能會嘗試使用 Homebrew 安裝,這里需要說的是 “可以,但是沒必要”
    • 因為如果通過 Homebrew 安裝,會自動安裝一堆依賴文件,而且最后工具可能還安裝失敗
    • 關鍵是該工具的使用不需要做任何系統(tǒng)配置,直接前往執(zhí)行文件目錄執(zhí)行對應命令即可
    • 所以完全沒必要通過 Homebrew 安裝到系統(tǒng)中

使用 FFmpeg 對視頻進行轉碼

  1. 下載成功并解壓后的目錄入下圖
    • ffmpeg 就是執(zhí)行命令


      image
  2. 打開終端,進入到上圖文件中的目錄


    image
  3. 為了操作簡單,將待轉碼的視頻直接復制到該目錄下
    • 可以看到下圖中多了一個 video.mp4 文件
      image
  4. 在終端執(zhí)行如下命令
./ffmpeg -i ./video.mp4 -c:v libx264 -hls_time 60 -hls_list_size 0 -c:a aac -strict -2 -f hls ./video.m3u8
  1. 執(zhí)行完成之后會在當前目錄多出 video.m3u8video0.ts 文件,如下圖
    image
  2. 這個時候視頻轉換就完成了
    • 需要注意的是上述生成的兩個文件需要保存在一起

將轉碼后的視頻文件放置到服務器中

  1. 需要注意的是,m3u8 格式的文件無法像 mp4 一樣通過 相對/絕對 路徑進行訪問
  2. 必須將其放置在某個服務器中,然后通過鏈接進行訪問
  3. 而且需要再次強調的是,video.m3u8video0.ts 兩個文件必須放置在同一個目錄中
  4. 具體是放置在 Nginx ,還是 Tomcat 這個隨意,畢竟我們的靜態(tài)網站要部署,實際上也需要依托服務器
  5. 可以將視頻文件放置于網站相同的服務器中,只需要指定 網址 + 目錄 即可

下載視頻播放器 Video.js

  1. 前往 Getting Started with Video.js 可獲取視頻插件的 CDN 地址,或下載地址
    • 推薦使用 CDN 地址,因為方便快捷

在項目中引入 Video.js 的 CSS/JS 文件

  1. 以下代碼引入的是在線文件
...
<link  rel="stylesheet">
...
<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>
...

在項目中引入 Video 標簽

  1. 可以看到以下代碼中的視頻文件是一個網址為前綴的鏈接
    • 如果是本地調試的話,也可能是 http://127.0.0.1:8090/video/video.m3u8
<video id="welcomeVideo" class="video-js vjs-default-skin">
  <source id="source" src="http://www.asing1elife.com/video/video.m3u8" type="application/x-mpegURL" />
</video>

初始化 Video.js

  1. 具體參數如何使用,可以參考 Tutorial: options | Video.js Documentation
<script>
  var myVideo = videojs('welcomeVideo', {
    loop: true,
    controls: false,
    preload: 'auto',
    autoplay: true
  })
</script>
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容