2012-06-19 43 views
4

我正在使用AVPlayer播放实况流(m3U8文件)。它使用AVPlayer播放完美,但我无法将其静音。使用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例如可用可设定量为零,但下一个缓冲轨道与体积的新鲜,我说的对或任何其他原因?)

任何人对此有什么想法问题。任何帮助都非常明显。

+0

有任何指针的人......是否可能或不可能?我经历了所有的信息来源,根据我得到的信息,它在iOS中不可能。它是正确的? – macpandit

+0

我一直盯着我的办公桌整整一天半的时间,还没有拿出解决方案。我检查了我能想到的所有相关对象参考文档。我尝试了上面提到的解决方案(Apple推荐的方案),并尝试将AVPlayerItemTrack设置为NO。似乎没有任何工作。如果其他人有任何建议,我很想知道。 –

回答

3

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

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

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

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

现在,您必须在流中解决问题,如果可以的话。

+0

是的。它是正确的。我没有运气从客户端做同样的事情。我们必须绕过这条河来实现这一目标。 – macpandit

+0

@ComPuff我们在我们的流中使用了相同的技术。即具有音频流和静音流,我们改变它们之间的音轨。然而,我们遇到的问题是,当改变音轨时,我们会让整个视频加载几秒钟 - 这会中断实况视频!这是你也得到同样的情况吗? – GameDev

+1

是的,切换流时缓冲视频是一个问题。好消息是:苹果在iOS 7的AVPlayer上添加了“音量”和“静音”属性。 – CornPuff

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