2012-04-18 5 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

あなたは動的にレベルを変更するには再生中にAVMutableAudioMixのplayerItem新しいインスタンスを送信することができます。上記のように新しいAVMutableAudioMixインスタンスを作成するアクションメソッドにボタンをリンクし、適切な値でplayerItemのsetAudioMix:メソッドを使用して新しいミックス値を設定します。 (メソッド間で作業している場合は、後でアクセスするためにplayerItemインスタンスへの参照を保存することを忘れないでください)。AVPlayerItem docsの合成セッターであるため、NB setAudioMix:は明示的にはAVPlayerItem docsに記載されていません。 audioMixプロパティ)