为使用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
相关产品推荐
相关产品推荐

