// 异步加载时长 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); } }); }];
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的时候,我让后台改回去了,因为之前我是可以获取到的,后来后台不知道改了什么,我搞了一晚上都获取不到这个总时长,于是我让他改回去了。
网友评论