首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能用AVPlayer播放某些.m3u8项目?

为什么我不能用AVPlayer播放某些.m3u8项目?
EN

Stack Overflow用户
提问于 2021-11-09 11:34:32
回答 2查看 231关注 0票数 1

我正在做一个项目,其中我有一个AVPlayer的实例,能够播放不同的音频内容,我从后端检索,从播客到音乐和流。每个内容都有两种类型的urls:一种是带有mp3的,另一种是带有m3u8文件的。所有的mp3文件都工作正常。但是,有些m3u8文件运行正常,而另一些则不行。特别是那些不工作的文件会导致AVPlayer崩溃,并显示错误:

代码语言:javascript
运行
复制
Error Domain=AVFoundationErrorDomain Code=-11819 "Cannot Complete Action"
UserInfo={NSLocalizedRecoverySuggestion=Try again later.,
NSLocalizedDescription=Cannot Complete Action.}

我不明白问题出在哪里。根据this answer的说法,这是一个错误的清单文件,在我的例子中是-例如-以下:

代码语言:javascript
运行
复制
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,URI="_64/index.m3u8",GROUP-ID="2@48000-64000",NAME="AAC  64",DEFAULT=NO,AUTOSELECT=NO
#EXT-X-MEDIA:TYPE=AUDIO,URI="_80/index.m3u8",GROUP-ID="2@48000-80000",NAME="AAC 80",DEFAULT=NO,AUTOSELECT=NO
#EXT-X-MEDIA:TYPE=AUDIO,URI="_96/index.m3u8",GROUP-ID="2@48000-96000",NAME="AAC 96",DEFAULT=NO,AUTOSELECT=NO
#EXT-X-STREAM-INF:BANDWIDTH=133336,CODECS="mp4a.40.2",AUDIO="2@48000-96000"
_96/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=100641,CODECS="mp4a.40.2",AUDIO="2@48000-64000"
_64/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=116989,CODECS="mp4a.40.2",AUDIO="2@48000-80000"
_80/index.m3u8

在苹果论坛上,我找到了this answer,上面说iOS 14+有错。不幸的是,我无法使用iOS 13物理设备进行测试。

你有什么建议吗?

在带有iPhone 7plus和iOS 15.0.2的Xcode 13.1上进行了测试。

EN

Stack Overflow用户

回答已采纳

发布于 2021-11-22 07:38:32

最后,我找到了这个问题的解决方案。对我来说起作用的是this。我认为问题在于我的清单文件的结构如下:

代码语言:javascript
运行
复制
#EXT-X-MEDIA:TYPE=AUDIO,URI="_64/index.m3u8", GROUP-ID="1@48000-64000",NAME="Audio 64",DEFAULT=NO,AUTOSELECT=NO

特别是他们有DEFAULT=NO,AUTOSELECT=NO。因此,在调用replaceCurrentItem之前,我现在执行以下操作:

代码语言:javascript
运行
复制
    let asset = AVAsset(url: url)
    let playerItem = AVPlayerItem(asset: asset)
    
    for characteristic in asset.availableMediaCharacteristicsWithMediaSelectionOptions {
        if let group = asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.audible) {
            if let option = group.options.first {
                playerItem.select(option, in: group)
            }
        }
    }

这使得我所有的HLS音频都可以通过AVPlayer播放。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69897413

复制
相关文章

相似问题

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