WWDC 2022 音視頻相關 Session 概覽(HLS 相關)丨音視頻工程示例

這個公眾號會路線圖式的遍歷分享音視頻技術:音視頻基礎(完成)音視頻工具(完成)音視頻工程示例(進行中) → 音視頻工業(yè)實戰(zhàn)(準備)。關注一下成本不高,錯過干貨損失不小 ↓↓↓

1、HLS 插片廣告(HLS Interstitials)

參見:What’s new in HLS Interstitials[1]

HLS interstitials 是蘋果在 2021 年提出的插片廣告技術方案,它屬于 HLS 技術規(guī)范,目標是為了更方便的在直播、點播場景中支持廣告內容的部署。在此規(guī)范下,無論是在服務器端還是客戶端,它不再需要依賴 SSAI 中的特殊標簽。服務器可以插入 EXT-X-DATERANGE 標簽來告訴客戶端安排插片式播放,如下圖所示:

EXT-X-DATERANGE

本期 HLS Interstitials 增加了新的特性支持,包括:

1)支持 CUE 屬性配置。通過該屬性來支持前插廣告(PRE)、后插廣告(POST);也可以指定是否一次性廣告(ONCE)。

下圖展示了如何使用 CUE 屬性,以及為它設置 PRE、POSTONCE 值的用法:

CUE

2)支持 X-SNAP 屬性。通過該屬性來對齊直播場景中廣告插片的時間偏移。

在直播場景,由于封裝器給 Playlist 打時間戳用的時鐘和驅動編碼器工作的時鐘是不同的,如果兩個時鐘的不能嚴格同步,這時候就可能出現(xiàn)實際視頻時長與 Playlist 時間戳標記時長的偏差。比如,下圖示例的片段 0 前的時間標記到片段 100 前的時間標記差值有 800s,但是實際的視頻時長略少于 800s,因為每個片段都略少于 8s。

時長差異

這種偏差可能會導致插片廣告的偏移,無法對齊預期的插播位置,如下圖所示:

插片廣告偏差

這時候可以使用 X-SNAP 屬性,來控制插片廣告從最近的原內容切片邊緣切入和切出。但是,注意只在直播場景使用這個屬性,因為在 VOD 場景,不應該出現(xiàn)時鐘偏移問題。

插片廣告對齊切片邊緣
X-SNAP

3)新增 HLS_start_offset 和 HLS_primary_id 請求參數(shù)。HLS_start_offset 用于獲取廣告已播時長;HLS_primary_id 用于標識播放片段和廣告以避免重復播放相同廣告。

HLS_start_offset 的一個使用場景是:當一個插片廣告已經(jīng)播了一段時長時,又想在后面的時長切換一個更合適的廣告,這時候就需要請求廣告已播時長,基于已播時長和之前安排的總廣告時長來在后續(xù)的時長上安排新的廣告。這里的請求地址是由 X-ASSET-LIST 指定。

HLS_start_offset

4)AVFoundation 提供 AVPlayerInterstitialController 和 AVPlayerInterstitialEvent 等 API。用來支持客戶端中插廣告播放。

主要是增加了對 CUEX-SNAP 屬性的相關支持。比如,可以通過 willPlayOnce 設置插片廣告直播一次,通過 alignsStartWithPrimarySegmentBoundary 設置 X-SNAP 的 snap out,通過 alignsResumptionWithPrimarySegmentBoundary 設置 X-SNAP 的 snap in。

AVPlayerInterstitialEvent

2、HLS 內容轉向(HLS Content Steering)

參見:Deliver reliable streams with HLS Content Steering[2]

HLS Content Steering 是蘋果公司為了提高全球性流媒體服務的可用性而提出的技術方案,它可以根據(jù)服務端負載和冗余情況來動態(tài)地將客戶端引導到不同的服務器。

HLS 的內容轉向機制比較容易理解。在沒有內容轉向機制之前,通過不同的 CDN URL 可以指向不同的 CDN 服務網(wǎng)絡可以實現(xiàn)一定程度的負載分配,但是各個 URL 之間的優(yōu)先級是無法被內容提供者所改變的。在內容轉向機制下,每個變體流的 URL 多出了一個 PATHWAY-ID 屬性,該屬性將變體流分組到不同的路徑中,其中每個路徑通常對應一個 CDN。當客戶端選取了一個路徑時,只有該路徑對應的流才會被選取。在使用流媒體服務期間,客戶端會向內容轉向服務器定期發(fā)出 Steering Manifest 請求,該請求是一個 HTTP GET 請求,轉向服務器將會針對當前客戶端的情況,向客戶端發(fā)送一個轉向清單,即 CDN 服務的優(yōu)先級,客戶端在收到來自轉向服務器的轉向清單后,將依據(jù)轉向清單內容進行評估,以確定是否切換到不同路徑。此外在 Steering Manifest 請求的返回內容中還有一個 TTL 字段,該字段表示多少時間內安排下一個 Steering Manifest 請求,轉向服務器向每個客戶端的 TTL 值注入一些隨機性可以使服務器負載不至于過大??梢钥吹?HLS 內容轉向機制的實現(xiàn)方式比較簡單,這也使得該機制下的 HLS 服務可以較好地向后兼容。

下圖展示了通過轉向服務器向客戶端下發(fā) Steering Manifest 來調整 CDN 的負載:

HLS Content Steering

下圖展示了增加 Content Steering 屬性配置的 Playlist:

Steering Playlist

下圖展示了 Steering Manifest 配置:

Steering Manifest

本期 HLS Content Steering 增加了新的特性:

1)HLS Content Steering 支持路徑克隆功能。

該功能兼容 Content Stering 1.2。通過該功能可以向已有的 CDN 列表中添加新的 CDN 路徑。配置文件中添加新的 CDN 路徑時無需填寫完整 URI,只需填寫服務器和參數(shù)字段支持靈活的 URI 替換規(guī)則。

下圖展示了隨著數(shù)據(jù)增長需要擴增新的 CDN 服務的需求:

擴增 CDN

下圖展示了擴增新的 CDN 時做 Pathway 的克隆時對應的配置:

擴增 CDN

參考資料

[1]What’s new in HLS Interstitials: developer.apple.com/videos/play…

[2]Deliver reliable streams with HLS Content Steering: developer.apple.com/videos/play…

- 完 -

推薦閱讀

《iOS 視頻處理框架及重點 API 合集》

《iOS 音頻處理框架及重點 API 合集》

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容