繁体   English   中英

从 tvOS swift 上的 m3u8 播放列表中选择 AVPlayer 中的频道和字幕

[英]Select channels and subtitles in AVPlayer from m3u8 playlists on tvOS swift

遵循 Apple 的官方文档:[https://developer.apple.com/documentation/avfoundation/media_playback_and_selection/selecting_subtitles_and_alternative_audio_tracks]

self.playerStatusObserver = player.observe(\.currentItem?.status, options: [.new,.old]{ (player, change) in
switch (player.status) {
   case .readyToPlay:
     player.appliesMediaSelectionCriteriaAutomatically = false
     for characteristic in player.currentItem!.asset.availableMediaCharacteristicsWithMediaSelectionOptions {
         print("\(characteristic)")

           // Retrieve the AVMediaSelectionGroup for the specified characteristic.
           if let group = player.currentItem!.asset.mediaSelectionGroup(forMediaCharacteristic: characteristic) {
               // Print its options.
               for option in group.options {
                   print("  Option: \(option.displayName)")
               }
           }
       }

player.currentItem!.asset.availableMediaCharacteristicsWithMediaSelectionOptions没有项目。

尝试了很多情况,但是player.currentItem?.tracks只有两个轨道(视频和音频),即使流有更多的音频轨道。

如何使用标准的 AVPlayer 和 AVFoundation 框架从 m3u8 流中选择音轨和字幕?

您的代码依赖于准备播放的当前项目来访问availableMediaCharacteristics 它可能发生availableMediaCharacteristics实际上还没有上市的那一刻,除非你创建与物业玩家项目automaticallyLoadedAssetKeys参数:

AVPlayerItem(asset: asset, automaticallyLoadedAssetKeys: ["availableMediaCharacteristicsWithMediaSelectionOptions"])

您可以在以下页面上找到有关此的更多信息: https : //developer.apple.com/documentation/avfoundation/avplayeritem/1388633-automaticallyloadedassetkeys

根据您的用例,您也可能更喜欢异步加载媒体特征,您可以使用以下代码执行此操作:

 func preloadAssetKeys() {
    let key = "availableMediaCharacteristicsWithMediaSelectionOptions"
    
    asset.loadValuesAsynchronously(forKeys: [key]) {
        [weak self] in
        guard let self = self else { return }

        var error: NSError? = nil
        switch self.asset.statusOfValue(forKey: key, error: &error) {
        case .loaded:
            // ℹ️ At this point is when availableMediaCharacteristics are actually available
            ()
        default:
            ()
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM