当某些过程开始使用相机时,我需要接收一个事件。我是通过CMIOObjectGetPropertyData完成的。
但是它不能正常工作,正确的值只是第一次访问它。
我也尝试使用CMIOObjectAddPropertyListenerBlock,但是他没有从我这里使用它。请告诉我,我做错了什么?我将非常感谢。
while (1)
{
UInt32 value = 0;
UInt32 valuePropertySize = sizeof(flag);
CMIOObjectPropertyAddress opa = {kCMIODevicePropertyDeviceIsRunningSomewhere,
kAudioObjectPropertyScopeWildcard, kAudioObjectPropertyElementMaster};
OSStatus result = CMIOObjectGetPropertyData(device, &opa, 0, NULL, sizeof(UInt32), &valuePropertySize, &value);
NSLog(@"%d : %d", result, value);
sleep(1);
}
最佳答案
我也有同样的问题。使用CMIOObjectGetPropertyData
获取数据有效,但是使用CMIOObjectAddPropertyListenerBlock
注册侦听器块从未收到任何事件。
该问题的解决方案与CMIO *代码完全无关。
基本上,我忘了开始运行循环,这阻止了接收事件。
请在这里看看:currentRunLoop
添加一个简单的[[NSRunLoop currentRunLoop] run];
为我解决了这个问题
关于objective-c - CoreMediaIO,错误地更新了属性kCMIODevicePropertyDeviceIsRunningSomewhere,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42681127/