如何选择HLS视频码流
使用多种码流的播放列表,代替单一的码流。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秒
视频编码推荐表: