2012-04-18 4 views
3

Как я могу изменить громкость AVPlayer динамически? Я имею в виду, я хочу отключить звук каждый раз, когда нажимается кнопка. данный код, похоже, меняет его только во время компиляции. Как это сделать во время выполнения ???
AVPlayer Динамический регулятор громкости

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] options:nil]; 
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 
NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVAssetTrack *track in audioTracks) { 
    AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero]; 
    [audioInputParams setTrackID:[track trackID]]; 
    [allAudioParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix]; 
[audioZeroMix setInputParameters:allAudioParams]; 
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; 
[playerItem setAudioMix:audioZeroMix]; 
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 
self.mPlayer = player; 
[mPlayer play]; 

ответ

2

Вы можете отправить playerItem новые экземпляры AVMutableAudioMix во время воспроизведения для изменения уровней динамически. Просто привяжите свою кнопку к методу действий, который создает новый экземпляр AVMutableAudioMix (например, вы сделали выше) с соответствующими значениями, и используйте метод setAudioMix: playerItem для установки новых значений смешивания. (Если вы работаете по методам, не забудьте сохранить ссылку на экземпляр playerItem, чтобы получить доступ к нему позже.)

(NB setAudioMix: не упоминается явно в AVPlayerItem docs, потому что это синтезированное сеттер для audioMix недвижимость.)

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