Edu*_*ard 5 http-live-streaming ios avplayer tvos
我正在开发一个 tvOS 应用程序,我正在使用AVPlayer来播放 HLS 播放列表,该播放列表为某些语言提供两种格式的音频。例如:
我正在尝试显示一个自定义对话框,允许用户在每个曲目之间进行选择。
\n\n播放列表如下所示:
\n\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-mp4a.40.2",NAME="Fran\xc3\xa7ais",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="fr",URI="..."\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-ec-3",NAME="Fran\xc3\xa7ais",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="fr",URI="..."\n#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-mp4a.40.2",NAME="English",DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="en",URI="..."\nRun Code Online (Sandbox Code Playgroud)\n\n问题是,据我所知,按AVPlayer语言对曲目进行分组,并且它永远不会返回所有 3 个曲目。
(lldb) po player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .audible)\n\n\xe2\x96\xbf Optional<AVMediaSelectionGroup>\n - some : <AVAssetMediaSelectionGroup: 0x283961940, options = (\n "<AVMediaSelectionKeyValueOption: 0x2839a5a00, language = fr, mediaType = \'soun\', title = Fran\xc3\xa7ais, default = YES>",\n "<AVMediaSelectionKeyValueOption: 0x2839a5b00, language = en, mediaType = \'soun\', title = English>"\n), allowsEmptySelection = YES>\nRun Code Online (Sandbox Code Playgroud)\n\n我深入研究了法语项目(player?.currentItem?.asset.mediaSelectionGroup(forMediaCharacteristic: .audible)?.options.first),但仍然找不到任何有用的东西。我也尝试从其他领域寻找但AVPlayer没有成功。
即使当我使用时,AVPlayerViewController我也只能看到两个音轨可供选择。
有什么方法可以获取所有可用的音轨吗?
\n所以这里的问题实际上是播放列表。EXT-X-MEDIA如果您检查 HLS 规范,在( https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-07#section-4.4.6.1的 Rendition Groups 小节下有一些注释对此进行了解释。 1)
播放列表可以包含相同类型的多个组,以便提供该媒体类型的多种编码。如果这样做,则相同类型的每个组必须具有相同的成员集,并且每个相应的成员必须具有相同的属性(URI 和 CHANNELS 属性除外)。
一般来说,考虑它的方式是,给定范围内的任何内容都GROUP-ID可以由用户选择(因此 AVFoundation 向您展示它)。但正在GROUP-ID播放的内容是由玩家选择的,并且(对于此场景)这是由玩家选择AUDIO的属性决定的。EXT-X-STREAM-INF
如果您希望环绕声音轨可供选择,那么它需要与GROUP-ID其余轨道一样存在AUDIO。如果您无法控制清单,您可以通过重写GROUP-ID环绕法语轨道(使用类似 Charles Proxy 的东西)来测试这一点,从audio-ec-3到audio-mp4a.40.2;之后它应该出现在 AVFoundation 中。但需要警告的是,为了使 HLS 保持有效,CODECS所有标签的属性EXT-X-STREAM-INF都必须更新以包含CODECS环绕声轨道定义的属性(否则可能会出现播放失败)。
如果你想将其留给玩家选择,并且你没有环绕英语轨道,你仍然必须在环绕组中提供英语选项以保持有效的HLS,但你可以将相同的保留URI为定义在立体组中。CODECS在这种情况下必须再次更新。
WWDC 的这段视频很好地解释了这一切(相关部分从 42:39 左右开始):https ://developer.apple.com/videos/play/wwdc2018/502/
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |