繁体   English   中英

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

[英]Capping the bit rate of an HLS stream programmatically on iOS devices

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

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

这对HLS来说甚至可能吗? 谢谢!

它不是完全动态的,但我确实通过创建四个不同的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

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

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

preferredPeakBitRate

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM