2013-04-23 5 views
9

Ciao esperti video Android :)Come posso acquisire video a bassa risoluzione su Android in modo affidabile su una gamma di dispositivi?

Sto sviluppando un'applicazione Android che consente all'utente di acquisire video e caricarlo su un server remoto (è più complicato di così, ma il resto dell'app non è importante). A causa del requisito di caricamento, è importante che il video abbia una dimensione ragionevole, quindi non ad altissima risoluzione. Diciamo un massimo di 680x480 o 10Mb/minuto. Questo non è un problema con i dispositivi Apple.

Ho avuto quello che può essere descritto come un incubo completo cercando di acquisire video a un bitrate ragionevolmente basso in modo affidabile su una gamma di dispositivi Android.

A quanto mi risulta ci sono due modi di catturare video su Android:

1) con la/Camera API Media Recorder

2) Con l'intento di aprire l'applicazione telecamere di acquisizione video

Opzione 1) offre la massima flessibilità e ci consente di modificare facilmente la risoluzione di acquisizione. Tuttavia, l'API della videocamera Android NON è affidabile su una vasta gamma di dispositivi, e ho ottime informazioni (anche da parte di qualcuno che ha collaborato con Google su questo problema) che se acquisisci video utilizzando questa API, si bloccherà su un buon 50% di i dispositivi là fuori. C'è una ragione per cui Zoom Camera FX usa un'intenzione per l'acquisizione video. Zoom Camera (app diversa) sembra utilizzare Media Recorder, ma ha un sacco di recensioni negative per il video che si blocca o non funziona.

L'opzione 2) funziona bene su una gamma di dispositivi, poiché utilizza l'applicazione integrata nel dispositivo. Il problema è che non hai alcun controllo sulla risoluzione, c'è un suggerimento sulla qualità dell'Intent, ma l'app della fotocamera normalmente la ignorerà. Il mio Samsung Galaxy S3 registra video per impostazione predefinita a circa 2 Mb/s. Questa è una risoluzione troppo alta. L'applicazione integrata può ovviamente modificare la risoluzione, ma ciò dipende dall'azione dell'utente che è difficile da controllare.

Capisco che potrei usare una libreria come ffmpeg per cambiare la risoluzione del video dopo l'acquisizione. Tuttavia questo mi impone di compilare la libreria per Android, e inoltre sono stato informato che per poter utilizzare legalmente i codec di codifica/codifica sul dispositivo devi pagare una licenza che ammonta a circa $ 1 per copia dell'app. Poiché questa app sarà gratuita, questa non è un'opzione.

Quindi è dove sono. Ho cercato a lungo e in alto le risposte, ma non riesco a capire come catturare video a bassa risoluzione in modo affidabile utilizzando Android.

Qualsiasi aiuto molto apprezzato!

Matthew

+0

Hai trovato un modo per aggirare i problemi? Sto provando l'opzione 2 e ho bloccato cercando le risposte .... – Salmaan

risposta

0

Penso che si possa utilizzare getSupportedPictureSizes per ottenere la dimensione minima supportata in ogni telecamera mobile e dopo si può utilizzare mediaRecorder con questi parametri in SetVideoSize(width, height)

+0

Grazie Alvaro ma questo non rende l'API Media Recorder meno disturbata – MisterMat

1

Se il target di API 18 e fino, si può utilizzare Camera e MediaCodec insieme per registrare con una dimensione e un bit rate arbitrari. Vedi, ad esempio, l'attività "Mostra + cattura telecamera" in Grafika.

È possibile controllare lo platform version dashboard per stimare la dimensione del mercato di destinazione a un determinato livello API.

2

È possibile definire esattamente che nella classe MediaRecorder impostando Telaio (width x height), utilizzare il metodo del setVideoSize(int width, int height), minore è la dimensione del frame più piccolo è il video, questo vale per tutti i telefoni Android, non sarà necessario modificare dimensione del frame per dispositivo, o è possibile codificare il bit rate, controlla la qualità di compressione di ciascun frame. Utilizzare il metodo setVideoEncodingBitRate (int bitRate) il bit rate inferiore produce una compressione più elevata, che a sua volta porta a una qualità inferiore ea una dimensione inferiore del file video. Dai un'occhiata alla classe MediaRecorder.

Problemi correlati