2017-03-08 71 views
1

當某些進程開始使用相機時,我需要接收事件。我通過CMIOObjectGetPropertyData完成了此操作。 但它不能正常工作,正確的值只是第一次被訪問。CoreMediaIO,不正確更新的屬性kCMIODevicePropertyDeviceIsRunningSomewhere

我也嘗試使用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); 
} 

回答

0

我也有同樣的問題。通過CMIOObjectGetPropertyData獲得數據的工作,但註冊與CMIOObjectAddPropertyListenerBlock偵聽器塊從未收到任何事件。

該問題的解決方案與CMIO *代碼完全無關。 基本上,我忘了啓動運行循環,並且阻止了接收事件。

請看看這裏:currentRunLoop

添加一個簡單的[[NSRunLoop currentRunLoop] run];解決了該問題對我來說