在iOS设备上以编程方式限制HLS流的比特率

时间:2014-01-27 22:02:13

标签: ios video-streaming avplayer http-live-streaming

我有一个高清视频,我正在流媒体到iOS应用程序。我想让用户能够限制最大流质量(低,中,高),考虑到以最大比特率流式传输时视频为几GB。同样,我想根据明显的数据上限原因自动选择基于蜂窝与wifi连接的设置。

通过访问AVPlayerItemAccessLogEvent获取当前比特率没有问题,但在强制降低质量的流时会丢失。

HLS甚至可以实现这一点吗?谢谢!

2 个答案:

答案 0 :(得分:4)

它并不完全是动态的,但我确实通过创建四个不同的m3u8播放列表来解决这个问题。我将每个播放列表标记为代表流质量(低,中,高,极端)。用户将根据所需的最高质量选择一个。极端播放列表包含所有品质的URL。高播放列表的URL少于极端,URL少于高,URL少于媒体。每当用户选择不同的质量时,我只需将基本流播放列表切换到相应的质量播放列表URL。

以下是四个不同播放列表的简单示例。

<强> HLS_Movie_Extreme.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000
stream-0-64000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
stream-1-350000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000
stream-2-800000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1200000
stream-3-1200000/index prog_index.m3u8 m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1800000
stream-4-1800000/prog_index.m3u8

<强> HLS_Movie_High.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000
stream-0-64000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
stream-1-350000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000
stream-2-800000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1200000
stream-3-1200000/index prog_index.m3u8 m3u8

<强> HLS_Movie_Medium.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000
stream-0-64000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
stream-1-350000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000
stream-2-800000/prog_index.m3u8

<强> HLS_Movie_Low.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000
stream-0-64000/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=350000
stream-1-350000/prog_index.m3u8

就像我说的那样,它不是动态的,但你可以使用各种技术来获得用户的网络连接,并在需要时指向所需的质量播放列表。对我来说,获得用户的偏好就足够了,并相应地调整流。

答案 1 :(得分:4)

如果您使用AVPlayer,正确的方法应该是

preferredPeakBitRate

来自Apple doc here,此项目的网络带宽消耗所需的限制(以每秒位数为单位)。