美文网首页
AVPlayer详解系列

AVPlayer详解系列

作者: 求长生 | 来源:发表于2020-05-27 16:54 被阅读0次

    首先在iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下:

    使用环境    优点  缺点
    

    MPMoviePlayerController MediaPlayer 简单易用 不可定制
    AVPlayerViewController AVKit 简单易用 不可定制
    AVPlayer AVFoundation 可定制度高,功能强大 不支持流媒体
    IJKPlayer IJKMediaFramework 定制度高,支持流媒体播放 使用稍复杂

    一、AVPlayer的控制

    前面讲过该类是控制视频播放行为的,他的使用比较简单。
    播放视频:
    [self.player play];
    暂停视频:
    [self.player pause];
    更改速度:
    self.player.rate = 1.5;//注意更改播放速度要在视频开始播放之后才会生效

    2、视频的时间信息

    在AVPlayer中时间的表示有一个专门的结构体CMTime

    typedef struct{
    CMTimeValue value; // 帧数
    CMTimeScale timescale; // 帧率(影片每秒有几帧)
    CMTimeFlags flags;
    CMTimeEpoch epoch;
    } CMTime;
    CMTime是以分数的形式表示时间,value表示分子,timescale表示分母,flags是位掩码,表示时间的指定状态。

    获取当前播放时间,可以用value/timescale的方式:

    float currentTime = self.playItem.currentTime.value/item.currentTime.timescale;
    还有一种利用系统提供的方法,我们用它获取视频总时间:

    float totalTime = CMTimeGetSeconds(item.duration);
    如果我们想要添加一个计时的标签不断更新当前的播放进度,有一个系统的方法:

    • (id)addPeriodicTimeObserverForInterval:(CMTime)interval queue:(nullable dispatch_queue_t)queue usingBlock:(void (^)(CMTime time))block;
      方法名如其意, “添加周期时间观察者” ,参数1 interal 为CMTime 类型的,参数2 queue为串行队列,如果传入NULL就是默认主线程,参数3 为CMTime 的block类型。
      简而言之就是,每隔一段时间后执行 block。
      比如:我们把interval设置成CMTimeMake(1, 10),在block里面刷新label,就是一秒钟刷新10次。
      正常观察播放进度一秒钟一次就行了,所以可以这么写:
      [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) {

      AVPlayerItem *item = WeakSelf.playerItem;
      NSInteger currentTime = item.currentTime.value/item.currentTime.timescale;
      NSLog(@"当前播放时间:%ld",currentTime);
      ];

    https://blog.csdn.net/super_man_ww/article/details/84895079

    相关文章

      网友评论

          本文标题:AVPlayer详解系列

          本文链接:https://www.haomeiwen.com/subject/vpucbqtx.html