2013-02-01 17 views
13

La mia app utilizza HLS per lo streaming di video da un server, ma quando richiedo lo streaming HLS dal server devo passare il massimo bitrate video che il dispositivo può gestire. Nello Android API guides si dice che "i profili di registrazione video disponibili di un dispositivo possono essere utilizzati come proxy per le funzionalità di riproduzione multimediale", ma quando provo a recuperare il video Bitrate per la fotocamera posteriore del dispositivo, viene sempre restituito a 12 Mb/s indipendentemente da il dispositivo (Galaxy Nexus, Galaxy Tab Plus 7 ", Galaxy Tab 8.9), nonostante abbiano 3 GPU diverse (PowerVR SGX540, Mali-400 MP, Tegra 250 T20). Ecco il mio codice, sto facendo qualcosa di sbagliato?Come ottenere CamcorderProfile.videoBitRate per un dispositivo Android?

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
targetVideoBitRate = camcorderProfile.videoBitRate; 

Se provo questo sul Galaxy Tab più:

boolean hasProfile = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH); 

restituisce vero, nonostante il fatto che QUALITY_HIGH è per la registrazione a 1080p e le specifiche dicono che può registrare solo a 720p.

+6

un cellulare da avviare con il sistema operativo Android deve fornire alcuni valori come quello. a volte i marchi mettono solo un valore casuale su quei campi. Ho affrontato un problema simile quando cercavo di ottenere l'angolo di campo visivo della telecamera in cui mettevano valori come 10 gradi, che è inattaccabile. Probabilmente hai lo stesso problema. non gliene frega un cazzo vogliono solo mettere uno smartphone sul mercato e non preoccuparsi dei programmatori –

risposta

7

Sembra che abbia trovato la risposta alla mia domanda.

Non ho letto lo documentation abbastanza da vicino, QUALITY_HIGH non è equivalente a 1080p, è semplicemente un modo per specificare il profilo di qualità più elevato supportato dal dispositivo. Pertanto, per definizione, CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH) è sempre true. Ho dovuto scrivere qualcosa di simile:

public enum mVideoQuality { 
    FullHD, HD, SD 
} 
mVideoQuality mMaxVideoQuality; 
int mTargetVideoBitRate; 

private void initVideoQuality { 
    if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P)) { 
     mMaxVideoQuality = mVideoQuality.FullHD; 
    } else if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)) { 
     mMaxVideoQuality = mVideoQuality.HD; 
    } else { 
     mMaxVideoQuality = mVideoQuality.SD; 
    } 
    CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
    mTargetVideoBitRate = cProfile.videoBitRate; 
} 

maggior parte dei miei dispositivi sono ancora segnalando supporto per la codifica 1080p, che sono scettico su, però ho eseguito questo codice su un Sony Xperia Tipo (il mio dispositivo di test di fascia bassa) e riportava una qualità massima di codifica di 480p con un video Bitrate di 720Kb/s.

Come ho detto, non sono sicuro che ogni dispositivo possa essere considerato affidabile, ma ho visto una gamma di bitrate video da 720Kb/s a ​​17Mb/se qualità del profilo da 480p - 1080p. Speriamo che altre persone trovino queste informazioni utili.

+0

Si prega di lasciare un commento se avete suggerimenti per migliorare la mia risposta. –

+0

Full disclosure: adogden e io lavoro nella stessa squadra. Metto una taglia su questa domanda per aiutarci a superare questo fastidioso problema. Questo probabilmente ha spinto a dare un'altra occhiata ea scrivere questa risposta utile. Si è guadagnato la taglia, e io glielo attribuisco, senza l'intenzione di trasferire un rappresentante. –

Problemi correlati