我正在尝试为几种类型的流媒体创建更通用的媒体控制器,并希望将UI调整为流的类型;
有没有办法从AVPlayer(或者AVPlayerItem或AVAsset)确定流的类型是什么?
答案 0 :(得分:4)
实时视频的持续时间无限期:
AVPlayer * player = ...;
const BOOL isLive = CMTIME_IS_INDEFINITE([player currentItem].duration);
只有在AVPlayerItem
项状态为AVPlayerItemStatusReadyToPlay
时才需要检查持续时间。
答案 1 :(得分:1)
看来这是不可能的。
然而,人们可以检查直播的持续时间,这似乎始终高于33000秒。但是,此值仍然会波动,并且检查此值是不合需要的,因为它可能会导致意外行为。
答案 2 :(得分:0)
对于那些仍在寻找此功能的人,
AVPlayerItem> AVPlayerItemAccessLogEvent> playingType属性可能会有所帮助。 我已经检查了“视频点播”,“直播”类型是否已从其中适当返回。
中的更多详细信息答案 3 :(得分:0)
您可以使用此代码轻松检测播放类型:
NotificationCenter.default.addObserver(
forName: NSNotification.Name.AVPlayerItemNewAccessLogEntry,
object: nil,
queue: OperationQueue.main) { [weak self] (notification) in
guard let self = self else { return }
guard let playerItem = notification.object as? AVPlayerItem,
let lastEvent = playerItem.accessLog()?.events.last else {
return
}
// Here you can set the type (LIVE | VOD | FILE or unknow if it's a nil):
print("Playback Type: \(lastEvent.playbackType ?? "NA")")
}
将观察者代码添加到通常开始收听的地方。
此外,别忘了在deinit处删除观察者;)
deinit {
NotificationCenter.default.removeObserver(self,
name: NSNotification.Name.AVPlayerItemNewAccessLogEntry,
object: self)
}
希望这会对某人有所帮助:)