2012-06-19 44 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];