Member-only story

關於認識音檔

--

這篇某些地方寫得真很清楚。舉例來說,他解釋了許多我之前不理解的 mp4 的知識。

AAC 與 MP4 格式

我之前不懂,為啥用 Chrome 瀏覽器播放的時候,都會先發一個請求拿到 200 後馬上中斷。之後才用 Range request 取得影片。一次取完不好嗎?

在平台上所提供的全功能播放元件,像是 iOS/macOS 的 AVPlayer,在播放一個位在線上的 MP4 檔案的時候,會發出多條連線,嘗試在檔案的最前方或是最後方找到 moov 區段,然後從 moov 區段中找到 stszstco 等區段,有了 stsz,就可以畫出進度條,提供用戶做 random seek 的 UI,當用戶 seek 到某個地方的時候,就根據 stco,發送帶有 Range Header 的 HTTP 連線,從哪個地方抓取,如果沒有 stsz 以及 stco,才去把 mdat 讀過一遍,找出 packet 位置。如果是一份被燒錄在 DVD 或是藍光碟片的大檔,也一樣會嘗試先從檔案的最前方或是最後方,找到 moov 區段。

看了這篇之後,我理解需要先取得 moov 區段才能畫出進度條,之後就可以根據播放頭在哪,就送出那段附近的 range requests 。所以第一個請求應該是拿 moov 畫出進度條用的,拿到開頭的 moov 就可以中斷。

不過 HLS 與 DASH 的 DRM 的部份因為我沒實作過,也找不太到機會深入研究,到現在還是不太清楚。希望有天可以做出需要 DRM 的內容。

--

--

Chen Li-Chi (陳立其)
Chen Li-Chi (陳立其)

Written by Chen Li-Chi (陳立其)

希望所有困難事都可以拆成簡單的事

No responses yet