我正在使用此代码在mpmediaplayer控制器中播放一个小视频
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL fileURLWithPath:videostr]];
其中videostr是该视频文件的路径。
现在我需要获取该视频文件的长度,因为我正在使用此代码。
length = player.duration;
但它总是显示0.000。但视频播放效果很好。
我正在通过Google搜索每个代码来检查视频的持续时间仅为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);
即使它显示为零。任何人都可以帮助我。
提前感谢。
答案 0 :(得分:22)
在内容实际可播放之前,您无法获得有用的持续时间。
注册负载状态更改:
[[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);
}
}
答案 1 :(得分:2)
你可以像这样 swift
func getMediaDuration(url: NSURL!) -> Float64{
var asset : AVURLAsset = AVURLAsset.assetWithURL(url) as AVURLAsset
var duration : CMTime = asset.duration
return CMTimeGetSeconds(duration)
}
答案 2 :(得分:1)
使用MPMovieDurationAvailableNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieDurationAvailable:)
MPMovieDurationAvailableNotification object:nil];
- (void)movieDurationAvailable:(NSNotification *)notification {
NSLog(@"content play length is %g seconds", moviePlayer.duration);
}
答案 3 :(得分:0)
您可以使用以下代码从视频文件中获取持续时间。
NSURL *videoURL = [NSURL fileURLWithPath:VideoFileURL];
AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
CMTime duration = sourceAsset.duration;
double durationInSeconds = duration.value/duration.timescale;
在durationInSeconds
变量中,您可以获得精确的持续时间(以秒为单位)。