2013-09-22 24 views
5

Sto provando a creare un'app di registrazione video che registra video in 24 FPS. Sto usando il seguente codice nel tentativo di bloccare il FPS a 24:Android - È possibile "bloccare" il frame rate di anteprima di una telecamera?

Camera.Parameters params = mCamera.getParameters(); 
params.setPreviewFrameRate(24); 
params.setPreviewFpsRange(24000, 24000); 

E anche il seguente CamcorderProfile che viene utilizzato con MediaRecorder:

CamcorderProfile ccp = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
ccp.videoFrameRate = 24; 

Purtroppo, funziona solo quando il video è in condizioni di scarsa luminosità, ma quando esco quando c'è luce, il video inizia a registrare in 30 FPS.

È possibile bloccare il frame rate a 24 fps anche in pieno giorno?

Grazie in anticipo!

+0

Posso chiedere perché si desidera bloccarlo a 24 fps? 29,97 FPS è molto più comune ora un giorno per la maggior parte delle applicazioni. È forse qualcosa che potresti fare dal lato server? Non conosco la natura della tua app, mi dispiace se queste domande non hanno senso. – blindstuff

+0

Quello che mi piacerebbe ottenere è una qualità da film. Ho notato che le fotocamere acquisiscono una qualità molto più alta in un FPS inferiore. È davvero difficile da spiegare, ma quando guardi un video a 24 fps e lo paragoni a un video a 29 fps, sembra diverso in un modo migliore. – MrByte

risposta

0

Probabilmente non è stato bloccato il bilanciamento del bianco automatico e l'esposizione automatica. L'FPS potrebbe essere influenzato dall'ambiente. Prova a setAutoExposureLock(true) e setAutoWhiteBalanceLock(true).

+0

Grazie per la risposta, anche se ha fatto il trucco in una situazione (quando il video viene ripreso in condizioni di scarsa luminosità), è utile solo per determinate situazioni. Ad esempio, se l'utente vuole fare un video nella sua casa e poi vuole uscire quando c'è luce, la telecamera mostrerà solo "schermo bianco". Inoltre, se l'utente sta scattando il video quando c'è molta luce, l'FPS bloccherà 30 anziché 24 come voglio che sia. – MrByte

1
public List<Integer> getSupportedPreviewFrameRates() 

controllare questa lista. Suppongo che non puoi impostare la frequenza dei fotogrammi che non è elencata lì. Può essere dovuto alla modifica dei codec utilizzata nel sistema operativo Android.

+0

Grazie mille per la risposta. Ho controllato i valori e ho ricevuto quanto segue: 15.000,30000 e 30000,30000.Il mio obiettivo è raggiungere l'esatta quantità di 24 fotogrammi al secondo, quindi ho pensato che se avessi cambiato i valori su 24000, sarebbe stato il trucco dato che il mio dispositivo supporta questo valore compreso tra 15000 e 30000. Ma, se è impossibile usare qualsiasi altra cosa eccetto questi valori, è davvero impossibile da ottenere? – MrByte

1

vorrei suggerire di dare un'occhiata al MediaRecorder: setCaptureRate (doppia fps)

fps: - la tariffa al che incornicia dovrebbe essere catturato in fotogrammi al secondo

per interrogare sostenuto: - getPreviewFpsRange (int [])

Si prega di notare che la fotocamera non può garantire che i fotogrammi vengano catturati alla velocità specificata a causa dei limiti della telecamera/encoder.

+0

Grazie per la risposta. Questa funzione è deprecata. Ho provato anche io non ho avuto successo. Sto cercando di ottenere l'esatta quantità di fps, niente di più e niente di meno. – MrByte

1

Per esperienza personale sul mio Android, vedo che c'è una dipendenza tra FPS e esposizione. Non l'ho verificato con WhiteBalance ma è anche possibile.

Quindi, perché non si imposta l'fps su 24 o su un altro valore che a un certo punto risulta in 24 fps. Quindi controlli continuamente gli fps correnti, e quando è a 24fps, quindi impostaAutoExposureLock (true) (e impostaAutoWhiteBalanceLock (true) anche nel caso in cui sia). L'fps non cambierà più a causa dei cambiamenti nell'esposizione automatica.

+0

Semplice e intelligente. Come hai detto, apparentemente il bilanciamento del bianco gioca un ruolo secondario anche in FPS. Nel mio caso bloccare l'esposizione con un FPS leggermente più basso ha fatto il trucco. –