4

我正在使用 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 代码中播放的渐进式视频 url。

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

任何人都对这个问题有任何想法。对此的任何帮助都是非常可观的。

4

2 回答 2

3

你的假设是正确的。您不能静音正在播放 HTTP 实时流的播放器。我已经为此提交了雷达。

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

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

看起来 Mac 开发人员在他们的 AVPlayer 上获得了静音属性,但 iOS 还没有。

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

于 2012-08-20T22:38:33.400 回答
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];
于 2012-09-06T12:57:42.533 回答