ios - AVPlayer 视频在从 url iOS 解码视频数据包时冻结
问题描述
我遇到了一个与 AVPlayer 相关的非常奇怪的问题,即视频冻结,时间和播放器进度连续移动。
以前我的代码在 swift 4 中,当时不存在这个问题。我已更新代码以支持 swift 5 并且当前使用 xcode-11.3 并且出现此问题。
这些日志正在打印:
- maxSFB long 超过最大允许值
- 反序列化 ICS 信息时出错
- 解码数据包错误
请检查相同的屏幕截图
//Variables
var avPlayerViewController: AVPlayerViewController?
fileprivate var avPlayer: AVPlayer?
weak var delegate: OBVideoPlayerDelegate?
var urlString: String = ""
func setup() {
let resourceLoaderManager = VIResourceLoaderManager()
self.resourceLoaderManager = resourceLoaderManager
playerItem = resourceLoaderManager.playerItem(with: url)
playerItem?.canUseNetworkResourcesForLiveStreamingWhilePaused = true
avPlayer = AVPlayer(playerItem: playerItem)
avPlayerViewController = AVPlayerViewController()
avPlayerViewController?.player = avPlayer
avPlayerViewController?.view.frame = self.bounds
avPlayerViewController?.videoGravity = AVLayerVideoGravity.resizeAspectFill
avPlayerViewController?.addObserver(self, forKeyPath: OBVideoPlayerView.kVideoBoundKey, options: NSKeyValueObservingOptions.new, context: nil)
//Play
self.play()
periodicTimeObserverReference = avPlayer?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: DispatchQueue.main) { (CMTime) -> Void in
self.handlePlayerStatus()
}
NotificationCenter.default.addObserver(self, selector: #selector(self.playerDidFinishPlaying(note:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: avPlayer?.currentItem)
playerItem?.addObserver(self, forKeyPath: "status", options: .init(rawValue: 0), context: nil)
playerItem?.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: [.initial, .new], context: nil)
}
//Play video
func play() {
self.delegate?.videoWillStartPlaying?(playerView: self)
avPlayer?.playImmediately(atRate: 1.0)
}
@objc func playAgain() {
avPlayer?.playImmediately(atRate: 1.0)
}
//Pause video
func pause() {
self.delegate?.videoWillPause?()
avPlayer?.pause()
}
另请查看卡在此错误视频链接中的视频: https ://drive.google.com/file/d/15Y17GmX4kebE385x0u_2rBqcL4GPhtJF/view?usp=sharing
解决方案
推荐阅读
- asp.net - Heroku 上的 ASP.NET Core Web Api 和 Angular 10 出现 Cors 错误
- python - 扩展颜色条以包含超出范围的数据
- c# - 变量可以用作C#中的索引号吗?
- python - 对指定像素执行不同的邻域运算
- excel - 受保护工作表上的 ActiveSheet.Paste 错误 [已解决]
- ios - App Center 未显示 Xcode/TestFlight 分发的崩溃
- javascript - !固定的!在 discord.js 中启动时如何在频道中发送消息"
- python - 使用 for 循环从 tkinter 复选框创建和获取值
- python - 在 python 类中包装 ctypes 结构会导致内存错误
- reactjs - 如何在 AWS S3 对象上实现复杂的静态文件缓存(CreateReactApp 构建输出)?