player.duration在MPMoviePlayerController中为视频文件显示始终为零

时间:2012-01-27 15:46:15

标签: iphone ios mpmovieplayercontroller

我正在使用此代码在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);

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

提前感谢。

4 个答案:

答案 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

你可以像这样 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变量中,您可以获得精确的持续时间(以秒为单位)。