【问题标题】:Capping the bit rate of an HLS stream programmatically on iOS devices在 iOS 设备上以编程方式限制 HLS 流的比特率
【发布时间】:2014-02-18 23:41:17
【问题描述】:

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

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

HLS 甚至可以做到这一点吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    如果你使用的是AVPlayer,正确的方式应该是

    preferredPeakBitRate
    

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

    【讨论】:

    • 你能指导我如何使用preferredPeakBitRate。能否提供演示代码。
    • @Wizard of iOS,是的,如果你有,我也需要演示。
    • 对于这个函数我们必须为 360,720,1080 和 Auto 传递的值是多少
    【解决方案2】:

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

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

    【讨论】:

    • 你如何从 m3u8 文件中选择特定的流,你能分享一个代码 sn-p 吗?谢谢!
    • @Romk1n 我有一段时间没有处理这个代码了,所以我手边没有代码 sn-p。这基本上与停止当前流并与第一个流同时启动一个新流相同。您切换到的播放列表将使用相同的 HLS 文件,您只是提供更高质量的文件。因此,在切换流之前花点播放器时间,切换流,然后从那个时间开始播放。希望有帮助!
    • @timgcarlson,建议的方法完全重置播放器,并且从应用程序中我们必须记住当前播放时间以在重置为所需比特率后寻找到相同的位置。播放器有可能在加载之前显示为空白。有没有其他更好的方法
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多