[翻譯]HLS實踐


最近公司項目沒事做,課余實踐研究一下技術,算是積累,也可以用到項目里,從零開始記錄

HLS:Http Live Streaming

官方文檔 https://developer.apple.com/streaming/

以下是官方推薦的最佳實踐,先翻譯,以后加入自己的一些解讀

步驟:

 

1.使用多碼率的副本,好處是讓客戶端根據網絡情況,觀看適合的文件,如wifi、3G環境

2.對副本編碼,建議至少有l-frame是很容易加載的,應該是提高體驗

3.視頻分段(media segment files),將大文件打散成碎片傳輸,包括索引文件和碎片文件

  已有文件:Apple提供一種分段工具,可以生成media segment files,條件為 MPEG-4 或 QuickTime 格式的文件(視頻必須為H.264,音頻必須為AAC或MP3)

  實時流:Apple提供一種分段工具,要求輸入為MPEG-2流,視頻H.264 音頻AAC或MP3

4.創建播放列表,客戶端可以用啟發式策略,根據實際帶寬變化,動態切換不同碼率的副本

5.部署,有一個web服務器,展示你的媒體內容,如html頁面,或客戶端展示,可以對流進行加密和解密

6.驗證媒體有效性,Apple提供了工具

Decide on Your Variants

生成不同碼率的副本,需要考慮的因素包括:

1.編碼硬件、預算

  編碼硬件可能決定你能產出多少種流,在線直播可能需要CDN,帶寬等都是燒錢的

2.切換能力

3.設備能力

  分辨率不同

  

  解碼器不同

  

  設備不同,可以通過Http頭的User-Agent查看,建議在服務器處理

  

4.網絡能力不同

  蜂窩網  

  wifi環境

5.碼率建議

  蜂窩網  150Kbps  

  wifi  400Kbps

  有能力可以多提供其他碼率的64 Kbps, 110 Kbps, 200 Kbps, 350 Kbps, 550 Kbps, 900 Kbps and 1500 Kbps. 間隔建議在1.5-2倍

6.視頻寬高比必須要求一致

  416 x 234  16:9

  400 x 300  4:3

7.要上AppStore的話,要提供一個不高於64Kbps的流(可以是純音頻,包含視頻的流不好弄,有好多建議方式,可以詳細閱讀官方文檔部分),供審核測試用,否則可能會不通過;另外也不能有其他伺服,否則也不允通過

Encode your Variants

推薦設置:

  • Video: H.264 Baseline Profile Level 3.0 (iPhone/iPod Touch), Main Profile Level 3.1 (iPad 1,2), High Profile Level 4.1 (new iPad), MPEG-4 Simple Profile (iPhone/iPod Touch/iPad), Motion JPEG (M-JPEG) (iPod Touch 4th Gen, iPhone 4, iPad)

  • Audio: HE-AAC or AAC-LC up to 48 kHz, stereo audio OR

    MP3 (MPEG-1 Audio Layer 3) 8 kHz to 48 kHz, stereo audio

好大一張表,自己根據實際情況選擇吧

碼率一定不能超出預計范圍,這點很重要(文章里強調很多次了,沒實踐過,還不知道為啥)

Segment your Media

HLS要求使用流或分片文件

實時直播就是通過不斷更新列表文件來實現的

Apple提供2個工具來分段

  • Media Stream Segmenter

  • Media File Segmenter

Media Stream Segmenter Tool

mediastreamsegmenter,說是在/usr/bin/mediastreamsegmenter目錄下,可是我沒有呢,后續再補充

mediastreamsegmenter的輸入源有兩種,UDP協議的MPEG-2流 或stdin(還不理解是什么)

mediastreamsegmenter支持實時流或VOD,支持命令行調用

mediastreamsegmenter能只生成音頻流(源可以是音頻或視頻)

Media File Segmenter Tool

mediafilesegmenter

mediafilesegmenter用來處理本地文件的,用來生成MPEG-2流或分片文件,iOS5以后還可以把分段文件合並成完成的文件

據說已經優化,附加開銷已經很小了10%以內

每個segment至少有一個IDR-frame,不懂,貌似是拖動進度條,尋址時可以展示1幀畫面,否則只能待緩沖到某個IDR-frame的時候才顯示,(蘋果的用戶體驗真不是蓋的)

建議10秒一個分段

Create Variant Playlist

variantplaylistcreator是個命令行工具,能從mediafilesegmenter的HLS流中,生成m3u8和列表文件

Deploy Your Media

HTML5播放

<video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8">
        This browser does not support HTML5 video.
</video>

web server配置的時候,別忘了添加MIME-type支持.M3U8 和 .ts .m3u

可以使用gzip壓縮

跟蹤你的視頻播放狀況,比如別人看了什么,看了多久,流在哪里被切換,哪里stall,詳細查看MPMovieAccessLogEventMPMovieAccessLog and MPMovieErrorLogEvent

Validate Your Media

媒體流驗證工具mediastreamvalidator,建議經常進行驗證,可以看見詳細的驗證報告

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM