日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS AVPlayer 使用总结

發(fā)布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS AVPlayer 使用总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

iOS 中視頻播放自定義能力最強的就是 AVPlayer,今天主要就介紹 AVPlayer使用的核心流程和代碼。

三個關(guān)鍵類 AVPlayerItem AVPlayer AVPlayerLayer

這是AVPlayer播放視頻的核心三個類,apple 按照MVC的模式封裝了視頻播放的整個邏輯,AVPlayerItem 是 Model層 AVPlayer 是C 控制層 AVPlayerLayer 是view展示層。

  • AVPlayerItem 存儲了視頻的基本信息 比如 時長 緩沖進度 播放狀體等。
  • AVPlayer提供了視頻 播放 暫定 從視頻那個位置開始播放的控制功能。
  • AVPlayerLayer就是一個暫時 提供給我們自定義UI的
  • 簡單實例

    NSURL *videoUrl = [NSURL URLWithString:urlStr];AVAsset *asset = [AVAsset assetWithURL:videoUrl];_videoItem = [AVPlayerItem playerItemWithAsset:asset]; // 視頻資源信息 M_player = [AVPlayer playerWithPlayerItem:_videoItem]; // 視頻控制播放層 C_playerLayer = [[AVPlayerLayer alloc]init]; // 視頻展示層 V_playerLayer.player = _player;_playerLayer.frame = CGRectMake(0, 0, superView.bounds.size.width, superView.bounds.size.height);[superView.layer addSublayer:_playerLayer]; // 添加到父視圖的layer層

    四個關(guān)鍵的監(jiān)聽

    // 監(jiān)聽視頻狀態(tài)[_videoItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:@"item.status"]; // 監(jiān)聽緩沖進度[_videoItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:@"item.loaded"]; // 獲取播放進度[_player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {// CMTimeGetSeconds(time) // 已經(jīng)播放的秒數(shù)}];// 接收播放完成通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handlePlayEnd) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];

    監(jiān)聽回調(diào)

    • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
      if ([keyPath isEqualToString:@“status”] && context == @“item.status”){// 可播放狀態(tài)
      if (((NSNumber *)[change objectForKey:NSKeyValueChangeNewKey]).integerValue== AVPlayerItemStatusReadyToPlay) {
      [_player play];
      // 視頻總時長
      self.duration = CMTimeGetSeconds(_videoItem.duration);
      }
      }
      else if ([keyPath isEqualToString:@“l(fā)oadedTimeRanges”] && context==@“item.loaded”){
      // 緩沖進度
      CMTimeRange rangeValue = [[change objectForKey:NSKeyValueChangeNewKey][0] CMTimeRangeValue];
      NSLog(@"—rangeValue—%f-------%f",CMTimeGetSeconds(rangeValue.start),CMTimeGetSeconds(rangeValue.duration));
      }
      }

    停止播放時一定要移除監(jiān)聽 非常重要

    [[NSNotificationCenter defaultCenter] removeObserver:self];[_videoItem removeObserver:self forKeyPath:@"status"];[_videoItem removeObserver:self forKeyPath:@"loadedTimeRanges"];

    更詳細的使用 https://github.com/everyStudyNow/XBAVPlayer

    總結(jié)

    以上是生活随笔為你收集整理的iOS AVPlayer 使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。