zoukankan      html  css  js  c++  java
  • ios avplayer 监控播放进度

     
    var timeObserver = avPlayerVC.player?.addPeriodicTimeObserver(forInterval: CMTime.init(value: 1, timescale: CMTimeScale(NSEC_PER_SEC)), queue: nil, using: {(cmtime) in
                    let progress = cmtime.seconds / CMTimeGetSeconds(self.avPlayerVC.player!.currentItem!.duration)
                    if (progress == 1.0) {
                        //播放百分比为1表示已经播放完毕
                        print("播放完成")
                        //处理播放完成之后的操作
                        clickblock()
                    }
                })

    上面需要在设置完成播放源之后执行,之前执行的话检测不到进度

    每次切换播放源最后先关闭旧的timeObserver 在重新开启新的timeObserver

    在关闭播放页面时需要关闭 timeObserver 否者会闪退

    avPlayerVC.player?.removeTimeObserver(timeObserver!)

    增加播放时资源状态监控

    avPlayerVC.player?.currentItem.addObserver(self,forKeyPath:"status",options: .new,context:nil)
    
    
    override func observeValue(forKeyPath keyPath:String?,of object:Any?,change:[NSKeyValueChangeKey : Any]?,context:UnsafeMulableRawPointer?){
    
        if(keyPath == "status"){
            switch self.avPlayerVC.player?.curentItem?.status {
            case .readyToPlay:
                //准备好播放了
                //ios10及以下版本 记住播放位置seek时需要在这里调用否者会闪退
                print("可以在这里调用播放")
            case .unknown:
                 //资源不存在
            case .failed:
                 //资源播放异常
            }
        }
    
    }
    
    //关闭页面时或者切换资源之前注销  
    avplayerVC.player?.currentItem?.removeObserver(self,forKeyPath:"status",context:nil)
    

      

  • 相关阅读:
    valgrind试用笔记
    《c++ primer》3.5 array 小结
    《c++ primer》chap8 The IO library 小结
    《c++ primer》3.4 迭代器(iterator)
    《c++ primer》3.1 声明命名空间 小结
    c++ 流格式控制符
    《c++ primer》3.3 vector 类型小结
    《c++ primer》3.2 string 小结
    Ubuntu 管理相关小知识(不定期更新)
    shell 脚本 生成文件,文件名为日期时间
  • 原文地址:https://www.cnblogs.com/rchao/p/11989848.html
Copyright © 2011-2022 走看看