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;
在durationInSeconds
variables中,您可以获得精确的持续时间(秒)。