2012-07-20 52 views
8

我有一個測試應用程序,它使用AVPlayer播放由m3u8 HLS播放列表指定的視頻。該播放列表指定了幾個備用音頻流,類似於Apple在此處提供的「清單10」示例播放列表:http://developer.apple.com/library/ios/#technotes/tn2288/_index.html#//apple_ref/doc/uid/DTS40012238-CH1-ALTERNATE_MEDIA該應用程序需要能夠在播放視頻時切換備用音頻流。例如,應用程序應該能夠在視頻播放過程中通過用戶點擊應用程序中的按鈕來切換英語,法語和西班牙語音頻流。如何使用AVPlayer在備用音頻流之間切換

AVPlayer及其相關對象將使用哪些AVFoundation類和方法在m3u8播放列表中指定的音頻流之間進行切換?我已經看過AVFoundation類文檔,但沒有看到如何做到這一點。

指向一些示例代碼的鏈接顯示如何做到這一點很好。我一直在網上搜索這些信息,但沒有成功。感謝您的幫助。

+0

我對此也很好奇,但對於類似於「清單12」的備用視頻:http://developer.apple.com/library/ios/#technotes/tn2288/_index.html。我想象任何你找到的答案都會幫助我 – user1636983 2012-08-30 19:31:38

回答

18

對於使用AVPlayer進行m3u8播放,看起來您不能使用AVAsset來構建AVPlayerItem。您需要直接從URI構建AVPlayerItem。在使用此AVPlayerItem實例化AVPlayer,然後KVO監聽property @「status」時,如果狀態爲AVPlayerStatusReadyToPlay,那麼您將擁有位於[[avPlayerInstance currentItem] asset]內的資產。這在AV Foundation Programming Guide的第20頁描述。

要更改音頻各種交替使用:

AVMediaSelectionGroup *audioSelectionGroup = [[[avPlayerInstance currentItem] asset] mediaSelectionGroupForMediaCharacteristic: AVMediaCharacteristicAudible]; 

NSLog(@"audioSelectionGroup: %@", audioSelectionGroup); 

// [audioSelectionGroup options] // Array of the options in the group above. 

和選擇AVMediaSelectionOption(你想要的音頻通道)與:

[[avPlayerInstance currentItem] selectMediaOption:avMediaSelectionOptionInstance] inMediaSelectionGroup: audioSelectionGroup]; 

同樣會爲視頻作品。

這在AV Foundation Release Notes for IOS 5(第3部分)的「根據語言和其他標準選擇音頻和字幕媒體」部分中進行了描述。