在iOS SDK中使用手动视频质量选择功能进行HLS流传输-AVPlayer?

时间:2018-10-03 12:32:11

标签: ios objective-c swift avplayer hls

我们已经使用AVPlayer实现了HLS流传输,

 fileURL = [NSURL URLWithString:@"https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8"];
 avAsset = [AVURLAsset assetWithURL:fileURL];
 AVPlayerItem *avPlayerItem =[[AVPlayerItem alloc]initWithAsset:self->avAsset];
 self->avPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem];

它是根据网络速度自动选择视频质量的,我们还需要通过用户选择手动选择视频质量。但是我们无法手动选择媒体文件(质量1080p,720p,270p等。)。

如果有人通过手动质量选择了解HLS流,请分享您的想法。预先感谢!

2 个答案:

答案 0 :(得分:1)

您可以通过指定来设置质量:

currentPlayerItem.preferredMaximumResolution = your value
currentPlayerItem.preferredForwardBufferDuration = your value

但最终播放器会自行调整质量,因为 HLS 是一种自适应流,可根据可用带宽调整其质量。

答案 1 :(得分:0)

是的,我们可以,但是我不确定这是正确的方法。但这对我有用

首先,我们需要获得视频所需的所有质量。 有两种方法可以获取此选项

  1. 通过API从后端本身获取它
  2. 实际上可以下载“ m3u8”并阅读其内容。您要做的就是获取键“ RESOLUTION”的值

会是这样 M3U8 Description

获得解决方案列表之后。您必须将其显示为列表或用户选项。

然后是第二点。 如何使选定的分辨率在AVPlayer中播放。

AVPlayer有一个名为PreferredPeakBitRate

的选项

在那之后,我们必须通过我计算出的这些值来设置比特率。 将其应用于当前播放器

 open func setBitRate(_ definition: String) {
    // 1. 240p = 700000
    // 2. 360p = 1500000
    // 3. 480p = 2000000
    // 4. 720p = 4000000
    // 5. 1080p = 6000000
    // 6. 2k = 16000000
    // 7. 4k = 45000000
    var maxBitRate: Double = 0
    switch definition {
    case "240p":
        maxBitRate = 700000
    case "360p":
        maxBitRate = 1500000
    case "480p":
        maxBitRate = 2000000
    case "720p":
        maxBitRate = 4000000
    case "1080p":
        maxBitRate = 6000000
    case "2k":
        maxBitRate = 16000000
    case "4k":
        maxBitRate = 45000000
    case "Auto":
        maxBitRate = 0
    default:
        maxBitRate = 0
    }
    player?.currentItem?.preferredPeakBitRate = maxBitRate
    print("Playing in Bit Rate \(String(describing: player?.currentItem?.preferredPeakBitRate))")
}

尽管播放器需要一点时间来更新比特率,但肯定可以。