es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Recibiendo NULL al intentar crear la visualización de la transmisión de visualización (CGDisplayStreamCreateWithDispatchQueue).

Estoy tratando de realizar una captura de pantalla en Mac OS utilizando la API estándar CGDisplayStreamCreateWithDispatchQueue. Sin embargo, cada vez que llamo a la API, obtengo un stream Ref NULO y aparentemente no hay información de error, por lo que no puedo entender por qué está fallando.

He probado el código de estas dos fuentes (con pequeñas modificaciones cuando fue necesario):

https://stackoverflow.com/questions/14017895/capture-screen-with-cgdisplaystream
https://github.com/diederickh/screencapture/blob/master/src/test/testmacapiresearch.m

También he probado CGDisplayStreamCreate() y he utilizado varias resoluciones y formatos de píxeles. También he confirmado que CGGetActiveDisplayList devuelve un CGDirectDisplayID que estoy pasando a la llamada de la API.

¿Alguien puede sugerir qué podría estar causando este fallo silencioso?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible que la captura de pantalla falle debido a un problema de permisos. En macOS Mojave y versiones posteriores, el usuario debe otorgar expresamente permiso a una aplicación para capturar la pantalla. Esto se puede hacer en Preferencias del Sistema > Seguridad y Privacidad > Privacidad > Grabación de pantalla. Asegúrate de que la aplicación que estás utilizando para realizar la captura de pantalla esté listada y marcada.

    Otra posibilidad es que la llamada a la API no se esté ejecutando en el hilo principal, lo cual puede causar problemas con Core Graphics. Intenta envolver la llamada en un bloque de dispatch_sync para asegurarte de que se ejecuta en el hilo principal.

    Si ninguna de estas soluciones funciona, puede ser útil utilizar una herramienta de depuración como lldb o el depurador de Xcode para obtener más información sobre por qué la llamada a la API está fallando.

Comments are closed.