如何使用AVPlayer在备用音频流之间切换



我有一个测试应用程序,它使用AVPlayer播放m3u8 HLS播放列表指定的视频。播放列表指定了几个备用音频流,类似于Apple提供的"清单10"示例播放列表:http://developer.apple.com/library/ios/#technotes/tn2288/_index.html#//apple_ref/doc/uid/DTS40012238-CH1-ALTERNATE_MEDIA该应用程序需要能够在播放视频时在备用音频流之间切换。例如,在播放视频时,用户点击应用程序中的按钮,应用程序应该能够在英语、法语和西班牙语音频流之间切换。

AVPlayer及其相关对象将使用哪些AVFoundation类和方法在m3u8播放列表中指定的音频流之间切换?我看过AVFoundation类文档,但不知道如何做到这一点。

一个链接到一些示例代码,展示如何做到这一点将是非常好的。我一直在网上搜索这些信息,但没有成功。谢谢你在这方面的帮助。

对于使用AVPlayer播放m3u8,您似乎无法使用AVAsset来构造AVPlayerItem。您需要直接从URI中构造一个AVPlayerItem。使用此AVPlayerItem实例化AVPlayer,然后KVO侦听属性@"status"时,如果状态为AVPlayerStatusReadyToPlay,则您将在[[avPlayerInstance currentItem] asset]中拥有资产。《AV基础编程指南》第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];

视频也是如此。

这一点在IOS5的AV基础发行说明(第三部分)的"根据语言和其他标准选择音频和字幕媒体"一节中有描述。

最新更新