Asi*_*sif 0 objective-c ios avplayer swift avplayeritem
我正在开发一个 iOS 无线电应用程序。当网络连接良好时,应用程序运行正常。
我的情况略有不同。我限制了 iPhone 中的移动数据速度(设置 -> 开发人员 -> 网络链接调节器),并从列表中选择了较差的网络选项。此时,播放器正在尝试流式传输音频内容,如果我尝试呈现或关闭视图控制器,则应用程序会变慢或挂起。我尝试从主队列中呈现视图控制器,但这不起作用。
let requestedKey = ["playable","duration"]
asset.loadValuesAsynchronously(forKeys: requestedKey) {
DispatchQueue.main.async{
var error: NSError?
let keyStatus = asset.statusOfValue(forKey: "playable", error: &error)
if keyStatus == AVKeyValueStatus.failed || !asset.isPlayable {
completionHandler(false, nil)
return
}
completionHandler(true, asset)
}
}
if player == nil {
player = AVPlayer()
}
playerItem = AVPlayerItem(asset: asset)
Run Code Online (Sandbox Code Playgroud)
这就是我设置播放器的方式。当连接较差或边缘时,请帮助我解决这个严重的性能问题。
使用 AVPlayer 时,需要做很多事情来管理不良的网络连接并恢复播放。
但这与线程管理无关。
当AVPlayerItem失败时:AVPlayerItem.Status== .failed,您必须初始化一个新AVPlayerItem对象并注入到 AVPlayer 中。您可以使用replaceCurrentItem(with:)AVPlayer方法。
此外,要检测任何播放失败的情况,您可以观察以下通知:
AVPlayerItemPlaybackStalledAVPlayerItemDidPlayToEndTime(当缓冲区为空且网络输出时也会触发)AVPlayerItemFailedToPlayToEndTime 您可以检查[ModernAVPlayer][1]库,特别是 PlayingState.swift 文件来了解该过程。
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |