player.duration在MPMoviePlayerController中总是显示为零的video文件

我正在使用此代码在mpmediaplayer控制器中播放一个小video

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:videostr]]; 

其中videostr是该video文件的path。

现在我需要得到那个video文件的长度,我使用这个代码。

 length = player.duration; 

但总是显示0.000。 但是video播放不错。

我正在通过search代码来获取video时长是player.duration

我也尝试一些其他的代码

 AVURLAsset *asset = [[[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videostr] options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], AVURLAssetPreferPreciseDurationAndTimingKey, nil]] autorelease]; NSTimeInterval duration; if (asset) duration = CMTimeGetSeconds(asset.duration) ; NSLog(@">>>>>>>>>>>>>>>>>>>> %f", asset.duration); 

即使它显示为零。可以帮助我的任何人。

预先感谢。

在内容实际可播放之前,您无法获得有用的时间。

注册加载状态更改:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MPMoviePlayerLoadStateDidChange:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil]; 

一旦被通知评估状态:

 - (void)MPMoviePlayerLoadStateDidChange:(NSNotification *)notification { if ((player.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK) { NSLog(@"content play length is %g seconds", player.duration); } } 

迅速

你可以像这样快速地

 func getMediaDuration(url: NSURL!) -> Float64{ var asset : AVURLAsset = AVURLAsset.assetWithURL(url) as AVURLAsset var duration : CMTime = asset.duration return CMTimeGetSeconds(duration) } 

使用MPMovieDurationAvailableNotification

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDurationAvailable:) MPMovieDurationAvailableNotification object:nil]; - (void)movieDurationAvailable:(NSNotification *)notification { NSLog(@"content play length is %g seconds", moviePlayer.duration); } 

您可以使用下面的代码从video文件中获取时间。

 NSURL *videoURL = [NSURL fileURLWithPath:VideoFileURL]; AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil]; CMTime duration = sourceAsset.duration; double durationInSeconds = duration.value/duration.timescale; 

durationInSecondsvariables中,您可以获得精确的持续时间(秒)。