调整播放AVPlayer的音量

时间:2010-07-16 21:21:30

标签: iphone objective-c ios4

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

  • 卸载当前正在播放的AVPlayerItem的资产
  • 抓取该AVPlayerItem的当前播放时间
  • 将资产加载到新的AVPlayerItem
  • 用新的AVPlayerItem替换当前的AVPlayerItem
  • 等待AVIlayer上的currentItem更改
  • 准备AudioMix并寻找之前的播放时间

我是否错过了某个地方的基本原则,或者只是为了简单地管理音量水平而感到错综复杂?

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

4 个答案:

答案 0 :(得分:21)

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

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

虽然文章的文字似乎暗示它只能用于静音音频,但您实际上可以将音量设置为您喜欢的音量,并且您可以在音频播放后进行设置。例如,假设您的AVAsset实例称为“资产”,您的AVPlayerItem实例称为“playerItem”,并且您要设置的卷称为“volume”,以下代码应该执行您想要的操作:

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

答案 1 :(得分:4)

您是否尝试过准备AVMutableAudioMix并在AVPlayerItem正在播放时将其设置在AVPlayerItem上?您应该能够向AVPlayer询问其currentItem,它可以提供AVMutableAudioMix的AVMutableAudioMixInputParame应该引用的轨道。您为混合物提供的时间与混合物的施加时间相关。

答案 2 :(得分:2)

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

此方法由滑块值更改调用。你可以在视频播放时调用它。

答案 3 :(得分:0)

请注意,原始问题中描述的基于AVMutableAudioMix的方法(以及几个答案)适用于基于文件的资产,而不适用于流媒体。

这在Apple撰写的文件中有详细说明,此处:

https://developer.apple.com/library/content/qa/qa1716/_index.html

当我尝试使用流音频时,我没有收到任何从AVAsset的tracks(withMediaType:)方法(Swift)返回的曲目。