如何选择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秒
          视频编码推荐表:   
      
 
posted @ 2015-07-06 09:56  kuoxinxin  阅读(3308)  评论(0编辑  收藏  举报