Невозможно воспроизвести видеофайл MP4 из mainBundle

Итак, я пытаюсь воспроизвести простой видеофайл анимации, который я перетащил в свой проект в XCode, и поэтому должен иметь возможность воспроизводить его из моего mainBundle, верно?

С этим кодом:

 NSURL *urlString = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"introvideo" ofType:@"mp4"]]; 
MPMoviePlayerController *player  = [[MPMoviePlayerController alloc] initWithContentURL:urlString];
[player play];

Я получаю это сообщение об ошибке:* Завершение приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "* - [NSURL initFileURLWithPath:]: параметр строки nil"

Любая помощь будет отличной!

7 ответов

Решение

Это означает, что ваш код не может найти ваш файл introvideo.mp4. Убедитесь, что вы успешно добавили этот файл в свой пакет. Вы можете проверить в настройках вашего проекта: Copy Bundle Resource.

Ваш код неверен. Пожалуйста, измените в соответствии со следующим. Все еще копируйте свое видео в ресурсы вашего пакета.

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@"MacBook Pro with Retina Display" ofType:@"m4v"]];
MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc]
                                                 initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:playercontroller];
playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[playercontroller.moviePlayer play];
[playercontroller release];
playercontroller = nil;
NSLog(@"Video is Playing");

Xcode 9

Вот обновленное изображение.

Перейдите в " Фазы сборки"> "Копировать ресурсы комплекта" и посмотрите, есть ли там ваш файл. Если это не так, вы можете добавить его, нажав кнопку "+".

Вам необходимо проверить, доступно ли это видео в наборе ресурсов вашего приложения.

Как вы упомянулиyou getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter,

Это просто указывает на то, что проблема в resourcePath, означает, что там нет такого файла в Resource Bundle. pathForResource возвращается nil дорожка.

Вам нужно снова поместить этот видеофайл и убедиться, что этот файл существует в In Resource Bundle.

Тогда вы должны идти вперед с кодом как Rehan Также опубликовано.

  NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

  MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
  [[player view] setFrame:[self.view bounds]]; // Frame must match parent view
  [self.view addSubview:[player view]];
  [player play];
  [player release];

Я надеюсь, что это может стоить вам полной.

Спасибо

Кажется, что pathForResource:ofType: возвращает ноль. Проверь это

  1. этот файл действительно добавляется на этапе сборки "копирование ресурсов";
  2. Вы не ошиблись в названии файла - пути на устройстве чувствительны к регистру.
NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[[player view] setFrame:[self.view bounds]]; // Frame must match parent view
[self.view addSubview:[player view]];
[player play];
[player release];

Я поместил в проект целый каталог "Звуки" и добавил его в раздел "Копирование ресурсов комплекта". Он работал нормально, но потом начал падать.

Исправление заключалось в добавлении имени каталога к именам файлов. Например, это не сработало:

SKAction.playSoundFileNamed("crash.caf", waitForCompletion: false)

... но это сработало:

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)
Другие вопросы по тегам