使用多種碼流的播放列表,代替單一的碼流。HLS客戶端可以動態根據帶寬情況來改變碼流,給用戶提供最佳用戶體驗。(這個說法比較理想化,個人覺得只要能提供多種碼流給用戶選擇就可以,app在啟動視頻時,根據帶寬來選取使用的碼流)
需要考慮如下問題:
1. 編碼設備和預算
需要考慮設備是否能生成多種編碼,對於實時視頻如果使用CDN,還需要考慮碼流和用戶數量,計算成本。
2. 碼流切換
需要檢測不同碼流的間隔,注意客戶端是否能夠在多種碼流間切換
3. 設備功能
需要了解應用設備的能力,例如:分辨率、H.264的描述級別。不同的設備需要不同的播放列表:
a. 設備分辨率:由於設備的分辨率不同,因此需要在主播放列表中加入
RESOLUTION
屬性,例如:
#EXT-X-STREAM-INF:BANDWIDTH=1280000,RESOLUTION=640x360
#EXT-X-STREAM-INF:BANDWIDTH=1700000,RESOLUTION=1280x720
#EXT-X-STREAM-INF:BANDWIDTH=3500000,RESOLUTION=1920x1080
如果沒有可選擇的分辨率,會出現使用高於當前屏幕分辨率的視頻播放,這樣會出現浪費用戶帶寬情況。
b. 設備編碼: 由於設別使用的H.264描述級別不同,需要加入
CODECS屬性,允許客戶端過濾得到它支持特性,例如:
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.42001e" // 基線
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.4d001f" // 主要
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="avc1.64001f" // 高
設備可以根據播放列表,來選擇適合的播放內容
c. 設別類型:可以根據設備類型來選擇使用的播放列表,例如:
在Safari中可以根據HTTP頭中User-Agent得到設備類型(推薦在服務器實現)
通過Safari來訪問服務器
Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/ 534.46
(KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3
Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46
(KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3
APP得到設備類型
AppleCoreMedia/1.0.0.9B176 (iPhone; U; CPU OS 5_1 like Mac OS X; en_us)
AppleCoreMedia/1.0.0.9B176 (iPad; U; CPU OS 5_1 like Mac OS X; en_us)
4. 網絡功能
首先判斷網路類型,然后選取適合的播放列表。這個既可以使用不同URL接口請求也可以使用附加參數,服務器根據情況返回相應的播放列表。
5. 碼流建議
一些播放列表選擇碼流建議:
a. 把主要客戶端可以接受的碼流放到播放列表的第一個行位置,即使你使用多個播放列表。
移動網路: 150Kbps視頻流
WiFi: 440Kbps視頻流
b. 提供盡可能多的碼流,這些碼流是指是在特定的帶寬下,最佳畫質的碼流。例如:
64 Kbps, 110 Kbps, 200 Kbps, 350 Kbps, 550 Kbps, 900 Kbps 和 1500 Kbps
c. 音頻/視頻流注意事項
視頻必須使用相同的屏幕橫縱比,但可以考慮不同的尺寸,推薦:
屏幕橫縱比 尺寸
16:9 416x234
4:3 400x300
d. 相鄰的碼流之間應該是1.5到2倍的關系
相鄰的碼流太近,浪費帶寬,效果不明顯
相鄰的碼流太遠,並不應適合客戶端,而且跳躍太大
e. 關鍵幀(IDR 幀)
每個視頻片段中至少有一個關鍵幀,多些更好。如果視頻片段中只有一個關鍵幀,那么它必須放在開始。
f. 不要低報碼流在主播放列表中,在播放列表中應該放着視頻的最大碼流峰值而不是平均值,否則會出現延時(碼流和帶寬不匹配)。
6. 移動網路特殊注意事項
如果是開發iOS應用,必須要注意符合下面的要求,否則app竟會被拒。
a. 提供一個192kbps流或者更低帶寬的音頻流,其中可以加圖片,必須要注意192kbps是峰值,而不是平均值,其中包括視頻和音頻
b. 在你的app中,不能使用視頻片段
注意:iOS提交審核,你需要提供一個192kbps的URL給測試者,否則是否能通過就不好說了
7. 編碼格式
視頻格式: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)
音頻格式:HE-AAC 或 AAC-LC 最大 48 kHz, 立體聲
MP3 8 kHz 到 48 kHz, 立體聲
碼格式: MPEG-2 TS
注意: iOS設備不支持交錯視頻
8. 推薦碼流配置
時長:10秒
視頻編碼推薦表:
