最近公司項目沒事做,課余實踐研究一下技術,算是積累,也可以用到項目里,從零開始記錄
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,詳細查看MPMovieAccessLogEvent, MPMovieAccessLog and MPMovieErrorLogEvent
Validate Your Media
媒體流驗證工具mediastreamvalidator,建議經常進行驗證,可以看見詳細的驗證報告

