Player.duration всегда показывает ноль в MPMoviePlayerController для видеофайла
Я воспроизвожу небольшое видео в контроллере mpmediaplayer, используя этот код
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL fileURLWithPath:videostr]];
где videostr - это путь к этому видеофайлу.
Теперь мне нужно получить длину этого видеофайла для этого, я использую этот код.
length = player.duration;
Но он всегда показывает 0.000. Но видео играет хорошо.
Я проверяю googling каждый раз, когда код, чтобы получить продолжительность видео, 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);
хотя он показывает ноль. Может кто-нибудь, пожалуйста, помогите мне.
Спасибо заранее.
Ответы
Ответ 1
Вы не можете получить полезную продолжительность, пока контент не будет воспроизводиться.
Зарегистрировать изменения состояния загрузки:
[[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);
}
}
Ответ 2
SWIFT
Вы можете сделать это в быстро
func getMediaDuration(url: NSURL!) -> Float64{
var asset : AVURLAsset = AVURLAsset.assetWithURL(url) as AVURLAsset
var duration : CMTime = asset.duration
return CMTimeGetSeconds(duration)
}
Ответ 3
использовать MPMovieDurationAvailableNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieDurationAvailable:)
MPMovieDurationAvailableNotification object:nil];
- (void)movieDurationAvailable:(NSNotification *)notification {
NSLog(@"content play length is %g seconds", moviePlayer.duration);
}
Ответ 4
Вы можете выбрать продолжительность времени из видеофайла, используя код ниже.
NSURL *videoURL = [NSURL fileURLWithPath:VideoFileURL];
AVURLAsset *sourceAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
CMTime duration = sourceAsset.duration;
double durationInSeconds = duration.value/duration.timescale;
В переменной durationInSeconds
вы получаете точную продолжительность в секундах.