2013-03-22 4 views
6

Я хочу создать кнопку, которая отключает звук с AVPlayer.Регулятор громкости AVPlayer

Почему я не могу использовать .volume с AVPlayer, только с AVAudioPlayer? Есть ли другой способ изменить громкость?

music.volume = 0.0; например

Спасибо за ваши ответы.

ответ

11

Начиная с прошивкой 7, просто с всего:

myAvPlayer.volume = 0; 

В противном случае, вы должны будете использовать раздражающие setAudioMix решение. Я обнаружение поддержки для этого в моем приложении следующую образом:

if ([mPlayer respondsToSelector:@selector(setVolume:)]) { 
    mPlayer.volume = 0.0; 
} else { 
    NSArray *audioTracks = mPlayerItem.asset.tracks; 

    // Mute all the audio tracks 
    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]; 

    [mPlayerItem setAudioMix:audioZeroMix]; // Mute the player item 
} 
+2

Спасибо Doug! Я искал это пару часов. К счастью, это просто установка одного свойства на AVPLayer: D – Mapedd

+2

Прекрасный, простой, красивый ответ! –

+0

@doug Почему вы изменили это на '1.0' - просто опечатка? – CupawnTae

3

Я использовал ниже код для отключения AVPlayer.

float volSet = 0 ; 
AVAsset *avAsset = [[avPlayer currentItem] asset] ; 
NSArray *audioTracks = [avAsset tracksWithMediaType:AVMediaTypeAudio] ; 

NSMutableArray *allAudioParams = [NSMutableArray array] ; 
for(AVAssetTrack *track in audioTracks){ 
AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters] ; 
[audioInputParams setVolume:volSet atTime:kCMTimeZero] ; 
[audioInputParams setTrackID:[track trackID]] ; 
[allAudioParams addObject:audioInputParams]; 
} 
AVMutableAudioMix *audioVolMix = [AVMutableAudioMix audioMix] ; 
[audioVolMix setInputParameters:allAudioParams]; 
[[avPlayer currentItem] setAudioMix:audioVolMix]; 
+0

Это работает: [[MPMusicPlayerController applicationMusicPlayer] SetVolume: 0.0 ]; –

+0

и это не AVPlayer, я думаю ... – BhushanVU

+0

он все еще работает, но он устанавливает системный том – kezi

2

лучший способ заключается в следующем

AVAssetTrack* assetTrackAudio = [arrayTracks objectAtIndex:0]; 

    AVMutableAudioMixInputParameters* audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
    [audioInputParams setVolume:currentVolume atTime:playerCursorStartPosition]; 
    [audioInputParams setTrackID:[assetTrackAudio trackID]]; 

    NSArray* audioParams = [NSArray arrayWithObject:audioInputParams]; 
    AVMutableAudioMix* audioMix = [AVMutableAudioMix audioMix]; 
    [audioMix setInputParameters:audioParams]; 

    AVPlayerItem* item = [player currentItem]; 
    [item setAudioMix:audioMix]; 
+0

Я думаю, что он работает только с AVAudioPlayer. Когда я использую это с AVPlayer, ничего не происходит. –

+0

нет его также работает с AVPlayer. Я сделал это до –

+1

@ user2196602: Он, безусловно, работает с AVPlayer. Пожалуйста, проверьте [apple documentation] (http://developer.apple.com/library/ios/#qa/qa1716/_index.html) – execv

0

Проверить эту ссылку

apple documentation for muting audio

Ниже приведен код

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self myAssetURL] options:nil]; 
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; 

// Mute all the audio tracks 
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]; 

// Create a player item 
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset]; 
[playerItem setAudioMix:audioZeroMix]; // Mute the player item 

// Create a new Player, and set the player to use the player item 
// with the muted audio mix 
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 

// assign player object to an instance variable 
self.mPlayer = player; 

// play the muted audio 
[mPlayer play]; 
0

С прошивкой 7 есть также muted недвижимости на AVPlayer:

@property (nonatomic, getter=isMuted) BOOL muted NS_AVAILABLE(10_7, 7_0); 
Смежные вопросы