iPhone: одновременное воспроизведение аудио и видео

Я создаю игровое приложение, в котором мне нужно воспроизводить анимационные видеоролики и соответствующие им звуки (могут отличаться в зависимости от ситуации). У меня есть все видео и звуковые файлы, но я не могу воспроизводить их одновременно. Я использую MPMoviePlayer для видео и структуру AVFoundation для воспроизведения звука. Есть ли способ запустить и то, и другое одновременно?

Для видео:

        MPMoviePlayerViewController *videoController = [[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:[cellDetails objectForKey:@"AVFile"]]] autorelease];
        [self presentMoviePlayerViewControllerAnimated:videoController];

Для звука:

 // Instantiates the AVAudioPlayer object, initializing it with the sound
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error: nil];
self.appSoundPlayer = newPlayer;
[newPlayer release];

[appSoundPlayer prepareToPlay];

appSoundPlayer.numberOfLoops = -1;
[appSoundPlayer setVolume: self.soundLevel];
[appSoundPlayer setDelegate: self];
[appSoundPlayer play];

Спасибо.


person AlienMonkeyCoder    schedule 15.07.2011    source источник
comment
Зависит от того, как вы используете AVFoundation. Хотите опубликовать код?   -  person Rhythmic Fistman    schedule 16.07.2011
comment
См. Отредактированный вопрос. Спасибо!   -  person AlienMonkeyCoder    schedule 18.07.2011


Ответы (2)


Я лично выбрал бы путь AVPlayer. Я знаю, что вы, вероятно, захотите использовать MPMoviePlayerViewController и AVAudioPlayer, но если вы просто потратите немного больше времени на AVMutableComposition с AVPlayer, вы сможете делать все, что пытаетесь, и даже больше. Это того стоит.

Короче говоря, вы установите AVMutableComposition (который также считается «активом») с треками. Эти треки соответствуют аудио и видео трекам. Дорожки можно извлекать из всех или частей других файлов, или вы также можете вставлять пустые части аудио / видео треков по своему желанию. Вы поместите видео на видеодорожки и любое количество аудиофайлов на отдельные аудиодорожки. Затем вы создаете объект AVPlayer с помощью AVMutableComposition и вызываете сообщение «play». Он очень точно выполняет всю синхронизацию за вас.

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

person Vinnie    schedule 24.07.2011

Вы можете попробовать использовать AVMutableVideoComposition. Попробуйте взглянуть на this thing, и если вам понадобится помощь, дайте мне знать. Я с радостью помогу.

person Mihai Fratu    schedule 15.07.2011