#ipad #media-player #ios5
#iPad #медиаплеер #ios5
Вопрос:
Это не проблема отсутствия видео, только аудио. Все как раз наоборот. Проблема возникает при использовании iOS 5.0. iPad под управлением версии 4.3 или ниже воспроизводит одни и те же видеофайлы безупречно.
поскольку iOS 5 изменила способ инициализации для MPMoviePlayerControllers, мне пришлось выполнить некоторое программирование на основе SDK, чтобы отобразить видео. Перед реализацией фрагмента, который я показываю далее, видео и его элементы управления даже не будут отображаться на экране. Контроллер будет отображать только черный квадрат с размером и происхождением заданного кадра CGRect.
Я справляюсь с этим следующим образом:
Видеофайлы расположены в папке documents. Таким образом, NSURL должен быть инициализирован как fileURLWithPath . Как только это будет сделано, я приступаю к инициализации контроллера с заданным кадром. Поскольку в противном случае это не сработало бы, просмотр добавит проигрыватель только после изменения состояния загрузки. Этого можно добиться, подписавшись на уведомление. селектор подписчика выполняет добавление представления контроллера к родительскому представлению в главном потоке, поскольку уведомление может быть обработано из других потоков.
Инициализация и добавление видео в представление:
-(void)addVideo:(NSString*) videoName onRect:(CGRect)rect {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
iPadMagazineAppDelegate *appDelegate = GET_APP_DELEGATE;
NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dirName = [dirArray objectAtIndex:0];
// get directory name for this issue
NSURL *baseURL;
/*
BUGFIX: Video does not work on iOS 5.0
*/
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.0")){
baseURL = [[NSURL fileURLWithPath:dirName]URLByAppendingPathComponent:[appDelegate.currentIssue getIssueDirectoryName ]];
}else {
baseURL = [[NSURL URLWithString:dirName] URLByAppendingPathComponent:[appDelegate.currentIssue getIssueDirectoryName]];
}
/* end BUGFIX: Video does not work on iOS 5.0 */
NSURL *videoURL = [baseURL URLByAppendingPathComponent:videoName];
MPMoviePlayerController * movieController= [[MPMoviePlayerController alloc]initWithContentURL:videoURL];
// set frame for player
movieController.view.frame = rect;
// set auto resizing masks
[movieController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
// don't auto play.
[movieController setShouldAutoplay:NO];
[movieController setUseApplicationAudioSession:YES];
/*
BUGFIX: Video does not work on iOS 5.0
*/
if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"5.0")) {
[movieController prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadVideo:) name:MPMoviePlayerLoadStateDidChangeNotification object:movieController];
}else {
[pdfView addSubview:movieController.view];
[pdfView bringSubviewToFront: movieController.view];
}
/* end BUGFIX: Video does not work on iOS 5.0 */
[_moviePlayerViewControllerArray addObject:movieController];
[movieController release];
[pool release];
}
обработчик уведомлений:
-(void)loadVideo:(NSNotification*)notification {
for (MPMoviePlayerController *movieController in _moviePlayerViewControllerArray) {
if (movieController.loadState != MPMovieLoadStateUnknown) {
[pdfView performSelectorOnMainThread:@selector(addSubview:) withObject:movieController.view waitUntilDone:YES];
[pdfView performSelectorOnMainThread:@selector(bringSubviewToFront:) withObject:movieController.view waitUntilDone:YES];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:movieController];
}
}
}
Спасибо, что прочитали этот огромный вопрос. Я ценю ваши ответы.
приветствия.
Ответ №1:
Попробуйте следующее: установите для свойства MPMoviePlayerController «useApplicationAudioSession» значение «НЕТ».
Комментарии:
1. Предупреждение, это не только переопределяет переключатель отключения звука, но и это свойство устарело в версии 6.0. Вы должны убедиться, что ваша проблема не связана с установкой переключателя отключения звука.
2. эй, а как насчет ios 7? это свойство устарело
Ответ №2:
По-видимому, есть ошибка, но она связана не с MPMoviePlayerController, а с самой iOS 5.
Мой iPad был отключен от коммутатора, но все равно воспроизводил звук из приложения iPod, поэтому я не понял, что это так, поэтому MPMoviePlayerController был в порядке, но часть ОС не заметила, что iPad был отключен.
Я зарегистрировал соответствующую ошибку в системе отслеживания ошибок Apple. Идентификатор ошибки # 10368531.
Прошу прощения, если я потратил ваше время впустую.
ОБНОВЛЕНИЕ: получил отзыв от Apple об ошибке. Это ожидаемое поведение. :
Комментарии:
1. Спасибо Паку, это мне очень помогло. Чтобы быть точным, мне пришлось сделать следующее на моем iPad 2 под управлением версии 5.0.1: 1) в настройках переключите боковой переключатель на управление приглушением звука, 2) отключите и включите его, 3) Протестируйте мое приложение, чтобы услышать правильную работу звука, 4) вернитесь к настройкам, чтобы боковой переключатель снова контролировал ориентацию,5) вернитесь в приложение, чтобы убедиться, что звук все еще работает. Спасибо!
2. Я испытываю ту же проблему на iOS 7. У вас есть какие-либо идеи, почему эта проблема все еще существует??? Я получаю только аудио, а не видео??
3. Это ожидаемое поведение. Это означает, что Apple хочет, чтобы система это делала. Если ваше устройство отключено, вы не сможете воспроизводить аудио с вашего проигрывателя VC.