AudioHardware.cpp:1200:在给定ID 0的情况下,无法删除属性侦听器:AudioObjectRemovePropertyListener。

21

我正在使用Swift开发一个项目,尝试启动AVPlayer,但出现异常并显示

AudioHardware.cpp:1200:AudioObjectRemovePropertyListener:AudioObjectRemovePropertyListener:没有具有给定ID 0的对象。

我猜问题出在我的URL上。以下是我的代码:

func initPlayer() {
    let url:NSURL = NSURL(string:"https://purelight1-163000.appspot.com/api/user/v2/media/track/60/sample")!
    self.playerItem = AVPlayerItem(url: url as URL)
    self.player=AVPlayer(playerItem: self.playerItem!)
    let playerLayer=AVPlayerLayer(player: self.player!)
    playerLayer.frame = CGRect(x: 0, y: 0, width: 10, height: 50) // actually this player layer is not visible
    self.view.layer.addSublayer(playerLayer)
}

这似乎与模拟器有关。我在真实设备上没有遇到这些错误。 - Suragch
2
不相关,但为什么要创建一个 NSURL 然后将其转换为 URL?你应该只需简单地执行 let url= URL(string:"https://purelight1-163000.appspot.com/api/user/v2/media/track/60/sample")! - Dávid Pásztor
2
你是否设置了所有异常的断点?对我来说,解决方案是通过编辑断点将其设置为仅捕获Objective-C异常而不是C++异常。 - kylejs
是的,所有异常的断点都已设置好了。但从技术上讲,它不应该崩溃。 - danu
我最初在寻找不同的错误时到了这里,但消息是相同的“没有给定ID的设备”。正如@Suragch所说,只有当我使用模拟器时才会出现这种情况。我能够通过选择模拟器窗口,然后转到“Hardware -> Audio Output”并将其更改为非系统默认值(注意:这仍可能是相同的输出源)来停止它。 - zwilf
3个回答

3

对我而言,问题出在模拟器的音频输出上。

之前我一直在使用一个名为 iShowU 的音频捕获应用程序进行不同的项目操作,而且我的耳机已经连接好了。但是,为了让模拟器的音频输出不再干扰我,我将"Audio Device Output"设为与耳机相对应的 iShowU 设置(这些耳机并没有插入耳朵)。当播放已加载的视频结束后,问题就出现了。

将音频输出从 Simulator > I/O > Audio Output 改为系统音频输出,并重新运行我的构建项目,问题得以解决。


0
那个问题是由于模拟器引起的。
我在iPhone 14模拟器上遇到了同样的问题,解决方法是选择系统作为音频输出,并点击设备 --> 擦除所有内容和设置...

-2

Xcode太啰嗦了。你只需要编辑你的Scheme(Product > Scheme > Edit Scheme),并创建一个新的环境变量OS_ACTIVITY_MODE,将其值设置为disable。


8
我不确定这种方法是否理想。这样做会不会压制其他重要(或至少有潜在重要性的)警告声音? - Joe Susnick
2
@AmitaiB 这个答案并不是为了解决问题,而是为了防止控制台输出太多行。如果你只想看到自己的打印输出,这个方法很有用。 - Shaked Sayag
15
我建议不要让我的开发人员这样做。这也会抑制约束违规。 - Jereme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接