iT邦幫忙

1

想請教 關於 m3u8 list 與 ts 檔案 驗證的關係

  • 分享至 

  • xImage

在幫客戶做一些可以線上撥放的教學課程影片
目前已經使用 ffmpeg 做 m3u8 的加密了
撥放上是完全沒有問題
假設這個 lesson1.m3u8 共有 0000.ts ~ 1000.ts

================================

現在客戶希望可以做一些 "預告" 的影片
我的想法是既然 ts 檔案都分切好了
沒必要產生新的影片檔案
所以我想說就動態產生一個新的 m3u8 檔案
讓他去撥放特定範圍的影片就好了
然後問題就出現了

如果我一個 m3u8 檔案是 連續片段 , 就可以正常撥放
例如
lesson1p1.m3u8 = 0100.ts ~ 0200.ts (有透過動態讀取修改 ts 檔名為 0000 ~ 0099)
lesson1p2.m3u8 = 0500.ts ~ 0800.ts (有透過動態讀取修改 ts 檔名為 0000 ~ 0299)

但如果在 1 個 m3u8 檔案中 , 混和多段 ts 檔案就會在進入 第2段時造成異常
例如
lesson1p3.m3u8 = 0050.ts ~ 0080.ts , 0100.ts ~ 0150.ts ,
(有透過動態讀取修改 ts 檔名為 0000 ~ 0079)

================================

我前端是使用 videojs 這個撥放器
但透過桌面 app potplayer 也是有一樣的問題
我推測是不是因為 ts 檔案中有一些驗證機制 , 來確保撥放的下一個檔案是連續的
不知道有沒有方式可以略過這個驗證機制 , 不管怎樣就照播之類的?

嘗試用 google 找資料
但可能下錯關鍵字吧 , 一直找不到相關說明
不管是 hls vhs ffmpeg m3u8 format ... balabala
不知道有沒有前輩可以給一些方向參考 , 或是更好的解決方案

目前預告都只能請客戶自己剪輯成 mp4 後再轉 m3u8
但我個人覺得這樣維護上 和 硬碟空間
都有點浪費

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

9
Ray
iT邦大神 1 級 ‧ 2022-08-26 09:48:30
最佳解答

因為 ts 裡面會寫入 timestamp, 如果播放器發現他前後不連續就會中斷; 要播放與原本編碼順序不連續的片段, 需要在 m3u8 內插入 EXT-X-DISCONTINUITY 標籤隔開, 讓播放器知道 timestamp 要自行計算:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
400-clipA-0.ts
#EXTINF:10,
400-clipA-1.ts
#EXTINF:5,
400-clipA-2.ts


#EXT-X-DISCONTINUITY
#EXTINF:10,
400-advert0.ts
#EXTINF:3,
400-advert1.ts


#EXT-X-DISCONTINUITY
#EXTINF:10,
400-clipB-0.ts
#EXTINF:10,
400-clipB-1.ts
#EXTINF:5,
400-clipB-2.ts


#EXT-X-ENDLIST

你可能也需要調整 EXT-X-DISCONTINUITY-SEQUENCE 參數:
https://yuanchieh.page/posts/2018/2018-09-24_hls-spec/

看更多先前的回應...收起先前的回應...

太感謝了 !
我再去看一次網址中的規格書

froce iT邦大師 1 級 ‧ 2022-08-26 13:21:20 檢舉

雷神也太神,這種都有涉略。

尼克 iT邦大師 1 級 ‧ 2022-08-26 14:35:26 檢舉

雷大,真想研究你的腦袋。

rb1102 iT邦研究生 5 級 ‧ 2022-08-26 17:59:38 檢舉

有什麼是大神不知道的?

Ray iT邦大神 1 級 ‧ 2022-08-28 21:01:22 檢舉

啊我就剛好接了兩家線上課程平台的顧問唄;
不然我三年前也還不知道 m3u8 是啥鬼東西;
(FFMpeg 倒是很常用啦...)
/images/emoticon/emoticon22.gif

我要發表回答

立即登入回答