In macOS (a differenza di iOS), una sessione di acquisizione può configurare automaticamente il formato di acquisizione dopo aver apportato le modifiche. Per impedire modifiche automatiche al formato di cattura utilizzare il metodo lockForConfiguration()
. Quindi chiamare il metodo beginConfiguration()
, impostare le proprietà (scegliere una preimpostazione su una dozzina, ad esempio AVCaptureSessionPresetiFrame960x540
) e successivamente chiamare il metodo commitConfiguration()
. Alla fine è necessario inserire unlockForConfiguration()
dopo aver modificato le proprietà di un dispositivo.
o seguire questi passaggi:
chiamata lockForConfiguration()
di acquisire l'accesso esclusivo alla proprietà di configurazione del dispositivo.
Modificare la proprietà activeFormat
del dispositivo (come indicato sopra & di seguito).
Iniziare l'acquisizione con il metodo startRunning()
della sessione.
Sbloccare il dispositivo con unlockForConfiguration()
.
startRunning()
e stopRunning()
metodi devono essere richiamati per avviare ed arrestare il flusso dei dati dagli ingressi alle uscite, rispettivamente.
È inoltre necessario chiamare lockForConfiguration()
prima di chiamare il metodo AVCaptureSession
startRunning()
, o preimpostato della sessione sarà ignorare il formato attivo selezionato sul dispositivo di acquisizione.
Tuttavia, si potrebbe tenere su un blocco, senza rilasciare che il blocco, se si richiedono le proprietà della periferica per rimanere invariati.
Ecco i dettagli nella documentazione dello sviluppatore lockForConfiguration().
Se si tenta di impostare il formato attivo su uno non presente nei formati accessibili, verrà generato un valore invalidArgumentException
.

Inoltre, c'è una spiegazione come modificare le proprietà: macOS AVFoundation Video Capture
In AVCaptureDevice Ci sono due proprietà. formati e activeFormat. il formato restituirà un NSArrary di AVCaptureDeviceFormat
con contiene tutti i formati esposti dalla camma. Seleziona un qualsiasi formato da questo elenco e impostalo su activeFormat.Assicurati di aver impostato il formato dopo aver ricevuto l'accesso esclusivo al dispositivo chiamando AVCaptureDevice lockForConfigration
. Dopo aver impostato il formato, rilasciare il blocco con AVCaptureDevice unlockForConfigration
. Quindi avviare AVCaptureSession che fornirà i fotogrammi video del formato impostato.
AVCaptureFormat è un wrapper per CMFormatDescription. CMVideoFotmatDescription è la sottoclasse concreta di CMFormatDescription. Utilizzare CMVideoFormatDescriptionGetDimentions()
per ottenere la larghezza e l'altezza nel formato impostato. Utilizzare CMFormatDescriptionGetMediaSubType()
per ottenere il codec video. Per i fotmat video codec per lo più è yuvs o vuy2. Per i formati compressi, h264, dmb1 (mjpeg) e molti altri.
- Questa è una citazione del user692178
Aggiunto una taglia visto che sono molto interessato alla risposta a questa domanda. In particolare, sto vedendo che non importa quale formato metto in AVCaptureDevice activeFormat la risoluzione che esce dall'anteprima non cambia. AVCaptureSessionPresetInputPriority non è definito su mac osx, tuttavia activeFormat è. Questo significa che activeFormat non è effettivamente supportato? Non riesco a trovare la documentazione su questo. –