色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>顯示及光電>自定義播放器XLVideoPlayer詳解

自定義播放器XLVideoPlayer詳解

2017-09-26 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

  AVPlayer:可以理解為播放器對象,靈活性好,可以高度化的自定義UI,但它本身不能顯示視頻,顯示需要另一個類AVPlayerLayer來顯示,繼承于CALayer,下面是摘自官方的一段介紹:

  AVPlayer works equally well with local and remote media files.

  You can display the visual content of items played by an instance of AVPlayer in a CoreAnimation layer of class AVPlayerLayer.

  You can observe the status of a player using key-value observing.

  主要是說它支持本地/網絡媒體播放,需要CoreAnimation下的AVPlayerLayer來顯示視頻,我們可以通過KVO監聽player的播放狀態。

  AVPlayerItem:存有相關媒體信息的類,一個視頻資源對應一個AVPlayerItem對象,當你需要循環播放多個視頻資源時也需創建多個AVPlayerItem對象。建議大家可以多看看官方的英文文檔解釋(題外話)。

  An AVPlayerItem represents the presentation state of an asset that’s played by an AVPlayer object, and lets you observe that state.

  AVAsset:主要用于獲取多媒體信息,可以理解為一個抽象類,不能直接使用,操作針對它的子類AVURLAsset,根據你視頻的url創建一個包含視頻媒體信息的AVURLAsset對象。

  CMTime:還會用到這個媒體時間相關的類,如有不明白可以看之前一個帖子的解釋。

  層級關系:

  基于以上幾個類就能實現視頻的基本功能了,例如暫停、播放,快進、后退、顯示播放/緩沖進度。然后UI層面,層級很簡單,XLVideoPlayer繼承于UIView,上面我們說到顯示視頻需要AVPlayerLayer,我們將AVPlayerLayer加到view的layer上。

  自定義播放器XLVideoPlayer詳解

  下面貼出主要的代碼,初始化AVPlayer對象

  - (AVPlayerLayer *)playerLayer {

  if (!_playerLayer) {

  _playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];

  _playerLayer.backgroundColor = kPlayerBackgroundColor;

  _playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;//視頻填充模式

  }

  return _playerLayer;

  }

  - (AVPlayer *)player{

  if (!_player) {

  AVPlayerItem *playerItem = [self getAVPlayItem];

  self.playerItem = playerItem;

  _player = [AVPlayer playerWithPlayerItem:playerItem];

  [self addProgressObserver];

  [self addObserverToPlayerItem:playerItem];

  }

  return _player;

  }

  //initialize AVPlayerItem

  - (AVPlayerItem *)getAVPlayItem{

  NSAssert(self.videoUrl != nil, @“必須先傳入視頻url!!!”);

  if ([self.videoUrl rangeOfString:@“http”].location != NSNotFound) {

  AVPlayerItem *playerItem=[AVPlayerItem playerItemWithURL:[NSURL URLWithString:[self.videoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];

  return playerItem;

  }else{

  AVAsset *movieAsset = [[AVURLAsset alloc]initWithURL:[NSURL fileURLWithPath:self.videoUrl] options:nil];

  AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];

  return playerItem;

  }

  }

  同時我們注冊KVO,監控視頻播放過程,這可以獲取視頻的播放進度。AVPlayer有一個屬性currentItem是AVPlayerItem類型,表示當前播放的視頻對象。

  #pragma mark - monitor video playing course

  -(void)addProgressObserver{

  //get current playerItem object

  AVPlayerItem *playerItem = self.player.currentItem;

  __weak typeof(self) weakSelf = self;

  //Set once per second

  [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {

  float current = CMTimeGetSeconds(time);

  float total = CMTimeGetSeconds([playerItem duration]);

  weakSelf.progressLabel.text = [weakSelf timeFormatted:current];

  if (current) {

  // NSLog(@“%f”, current / total);

  weakSelf.slider.value = current / total;

  if (weakSelf.slider.value == 1) { //complete block

  if (weakSelf.completedPlayingBlock) {

  weakSelf.completedPlayingBlock(weakSelf);

  }else { //finish and loop playback

  weakSelf.playOrPauseBtn.selected = NO;

  [weakSelf showOrHidenBar];

  CMTime currentCMTime = CMTimeMake(0, 1);

  [weakSelf.player seekToTime:currentCMTime completionHandler:^(BOOL finished) {

  weakSelf.slider.value = 0.0f;

  }];

  }

  }

  }

  }];

  }

  以及監聽AVPlayerItem對象的status/loadedTimeRanges屬性變化,status對應播放狀態,loadedTimeRanges網絡緩沖狀態,當loadedTimeRanges的改變時,每緩沖一部分數據就會更新此屬性,可以獲得本次緩沖加載的視頻范圍(包含起始時間、本次網絡加載時長)

  #pragma mark - PlayerItem (status,loadedTimeRanges)

  -(void)addObserverToPlayerItem:(AVPlayerItem *)playerItem{

  //監控狀態屬性,注意AVPlayer也有一個status屬性,通過監控它的status也可以獲得播放狀態

  [playerItem addObserver:self forKeyPath:@“status” options:NSKeyValueObservingOptionNew context:nil];

  //network loading progress

  [playerItem addObserver:self forKeyPath:@“loadedTimeRanges” options:NSKeyValueObservingOptionNew context:nil];

  }

  在這獲取視頻的總時長,網絡的視頻緩沖進度,做相應的顯示。

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

  AVPlayerItem *playerItem = object;

  if ([keyPath isEqualToString:@“status”]) {

  AVPlayerStatus status = [[change objectForKey:@“new”] intValue];

  if(status == AVPlayerStatusReadyToPlay){

  self.totalDuration = CMTimeGetSeconds(playerItem.duration);

  self.totalDurationLabel.text = [self timeFormatted:self.totalDuration];

  }

  }else if([keyPath isEqualToString:@“loadedTimeRanges”]){

  NSArray *array = playerItem.loadedTimeRanges;

  CMTimeRange timeRange = [array.firstObject CMTimeRangeValue];//本次緩沖時間范圍

  float startSeconds = CMTimeGetSeconds(timeRange.start);

  float durationSeconds = CMTimeGetSeconds(timeRange.duration);

  NSTimeInterval totalBuffer = startSeconds + durationSeconds;//緩沖總長度

  self.slider.middleValue = totalBuffer / CMTimeGetSeconds(playerItem.duration);

  // NSLog(@“totalBuffer:%.2f”,totalBuffer);

  //remove loading animation

  if (self.slider.middleValue 《= self.slider.value) {

  self.activityIndicatorView.center = self.center;

  [self addSubview:self.activityIndicatorView];

  [self.activityIndicatorView startAnimating];

  }else {

  [self.activityIndicatorView removeFromSuperview];

  }

  }

  }

  下面這部分是定位視頻的某個位置播放,也就是快進后退。

  這里需要注意的是在用戶拖拽slider的過程中需要先暫停,否則手動改變進度和播放的進度會有沖突,用戶拖拽完畢再去播放視頻。

  - (void)finishChange {

  _inOperation = NO;

  [self hiden];

  CMTime currentCMTime = CMTimeMake(self.slider.value * self.totalDuration, 1);

  [self.player seekToTime:currentCMTime completionHandler:^(BOOL finished) {

  [self.player play];

  self.playOrPauseBtn.selected = YES;

  }];

  }

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

请按住滑块,拖动到最右边
了解新功能

查看更多

广告

下載排行

本周

  1. 1三相逆變主電路的原理圖和PCB資料合集免費下載
  2. 27.35 MB   |  107次下載  |  1 積分
  3. 2蘋果iphone 11電路原理圖
  4. 4.98 MB   |  10次下載  |  5 積分
  5. 3匯編語言教學中文資料
  6. 1.43 MB   |  3次下載  |  免費
  7. 4HPS27W高精度氣壓與溫度傳感器:特性、應用及接口設計
  8. 0.99 MB  |  1次下載  |  免費
  9. 5AU3116 2×60W模擬輸入雙通道Class-D 音頻功率放大器數據手冊
  10. 1.19 MB   |  1次下載  |  免費
  11. 6KP14622必易微PF>0.9 的高精度、調光型 LED 恒流驅動控制芯片
  12. 637.86 KB  |  次下載  |  免費
  13. 7PC102A 用于USB Type-C PD3.2140W 線材的eMarker芯片數據手冊
  14. 0.41 MB   |  次下載  |  免費
  15. 8 BH系列高壓干簧繼電器-測試測量與水銀繼電器替代的理想選擇!
  16. 2.31 MB  |  次下載  |  免費

本月

  1. 1三相逆變主電路的原理圖和PCB資料合集免費下載
  2. 27.35 MB   |  107次下載  |  1 積分
  3. 2PCB的EMC設計指南
  4. 2.47 MB   |  16次下載  |  1 積分
  5. 3蘋果iphone 11電路原理圖
  6. 4.98 MB   |  10次下載  |  5 積分
  7. 4TL494工業用開關電源原理圖資料
  8. 0.22 MB   |  9次下載  |  1 積分
  9. 5運算放大器基本電路中文資料
  10. 1.30 MB   |  9次下載  |  免費
  11. 6常用電子元器件介紹
  12. 3.21 MB   |  7次下載  |  免費
  13. 7AIWA J36 維修手冊
  14. 4.34 MB   |  4次下載  |  10 積分
  15. 8QW2893應急燈專用檢測芯片
  16. 590.40 KB  |  4次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935130次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191390次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183344次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81591次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分
主站蜘蛛池模板: 嗯啊好爽视频 | 国产精品野外AV久久久 | 快插我我好湿啊公交车上做 | 日日做夜夜欢狠狠免费软件 | 综合精品欧美日韩国产在线 | 闺蜜撬开我的腿用黄瓜折磨我 | 国产中文在线观看 | 花蝴蝶在线高清视频观看免费播放 | 亚洲精品国产品国语在线试看 | 亚洲高清中文字幕免费 | 无码专区久久综合久综合字幕 | 日韩欧美一级 | rio 快播 | 最新精品学生国产自在现拍 | a国产成人免费视频 | 欧美日韩亚洲综合2019 | 单亲妈妈3韩国电影免费观看 | www.伊人| 亚洲精品拍拍央视网出文 | 免费观看久久 | 最新无码专区在线视频 | 嫩草成人国产精品 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片潮喷动漫 | 欧美日韩国产高清综合二区 | 成熟YIN荡美妞A片视频麻豆 | 精品国产品国语在线不卡丶 | 农民工老头在出租屋嫖老熟女 | 日本妈妈xxxx| 广东95后小情侣酒店自拍流出 | 99精品国产自在自线 | 国产午夜永久福利视频在线观看 | 亚洲国产精品99久久久久久 | 世界上第一个得抑郁症的人是谁 | 热思思 | 国产亚洲精品成人a在线 | 久久久久久久久久久福利观看 | 手机免费毛片 | 亚洲高清在线天堂精品 | 国产电影午夜成年免费视频 | 免费。色婬网站 | 一二三四在线高清中文版免费观看电影 |