10

我有一个测试应用程序,它使用 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 类文档,但没有看到如何执行此操作。

显示如何执行此操作的一些示例代码的链接会很棒。我一直在网上搜索这些信息,但没有成功。感谢您对此的任何帮助。

4

1 回答 1

23

对于带有 AVPlayer 的 m3u8 播放,看起来您不能使用 AVAsset 来构造 AVPlayerItem。您需要直接从 URI 构造一个 AVPlayerItem。使用此 AVPlayerItem 实例化 AVPlayer,然后 KVO 侦听属性 @“status”,[[avPlayerInstance currentItem] asset]如果状态为 AVPlayerStatusReadyToPlay,您将拥有一个资产。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];

这同样适用于视频。

这在IOS 5 的 AV Foundation 发行说明(第 3 部分)的“根据语言和其他标准选择音频和字幕媒体”部分中进行了描述。

于 2012-08-30T23:54:18.537 回答