使用 AVPlayer 将实时流的音轨静音



我正在使用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 实例中可用的轨道可以设置为音量为零,但下一个缓冲轨道的音量是新鲜的,我说得对还是任何其他原因?

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

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

在我的应用程序中,我们控制流,

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

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

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

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

作为一种解决方法,您可以使用 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];

最新更新