2013-02-01 33 views
13

Uygulamam, bir sunucudan video akışı için HLS kullanıyor, ancak sunucudan HLS akışını istediğimde, aygıtın işleyebileceği maksimum video bit hızını iletmem gerekiyor. Android API guides'da "bir aygıtın mevcut video kayıt profilleri medya oynatma yetenekleri için bir proxy olarak kullanılabilir" diyor, ancak arkaya bakan kameralar için videoBitRate'i almaya çalıştığımda her zaman 12Mb/s olarak geri geliyor cihaz (Galaxy Nexus, Galaxy Tab Plus 7 ", Galaxy Tab 8.9), 3 farklı GPU'lara sahip olmalarına rağmen (PowerVR SGX540, Mali-400 MP, Tegra 250 T20). İşte kodum yanlış bir şey mi yapıyorum?Android cihaz için CamcorderProfile.videoBitRate nasıl edinilir?

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

Ben Galaxy Tab Plus bu denerseniz: o gerçeğine rağmen true verir

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

o QUALITY_HIGH 1080p kayıt içindir ve özellikleri sadece 720p'de kaydedebileceğini söyler.

+6

android OS ile başlatılacak bir cep telefonu, bunun gibi bazı değerler vermelidir. Bazen markalar sadece bu alanlara rasgele bir değer koydu. Kameranın görüş açısını elde etmeyi denediğimde benzer bir sorunla karşı karşıya kaldım. Muhtemelen aynı konuya sahipsin. Bir şey vermiyorlar. Onlar sadece piyasaya bir akıllı telefon koymak istiyor ve programcılar hakkında umurumda değil –

cevap

7

Yanıtı kendi sorumu bulduğum görülüyor.

documentation'u yeterince okumuştum, QUALITY_HIGH 1080p'ye eşdeğer değil, yalnızca aygıtın desteklediği en yüksek kaliteli profili belirtmenin bir yoludur. Bu nedenle, tanıma göre, CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH) her zaman doğrudur. Böyle bir şey yazdım:

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; 
} 

benim cihazların çoğu hala ben kuşkuluyum 1080p kodlama için destek bildiriyorsunuz, ancak ben Xperia Tipo (benim alt uç Test cihazındaki bu kodu koştum) ve bir videoBitRate 720Kb/s ile maksimum 480p kalitesini kodladı. 1080p -

Her cihaz güvenilebilir olup olmadığından emin değilim ama 17MB/s'ye 720KB/sn video bit hızlarına bir dizi görülen ve 480p gelen nitelikleri Profil gelmiş, söylediği gibi. Umarım diğer insanlar bu bilgiyi faydalı bulacaktır.

+0

Cevabımı geliştirmek için önerileriniz varsa lütfen bir yorum bırakın. –

+0

Tam açıklama: adogden ve ben aynı takımda çalışıyorum. Bu can sıkıcı sorunundan kurtulmamıza yardımcı olmak için bu soruya bir ödül verdim. Bu muhtemelen başka bir görünüm almak ve bu yararlı cevabı yazmak için adogden istedi. Ödül kazanmıştı ve temsilcisi transfer etmeksizin ona verdim. –

İlgili konular