2012-11-20 20 views
2

我有一個.mp4文件,帶有視頻軌道和音頻軌道。我只想在後臺播放音軌,有沒有辦法通過AVFoundation只播放背景中的音軌通過AVFoundation

或其他框架?

任何想法會感激

+0

我希望我的回答作爲一個可以接受的答案(如果有的話請打對勾接受的答案),否則,如果需要更多的信息,請發表評論。 –

+0

謝謝你的回答。正如你所看到的,這是去年發佈的,那次我改變了應用程序的結構。我仍然想得到答案。但問題的要點是,如何通過AVfoundation播放音軌。我認爲你的答案是關注應用級別的設置,這是一個不同的點 – Jing

+0

感謝您的反饋,我發佈了一個修訂後的解決方案,我希望能爲您效力。 –

回答

0

修訂方案

我認爲下面的鏈接/樣本將幫助您解決問題。答案在於在選擇播放資產之前禁用視頻軌道的能力。

How to mute a video's audio track是一個例子,可以反轉和外推解決方案,以禁用視頻軌道。這種能力似乎是可能的,當一個人認爲視頻只是資產的另一AVPlayerItemTrack:

AVFoundation AVPlayerItemTrack

我認爲最關鍵的部件是禁用含我的足跡陣列,而不是音軌被禁用內的視頻AVPlayerItemTrack 。您需要隔離適當的標準以區分視頻軌道與音頻R和音頻L軌道。我相信這個框架將導致成功。讓我知道事情是如何解決的。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
         change:(NSDictionary *)change context:(void *)context { 

    if(context == &TracksStatusContext && [Utilities 
        getSettings].videoMuted == YES) 
    { 
     NSArray * myTracks = self.myPlayerItem.tracks; 
     for(int i = 0; i < [myTracks count]; i++) 
     { 
      if([[[myTracks objectAtIndex:i] assetTrack].mediaType 
          isEqualToString:AVMediaTypeAudio] == YES) 
      { 
       ((AVPlayerItemTrack *)[myTracks 
          objectAtIndex:i]).enabled = NO; 
      } 
     } 
     return; 
    } 

    if (context == &ItemStatusContext) { 
     [self.myPlayerView.player play]; 
     return; 
    } 
    return; 
} 

Apple AVFoundation Reference Docs