调整正在播放的AVPlayer的音量

在当前正在播放AVPlayer项目上获得音量更改的唯一方法是遵循此过程;

  • 卸载当前正在播放的AVPlayerItem的资产
  • 获取该AVPlayerItem的当前播放时间
  • 将资产加载到新的AVPlayerItem中
  • 用新的AVPlayerItemreplace当前的AVPlayerItem
  • 等待在AVPlayer上更改currentItem
  • 准备好您的AudioMix并寻找之前的播放时间

我是否错过了某个基本原则,还是仅仅是简单地pipe理音量水平呢?

我无法使用AVAudioPlayer,因为我需要将iTunes曲目加载到播放器中。

您可以使用此处所述的方法在播放时更改音量:

http://developer.apple.com/library/ios/#qa/qa1716/_index.html

虽然文章的文字似乎暗示它只能用来使audio静音,但实际上可以将音量设置为任何你喜欢的音量,并且可以在audio播放之后进行设置。 例如,假设你的AVAsset实例被称为“资产”,你的AVPlayerItem的实例被称为“playerItem”,你想要设置的音量被称为“音量”,下面的代码应该做你想要的:

NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio]; NSMutableArray *allAudioParams = [NSMutableArray array]; for (AVAssetTrack *track in audioTracks) { AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; [audioInputParams setVolume:volume atTime:kCMTimeZero]; [audioInputParams setTrackID:[track trackID]]; [allAudioParams addObject:audioInputParams]; } AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; [audioMix setInputParameters:allAudioParams]; [playerItem setAudioMix:audioMix]; 

你有没有试过只准备一个AVMutableAudioMix,并将其设置在AVPlayerItem,而它仍然在播放? 你应该可以向AVPlayer询问它的currentItem,它可以提供AVMutableAudioMix的AVMutableAudioMixInputParameters应该引用的轨迹。 您提供的混合时间与混合时间有关。

 - (IBAction)sliderAction:(id)sender { NSLog(@"slider :%f ", self.mixerSlider.value); NSArray *audioTracks = [self.videoHandler.videoAsset tracksWithMediaType:AVMediaTypeAudio]; // Mute all the audio tracks NSMutableArray *allAudioParams = [NSMutableArray array]; for (AVAssetTrack *track in audioTracks) { AVMutableAudioMixInputParameters *audioInputParams =[AVMutableAudioMixInputParameters audioMixInputParameters]; [audioInputParams setVolume:self.mixerSlider.value atTime:kCMTimeZero]; [audioInputParams setTrackID:[track trackID]]; [allAudioParams addObject:audioInputParams]; } AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; [audioMix setInputParameters:allAudioParams]; [[self.mPlayer currentItem] setAudioMix:audioMix]; } 

这个方法是通过改变滑块的值来调用的。 你可以在video播放时调用它。