macOS下AVPlayer流式播放远程音频正常但报错,求解析与解决
你遇到的这些控制台错误其实大多是系统级的非致命错误,虽然看起来吓人,但不会影响音频的正常播放。下面逐个拆解错误含义,再给出对应的处理建议:
错误含义解析
1. NSCocoaErrorDomain Code=4097 (connection to service named com.apple.rtcreportingd)
这个错误是你的App尝试连接苹果的com.apple.rtcreportingd服务失败导致的。这个服务主要负责收集媒体播放相关的诊断和统计数据,完全不影响音频的核心播放功能。出现这个问题通常是App Sandbox权限限制,或者该系统服务临时不可用。
2. [BoringSSL] nw_protocol_boringssl_get_output_frames...get output frames failed, state 8196
BoringSSL是苹果底层用的SSL加密库,这个错误属于网络连接收尾阶段的小问题——比如音频流播放完毕后,连接关闭时的SSL会话清理异常,或者网络波动导致的局部SSL帧传输失败。因为你的音频已经能正常播放,说明核心的SSL握手和数据传输都没问题,这个错误只是网络层的“小摩擦”。
3. TIC Read Status [1:0x0]: 1:57
TIC是TCP/IP Connection的缩写,错误码1:57对应系统错误ENETRESET,意思是远程服务器主动重置了连接。一般发生在音频流播放完成后,服务器断开了TCP连接,属于正常的连接生命周期结束,并非异常问题。
解决方法
虽然这些错误不影响播放,但如果想消除控制台日志,可以尝试以下操作:
1. 调整App Sandbox权限
除了你已经开启的Outgoing Connections (Client),可以尝试添加以下权限(在Xcode的Signing & Capabilities -> App Sandbox中):
- 勾选
Audio Input和Audio Output:确保App有访问音频硬件的基础权限(即使没有UI,AVPlayer也可能需要该权限) - 若你的App需要后台播放,勾选
Audio, AirPlay, and Picture in Picture后台模式(在Capabilities的Background Modes中)
2. 优化AVPlayer的网络配置
可以通过设置AVPlayerItem的缓冲参数,减少网络相关的日志输出:
let playerItem = AVPlayerItem(url: URL(string: "MP3_URL_HERE")!) // 根据网络情况调整预缓冲时长,单位为秒 playerItem.preferredForwardBufferDuration = 10.0 player = AVPlayer(playerItem: playerItem)
3. 忽略非致命错误
如果上述操作后仍有日志,完全可以忽略这些错误——它们只是系统底层的日志输出,不会影响App的核心功能。你可以通过监听AVPlayerItem的状态来处理真正影响播放的问题,比如:
// 监听播放完成事件 NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: playerItem, queue: .main) { _ in // 播放完成后的自定义处理 } // 监听播放错误(真正影响播放的错误会在这里触发) playerItem.addObserver(self, forKeyPath: "error", options: .new, context: nil) // 在observeValue中处理真实错误 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if keyPath == "error", let error = (object as? AVPlayerItem)?.error { print("播放异常:\(error.localizedDescription)") // 这里添加错误修复逻辑 } }
内容的提问来源于stack exchange,提问作者Sodbileg Gansukh

