MPMoviePlayerViewController воспроизводит фильм из каталога «Документы» - target-c - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть подпапка «Видео» в папке «Документы». И есть файл somevideo.mp4. У меня есть полный путь к этому файлу, но MPMoviePlayerViewController не хочет воспроизводить видео с локального. Вот код:

NSString *path = [[self getVideoFolderPath] stringByAppendingPathComponent:@"somevideo.mp4"];
NSURL *fURL = [NSURL fileURLWithPath:path];
MPMoviePlayerViewController *videoPlayerView = [[MPMoviePlayerViewController alloc] initWithContentURL:fURL];
[self presentMoviePlayerViewControllerAnimated:videoPlayerView];
[videoPlayerView.moviePlayer play];

Это не играет. Появляется белый экран и больше ничего. Этот код работает с удаленным видео, когда я помещаю URL на веб-сайт с видеофайлом, но локальный не воспроизводится. Как получить правильный путь к файлу видео?

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

Используете ли вы iOS до 4.3? Если это так, вам нужно сделать это

[videoPlayerView setContentURL: fURL];

Вот фрагмент кода, из которого я воспроизводю видео из папки документов. Одна из вещей, которые я бы порекомендовал, - это избегать некоторых авто-релизных объектов. Особенно на NSURL, когда у вас есть viewcontrollers. Я знаю, что это должно быть безопасно, но я никогда не находил это 100%

if ( [[NSFileManager defaultManager] fileExistsAtPath:fullpathVideoFile] == NO )
    {
    NSLog(@"No video file found");
    return self;
    }

playbackURL = [[NSURL alloc] initFileURLWithPath:fullpathVideoFile isDirectory:NO];

if ( playbackURL == nil )
    {
    NSLog(@"playbackURL == nil");
    return self;
    }

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerLoadedMovie:) name:@"MPMoviePlayerLoadStateDidChangeNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerStartedMovie:) name:@"MPMoviePlayerNowPlayingMovieDidChangeNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerFinishedMovie:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:nil];

[self setContentURL:playbackURL];

В моем случае я создал подкласс MPMoviePlayerController (как я обычно это делаю со всеми контроллерами представления), поэтому ссылки на 'self' будут относиться к экземпляру объекта MPMoviePlayerController

1 голос
/ 23 сентября 2011

Странно.Код, который вы положили, кажется правильным.Убедитесь, что путь к аудио, который вы пытаетесь получить, не поврежден.

...