You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为使用AVMediaPlayer的电台流配置App Transport Security权限

解决AVPlayer HTTP流媒体被ATS拦截的问题

嘿,我之前也碰到过这个棘手的ATS问题,看你的配置和错误信息,问题大概率出在ATS配置的格式错误上,咱们一步步来解决:

首先,修正你的ATS配置错误

你当前的NSAllowsArbitraryLoadsForMediaUsageDescription被写成了字典,但这个键的正确值应该是字符串——它是用来向苹果和用户说明你为什么需要允许非HTTPS的媒体加载(提交App Store时会用到),而不是嵌套其他配置项。

把你的ATS配置改成下面这样:

<key>NSAppTransportSecurity</key>
<dict>
    <!-- 允许所有媒体请求绕过ATS的HTTPS要求 -->
    <key>NSAllowsArbitraryLoadsForMedia</key>
    <true/>
    <!-- 必须是字符串,说明使用理由 -->
    <key>NSAllowsArbitraryLoadsForMediaUsageDescription</key>
    <string>为了播放HTTP协议的电台流媒体内容,需要暂时绕过安全连接限制</string>
</dict>

如果修正后还是不行?试试域名级别的例外

有时候AVPlayer的某些请求可能被ATS误判为非媒体请求,这时候可以给目标电台域名单独添加ATS例外,比如你用到的sunshinelive.hoerradar.de:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>hoerradar.de</key>
        <dict>
            <!-- 包含所有子域名 -->
            <key>NSIncludesSubdomains</key>
            <true/>
            <!-- 允许该域名下的任意HTTP请求 -->
            <key>NSAllowsArbitraryLoads</key>
            <true/>
            <!-- 或者更严格的配置:只允许媒体流服务 -->
            <!-- <key>NSATSExceptionServiceType</key>
            <string>NSThirdPartyMediaStreaming</string> -->
        </dict>
    </dict>
</dict>

额外注意事项

  • 记得清理项目缓存,然后重新编译运行——有时候Xcode会缓存旧的plist配置,导致修改不生效。
  • NSAllowsArbitraryLoadsForMedia是iOS 10及以上才支持的API,如果你的App需要兼容iOS 9或更早版本,就得用域名例外或者全局的NSAllowsArbitraryLoads(但后者不推荐,因为会降低整体安全性)。

按照这个步骤调整后,你的AVPlayer应该就能正常加载HTTP电台流了!

内容的提问来源于stack exchange,提问作者HerrMacUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:22:30