AVPlayer(一)AVPlayerItem

AVPlayerItem

资源管理对象,它控制着视频从创建到销毁的诸多状态

1.播放状态控制

typedef NS_ENUM(NSInteger, AVPlayerItemStatus) {
    AVPlayerItemStatusUnknown,//未知
    AVPlayerItemStatusReadyToPlay,//准备播放
    AVPlayerItemStatusFailed//播放失败
};
[self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{

if ([object isKindOfClass:[AVPlayerItem class]]) {
    if ([keyPath isEqualToString:@"status"]) {
        switch (_playerItem.status) {
            case AVPlayerItemStatusReadyToPlay:
                //推荐将视频播放放在这里
                [self play];
                break;
                
            case AVPlayerItemStatusUnknown:
                NSLog(@"AVPlayerItemStatusUnknown");
                break;
                
            case AVPlayerItemStatusFailed:
                NSLog(@"AVPlayerItemStatusFailed")
                break;
                
            default:
                break;
        }
        
    }
}

CMTime

typedef struct{
    CMTimeValue    value;     // 帧数
    CMTimeScale    timescale;  // 帧率(影片每秒有几帧)
    CMTimeFlags    flags;        
    CMTimeEpoch    epoch;    
} CMTime;
float currentTime = self.playItem.currentTime.value/item.currentTime.timescale;
float totalTime   = CMTimeGetSeconds(item.duration);

CMTimeMake

let time = CMTime(seconds: Double, preferredTimescale: CMTimeScale)

time 指的不是秒数,而是帧数
timeScale 指的是多少帧构成了1秒
所以真正表达的时间是 time / timeScale

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值