iOS AVPlayer 获取文件总时长的方法

2023-11-19  本文已影响0人  陈藩
  1.    // 异步加载时长
    AVAsset *avsset = [AVAsset assetWithURL:[NSURL URLWithString:filePath]];
     self.player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:avsset]];
    
     [avsset loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
         dispatch_async(dispatch_get_main_queue(), ^{
             NSError *error = nil;
             AVKeyValueStatus status = [avsset statusOfValueForKey:@"duration" error:&error];
      
             if (status == AVKeyValueStatusLoaded) {
                 CMTime duration = avsset.duration;
                 Float64 seconds = duration.value /duration.timescale;
                 
                 NSLog(@"音频文件总时长: %.2f秒", seconds);                    
    
             } else {
                 NSLog(@"无法加载音频文件的时长: %@", error.localizedDescription);
    
             }
         });
     }];
    
  2.  self.timeObserve = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0)
                                                                  queue:dispatch_get_main_queue()
                                                             usingBlock:^(CMTime time) {
    
         if(weakSelf.player.currentItem.status == AVPlayerItemStatusReadyToPlay){
             
             NSLog(@"weakSelf.player.currentItem == %@",weakSelf.player.currentItem);
             
             CMTime duration = weakSelf.player.currentItem.duration; // 获取视频长度
             
             CGFloat totalTimes = duration.value / duration.timescale;
             
             NSLog(@"duration.value == %lld",duration.value);
             NSLog(@"duration.timescale == %d",duration.timescale);
             
             NSLog(@"totalTimes == %f",totalTimes);
             
         }
         
      }];
    

3.在以上两种方法都获取到的总时长都是0的时候,我让后台改回去了,因为之前我是可以获取到的,后来后台不知道改了什么,我搞了一晚上都获取不到这个总时长,于是我让他改回去了。

上一篇 下一篇

猜你喜欢

热点阅读