2013-03-22 3 views
1

У меня есть видео со звуком и mp3. Я хотел бы воспроизвести видео без звука (аудио выключено) во время воспроизведения mp3. Я использую MPMoviePlayerController, чтобы воспроизвести видео, и AVAudioPlayer, чтобы воспроизвести mp3. Есть ли способ сделать это?Как отключить видео во время воспроизведения mp3 с помощью AVAudioPlayer

+0

@nickbona: спасибо, я пытаюсь заменить MPMoviePlayerController на AVPlayer: есть ли способ найти текущее имя видеофайла, который играет AVPlayer? Я не могу его найти. – Caio

+0

(видео локально [находится в комплекте приложения]: также я бы хотел избежать использования метаданных [в случае, если это возможно с видео]) – Caio

ответ

0

Я решил ответить на свой вопрос: @nickbona ответ был в порядке, но у него нет простого и примерного кода. Таким образом, решение заключается в использовании AVPlayer вместо MPMoviePlayerController.

Так вот я с простым примером исходного кода, если кто-то будут нужен:

//init player 
AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yourfile" ofType:@"mp4"]] options:nil]; 
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset]; 
AVPlayer *myPlayerController = [AVPlayer playerWithPlayerItem:anItem]; 

//disable audio (this is the version when you have more than one video in the playlist: i write this version so it should be more useful) 
NSArray *playerTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 
NSMutableArray *playerParams = [NSMutableArray array]; 
for (AVAssetTrack *track in playerTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [playerParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *muteAudioMix = [AVMutableAudioMix audioMix]; 
[muteAudioMix setInputParameters:playerParams]; 
[[myPlayerController currentItem] setAudioMix:muteAudioMix]; 

Надеется, что это может помочь.

0

MPMoviePlayerController, похоже, не дает вам никакого контроля над томом. Я бы посоветовал вам взглянуть на AVPlayer и сопроводительные примеры. Это немного больше, чтобы воспроизводить видео, но вы можете использовать свойство «приглушенный», чтобы делать именно то, что вы хотите.

+0

Правильно, MPMoviePlayerController не предлагает такого контроля. Но поскольку он использует аудиозапись приложения, вы можете добиться того же, просто используя интерфейс 'MPMusicPlayerController', даже если вы не используете его для реального воспроизведения. – Till

0

Вы можете использовать MPMusicPlayerController для достижения цели.

- (void)muteVidepPlayer:(BOOL)muteFlag 
{ 
    MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer]; 
    if (muteFlag) 
    { 
     self.lastVolume = musicPlayer.volume; 
     [musicPlayer setVolume:0.0f]; 
    } 
    else 
    { 
     [musicPlayer setVolume:self.lastVolume]; 
    } 
} 

Что он делает, он использует экземпляр MPMusicPlayerController, который позволяет регулировать громкость. Не слишком озадачивайтесь, это также эффективно отрегулирует объем вашего MPMoviePlayerController экземпляра. Это работает, потому что MPMoviePlayerController и MPMusicPlayerController используют сеанс аудио приложения (по умолчанию).

Для того чтобы убедиться, что вы можете сбросить громкость до прежней настройки, этот метод пытается сохранить это значение в переменной экземпляра типа float (self.lastVolume) вашего контроллера воспроизведения/диспетчера просмотра/независимо.

+0

Спасибо, Тилл, я собираюсь попробовать это через пару часов. – Caio

+0

Я попробовал ваше решение, но оно не работает. (мне также было интересно, если в случае его работы это решение оставит аудио на объекте AVAduiPlayer, играющем mp3). – Caio

+0

Это не работает в симуляторе - убедитесь, что вы тестируете устройство. – Till

Смежные вопросы