我们已经使用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流,请分享您的想法。预先感谢!
答案 0 :(得分:1)
您可以通过指定来设置质量:
currentPlayerItem.preferredMaximumResolution = your value
currentPlayerItem.preferredForwardBufferDuration = your value
但最终播放器会自行调整质量,因为 HLS 是一种自适应流,可根据可用带宽调整其质量。
答案 1 :(得分:0)
是的,我们可以,但是我不确定这是正确的方法。但这对我有用
首先,我们需要获得视频所需的所有质量。 有两种方法可以获取此选项
获得解决方案列表之后。您必须将其显示为列表或用户选项。
然后是第二点。 如何使选定的分辨率在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))")
}
尽管播放器需要一点时间来更新比特率,但肯定可以。