首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVPlayer -检索所有格式的音频音轨

AVPlayer -检索所有格式的音频音轨
EN

Stack Overflow用户
提问于 2019-12-11 09:34:01
回答 1查看 1.3K关注 0票数 5

我正在开发一个tvOS应用程序,在这个应用程序中,我使用AVPlayer播放一个HLS播放列表,它为某些语言提供两种格式的音频。例如:

法国航空公司( (EC-3)

  • English

  • )

我正在尝试显示一个自定义对话框,允许用户在这些曲目之间进行选择。

播放列表如下所示:

代码语言:javascript
复制
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-mp4a.40.2",NAME="Français",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="fr",URI="..."
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-ec-3",NAME="Français",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="fr",URI="..."
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-mp4a.40.2",NAME="English",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="en",URI="..."

问题是,据我所知,AVPlayer按语言对曲目进行分组,它从不返回所有3首歌曲。

代码语言:javascript
复制
(lldb) po player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .audible)

▿ Optional<AVMediaSelectionGroup>
  - some : <AVAssetMediaSelectionGroup: 0x283961940, options = (
    "<AVMediaSelectionKeyValueOption: 0x2839a5a00, language = fr, mediaType = 'soun', title = Français, default = YES>",
    "<AVMediaSelectionKeyValueOption: 0x2839a5b00, language = en, mediaType = 'soun', title = English>"
), allowsEmptySelection = YES>

我深入研究了法语项目(player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .audible)?.options.first),但仍然找不到任何有用的东西。我还试着从AVPlayer中寻找其他领域,但没有成功。

即使我使用AVPlayerViewController,我也只能看到两条音频曲目可供选择。

有什么办法可以得到所有可用的音轨吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-15 18:13:24

所以这里的问题实际上是播放列表。如果您检查HLS规范,就会在EXT-X-MEDIA (https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-07#section-4.4.6.1.1)的引渡组小节中解释这一点。

播放列表可能包含相同类型的多个组,以便提供该媒体类型的多个编码。如果这样做,每个相同类型的组必须有相同的成员集,而每个对应的成员必须具有相同的属性,但URI和通道属性除外。

通常,考虑它的方式是,给定GROUP-ID中的任何内容都可以由用户选择(因此AVFoundation向您展示了它)。但是哪个GROUP-ID是由播放机选择的,并且(对于这个场景)这是由播放机所选择的EXT-X-STREAM-INFAUDIO属性决定的。

如果您希望环绕声音轨是可选的,那么它需要存在于与其他GROUP-ID轨道相同的AUDIO中。如果您没有对清单的控制,您可以通过重写环绕式法语曲目的GROUP-ID (使用类似于Charles的东西)来测试它,从audio-ec-3audio-mp4a.40.2;之后应该会出现在AVFoundation中。但是,要使HLS保持有效,必须更新所有EXT-X-STREAM-INF标记的EXT-X-STREAM-INF属性,以包含环绕声轨道定义的CODECS (否则可能会出现播放失败)。

如果您想让播放器自己选择,并且您没有环绕声英语曲目,您仍然必须在环绕声组中给出英语选项才能保持有效的HLS,但是您可以让URI与立体声组中定义的相同。同样,在这个场景中必须更新CODECS

这段来自WWDC的视频很好地解释了这一切(相关部分大约从42:39开始):https://developer.apple.com/videos/play/wwdc2018/502/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59282652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档