使用AVPlayer静音实时流的音轨

时间:2012-06-19 06:39:08

标签: ios audio avplayer mute

我正在使用AVPlayer播放实时流(m3U8文件)。它使用AVPlayer完美播放,但我无法将其静音。

我正在使用以下代码来静音。

NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVPlayerItemTrack *track in _player.currentItem.tracks)
{
    if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio])
    {
        AVMutableAudioMixInputParameters *audioInputParams =    [AVMutableAudioMixInputParameters audioMixInputParameters];
        [audioInputParams setVolume:0.0 atTime:kCMTimeZero];
        [audioInputParams setTrackID:[track.assetTrack trackID]];
        [allAudioParams addObject:audioInputParams];
    }
}

AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];
[[_player currentItem] setAudioMix:audioZeroMix];

使用相同的代码,我可以将本地视频文件以及我在相同AVPlayer代码中播放的渐进式视频网址静音。

(可能对于直播视频,AVPlayer实例中可用的曲目可以设置为ZERO,但下一个缓冲曲目是新鲜的音量,我是对还是其他原因?)

任何人都对这个问题有任何想法。对此的任何帮助都非常值得赞赏。

2 个答案:

答案 0 :(得分:3)

你的假设是正确的。您无法将正在播放HTTP直播的播放器静音。我已就此提交了一份RADAR。

在我的应用程序中,我们控制流,因此我们生成了一个没有音频的流,一个带有音频的相同流,并在2之间切换以打开和关闭声音。这是你能做的最好的事情。

AVAudioMix解决方案不适用于直播流。我试过了。查看底部的说明,说明它仅适用于基于文件的资产: http://developer.apple.com/library/ios/#qa/qa1716/_index.html

看起来Mac开发者在他们的AVPlayer上获得了一个静音属性,但iOS尚未拥有它。

现在,如果可以,您将不得不解决流中的问题。

答案 1 :(得分:1)

作为一种解决方法,您可以使用MPVolumeView课程来调整任何视频的音量。这将允许用户根据需要静音视频。但是,如果不使用未记录的API,则不太可能无法自定义此滑块的外观。

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame: CGRectMake(10, 37, 260, 20)] autorelease];

UIAlertView *volumeAlert = [[UIAlertView alloc] initWithTitle:@"Volume" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

[volumeView sizeToFit];
[volumeAlert addSubview:volumeView];
[volumeAlert show];
[volumeAlert release];