Member-only story
關於認識音檔
Feb 6, 2022
這篇某些地方寫得真很清楚。舉例來說,他解釋了許多我之前不理解的 mp4 的知識。
AAC 與 MP4 格式
我之前不懂,為啥用 Chrome 瀏覽器播放的時候,都會先發一個請求拿到 200 後馬上中斷。之後才用 Range request 取得影片。一次取完不好嗎?
在平台上所提供的全功能播放元件,像是 iOS/macOS 的 AVPlayer,在播放一個位在線上的 MP4 檔案的時候,會發出多條連線,嘗試在檔案的最前方或是最後方找到
moov
區段,然後從moov
區段中找到stsz
、stco
等區段,有了stsz
,就可以畫出進度條,提供用戶做 random seek 的 UI,當用戶 seek 到某個地方的時候,就根據stco
,發送帶有 Range Header 的 HTTP 連線,從哪個地方抓取,如果沒有stsz
以及stco
,才去把mdat
讀過一遍,找出 packet 位置。如果是一份被燒錄在 DVD 或是藍光碟片的大檔,也一樣會嘗試先從檔案的最前方或是最後方,找到moov
區段。
看了這篇之後,我理解需要先取得 moov
區段才能畫出進度條,之後就可以根據播放頭在哪,就送出那段附近的 range requests 。所以第一個請求應該是拿 moov
畫出進度條用的,拿到開頭的 moov
就可以中斷。
不過 HLS 與 DASH 的 DRM 的部份因為我沒實作過,也找不太到機會深入研究,到現在還是不太清楚。希望有天可以做出需要 DRM 的內容。