[英]HLS Streaming with manual video quality selection in iOS SDK - AVPlayer?
我們已經使用 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 流媒體,請分享您的想法。 提前致謝!
您可以通過指定來設置質量:
currentPlayerItem.preferredMaximumResolution = your value
currentPlayerItem.preferredForwardBufferDuration = your value
但最終播放器將自行調整質量,因為 HLS 是一種自適應流,可根據可用帶寬調整其質量。
是的,我們可以,但我不確定這是正確的方法。 但它對我有用
首先,我們需要獲得視頻所需的所有品質。 有兩種方法可以獲得這個選項
在您獲得解決方案列表之后。 您必須將其顯示為列表或選項給用戶。
然后是第二點。 如何使選定的分辨率在 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))")
}
雖然播放器更新比特率需要一點時間,但它肯定會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.