我正在使用默认的AVPlayerController在我的tvOS中播放视频。 [tvOS 12.1.1]
有时由于不良的网络或带宽问题,由于playingBufferEmpty,视频停止播放。
在那种情况下,我观察到
此后,即使带宽恢复,视频也会冻结并且无法恢复播放。
这是播放器的错误,还是我们需要以编程方式触发以恢复视频停止播放?
一旦playbackBuffer为空,我将调用此函数handleBufferEmptyCase()
即使在调用此函数之后,我仍然观察到视频仍然暂停并且无法恢复。 在视频冻结时观察到的情况,如果我尝试播放另一个视频,则视频播放至少45分钟没有任何中断,然后再次冻结了视频。 我有足够的带宽来播放直播。
func observeCurrentPlayingVideo() {
if currentItem.status == AVPlayerItem.Status.readyToPlay {
if currentItem.isPlaybackLikelyToKeepUp {
} else if currentItem.isPlaybackBufferEmpty {
print("LiveVC | isPlaybackBufferEmpty...")
perform(#selector(handleBufferEmptyCase), with: nil, afterDelay: 2)
} else if currentItem.isPlaybackBufferFull {
}
} if currentItem.status == AVPlayerItem.Status.failed {
}
}
func handleBufferEmptyCase() {
if let currentItem = self.playerView.currentItem {
if currentItem.isPlaybackBufferEmpty && !currentItem.isPlaybackLikelyToKeepUp && playerView.rate != 1 && playerView.timeControlStatus == .paused {
print("handleBufferEmptyCase | Triggering to play again...")
self.playerView.pause()
self.playerView.play()
}
}
}
我的期望是继续播放,并确保即使在bufferEmpty发生后,视频仍能继续播放。
答案 0 :(得分:0)
实际上,当mainValue = float(str) gives me 7.515e-05 output.
mainValue =Decimal(str) gives me 0.0 output
由于连接不良而停止播放时,function getFriendlyResult(k, input) {
var output = {};
for (var key in input) {
if (key !== k) output[key] = input[key];
}
for (var innerKey in input[k]) output[innerKey] = input[innerKey];
return output;
的状态为失败。您必须创建一个新的AVPlayer
对象并使用AVPlayerItem
AVPlayerItem
方法。
了解玩家“状态”的相关方法是检查相关的replaceCurrentItem(with:)
费率。 0表示玩家已停止。比率!= 0表示玩家正在玩。
另外,使用AVPlayer
的通知来检测出错误之处:
此iOS库ModernAVPlayer可帮助您了解该过程。
检查AVPlayerItem
文件和相关服务。