多媒体

iPhone OS 主要提供了几种播放音频的方法

  • SystemSound Services
  • AVAudioPlayer 类
    • 只能播放本地和网络音频, 网络音频需要缓存到本地.
  • AVPlayer
  • Audio Queue Services
  • OpenAL

AVAudioPlayer类调用哪个框架, 使用步骤

框架: AVAudioPlayer
步骤

  • 配置 AVAudioPlayer 对象
  • 实现 AVAudioPlayer 类的代理方法
  • 控制 AVAudioPlayer 类的对象
    • 监控音量
    • 回放进度和拖拽播放

AVPlayer

使用AVPlayer 会使用的三个类

  • AVPlayerItem
self.playerItem  = [AVPlayerItem playerItemWithURL:videoURL];
  • AVPlayer
self.player      = [AVPlayer playerWithPlayerItem:_playerItem];
  • AVPlayerLayer
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];

开始

[self.player play]

暂停

[self.player pause]
  • AVPlayer 有个 rate 属性, 1 时正常播放, 0 时是暂停播放.
  • AVPlayerItem 有个 videoGravity 属性, 常用的2个枚举
    • AVLayerVideoGravityResizeAspectFill 等比例填充多余裁剪
    • AVLayerVideoGravityResizeAspect 等比例填充留下黑边

调节音量

  • 添加手势调节
  • 使用 UISlider 滑动调节

获取播放时间

  • AVPlayer 并么有直接提供 API 来获取播放时间, 需要我们通过该计算得到
  • AVPlayer 下有个 CMTime 属性, 这个属性由 value 和 timeScale 组成, value / timeScale 得到秒数
  • 通过CMTimeGetSeconds([_player currentTime]) / 60可以获得当前分钟,CMTimeGetSeconds([_player currentTime]) % 60可以获得当前秒数
  • 通过playerItem.duration.value / _playerItem.duration.timescale / 60可以获得视频总分钟数,通过playerItem.duration.value / _playerItem.duration.timescale % 60可以获得视频总时间减分钟的秒数
  • 搭配定时器就可以设置视频当前播放时长和视频总时长

Slider滑动结束视频跳转

  • 通过 seekToTime 可以跳转到视频的某个点, 传入的值也是 CMTime 类型的
  • 通过以上方法我们也可以实现记录上次播放的时间接节点, 在下次播放时跳转到上次播放的地方, 这里要注意的是必须要等到播放器准备好以后才可以调用 seekToTime 这个方法, 否则会崩溃, 通过 KVO 来监听 Status 属性, 当self.player.status == AVPlayeStatusReadyToPlay的时候调用 seekToTime 方法

全屏播放

  • 把播放器添加在 keyWindow 上, 可以实现全屏.

你可能感兴趣的:(多媒体)