在 iOS SDK - AVPlayer 中手动选择视频质量的 HLS 流?
Posted
技术标签:
【中文标题】在 iOS SDK - AVPlayer 中手动选择视频质量的 HLS 流?【英文标题】:HLS Streaming with manual video quality selection in iOS SDK - AVPlayer? 【发布时间】:2018-10-03 12:32:10 【问题描述】:我们已经使用 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 流式传输,请分享您的想法。提前致谢!
【问题讨论】:
查看这个:***.com/questions/43095311/… @Kuldeep 我们只有一个 .m3u8 格式的 URL,当网络变化时它会自动选择质量,我们没有多个 URL。如果有任何其他方式可用于从 HLS URL 中选择特定质量,请解释 @ram,你有解决办法吗? @softdev 是的,我会尽快给出答案 【参考方案1】:您可以通过指定来设置质量:
currentPlayerItem.preferredMaximumResolution = your value
currentPlayerItem.preferredForwardBufferDuration = your value
但最终播放器会自行调整质量,因为 HLS 是一种自适应流,可根据可用带宽调整其质量。
【讨论】:
【参考方案2】:是的,我们可以,但我不确定这是正确的方式。但它对我有用
首先,我们需要获得视频所需的所有品质。 有两种方法可以得到这个选项
-
通过 API 从后端本身获取它
“m3u8”您实际上可以下载并阅读其内容。您所要做的就是获取键“RESOLUTION”的值
会是这样的
在您获得解决方案列表之后。您必须将其作为列表或选项显示给用户。
然后是第二点。 如何使选择的分辨率在 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))")
虽然播放器需要一点时间来更新比特率,但它肯定会起作用。
【讨论】:
以上是关于在 iOS SDK - AVPlayer 中手动选择视频质量的 HLS 流?的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer replaceCurrentItemWithPlayerItem 在 iOS 4.3.3+ 上不起作用