AVPlayer Dynamic Volume control

匆匆过客 提交于 2019-12-05 02:59:22

问题


How can I change the volume of the AVPlayer Dynamically? I mean, I want to mute the volume every time a button is pressed. the given code seems to change it in compile time only. How to do it during runtime???

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];

回答1:


You can send playerItem new instances of AVMutableAudioMix during playback to change levels dynamically. Just link your button to an action method that creates a new AVMutableAudioMix instance (like you have done above) with the appropriate values, and use playerItem's setAudioMix: method to set the new mix values. (If you're working across methods, don't forget to save a reference to your playerItem instance to access it later.)

(N.B. setAudioMix: isn't mentioned explicitly in the AVPlayerItem docs because it is a synthesized setter for the audioMix property.)



来源:https://stackoverflow.com/questions/10206991/avplayer-dynamic-volume-control

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!