2012-07-17 66 views
5

我一直在努力,現在制定出這個問題的一個很好的48小時,也沒有拿出任何東西。我有2個AVPlayer對象播放不同的http直播流。顯然,我不希望他們同時播放音頻,所以我需要一種方法來靜音其中一個視頻。靜音的HTTP實時流中的AVPlayer

蘋果suggests this用於靜音的音軌在AVPlayer玩....

NSMutableArray *allAudioParams = [NSMutableArray array]; 
for (AVPlayerItemTrack *track in [_playerItem tracks]) { 
    if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeAudio]) { 
     AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:0.0 atTime:CMTimeMakeWithSeconds(0,1)]; 
     [audioInputParams setTrackID:[track.assetTrack trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
     // Added to what Apple Suggested 
     [track setEnabled:NO]; 
    } 
} 

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

當這個沒有工作(後多次迭代),我發現AVPlayerItemTrack enabled屬性和嘗試,設置爲NO。也沒什麼。這甚至不註冊爲做任何事情,因爲當我嘗試了的NSLog(@「%X」,track.enabled),但它仍然顯示爲1

我不知所措,我想不出我可以閱讀和重新閱讀另一份文件,以獲得一個很好的答案。如果有人能幫上忙,那太棒了。

* 更新:我得到了蘋果的舉行,並根據AVFoundation團隊,這是不可能靜音或禁用HLS視頻的軌道。我個人認爲,這是一個錯誤,所以我提交了一個bug report(你應該這樣做,告訴蘋果,這是一個問題)。您也可以嘗試通過反饋頁面提交feature enhancement request

回答

6

新iOS 7回答: AVPlayer現在有2個新的屬性「音量」和「靜音」。使用這些!


這裏是生命的原始答案iOS的7前:

我一直在處理同樣的事情。我們用音頻創建了靜音流和流。要取消靜音或取消靜音,請撥打[player replaceCurrentItemWithPlayerItem:muteStream]

我還提交了一個bug報告。它看起來像AVPlayer在MacOS 10.7上有這個功能,但它還沒有到iOS。

AVAudioMix is documented not to work on URL assets here

當然,我試了一下,無論如何,和你一樣,我發現它真的不起作用。

+0

感謝您的回答這開闢了一條路徑,我要的,我試圖解決的問題之一。我試圖用OpenAL做同樣的事情,但沒有找到一個簡單的方法來做到這一點。我知道你可以通過alSourcef(sourceID,AL_GAIN,volume)減小音量;但不知道如何靜音,有沒有快速的解決方法呢? – chathuram 2014-04-14 15:54:34

1

這個最好的解決辦法是實際嵌入兩個音軌流URL飼料!一個是正​​常的音頻,另一個是音頻靜音。

它更有意義,做這種方式而不是ComPuff建議作爲他的方法實際上你創建了兩個單獨的URL流的方式 - 它不是必需的。

這裏是你可以用它來切換音軌代碼:

float volume = 0.0f; 

AVPlayerItem *currentItem = self.player.currentItem; 
NSArray *audioTracks = self.player.currentItem.tracks; 

DLog(@"%@",currentItem.tracks); 

NSMutableArray *allAudioParams = [NSMutableArray array]; 

for (AVPlayerItemTrack *track in audioTracks) 
{ 
    if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio]) 
    { 
     AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; 
     [audioInputParams setVolume:volume atTime:kCMTimeZero]; 
     [audioInputParams setTrackID:[track.assetTrack trackID]]; 
     [allAudioParams addObject:audioInputParams]; 
    } 
} 

if ([allAudioParams count] > 0) { 
    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
    [audioMix setInputParameters:allAudioParams]; 
    [currentItem setAudioMix:audioMix]; 
} 

唯一的問題是,我的直播網址是唯一顯示兩條軌道(一個用於視頻,一個用於音頻)時,它應該實際上是三首曲目(兩首音軌)。我無法解決,如果這是流url或我的代碼的問題!任何人都可以在代碼中發現任何錯誤?