2016-01-31 33 views
10

kullanarak ağır çekim videosunu yakalayan Android, Nexus 5x cihazımda ağır çekim videosu çekmeye çalışıyorum. Bu benim medya kaydedici yapılandırılması am nasıl:CamcorderProfile

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH); 

mMediaRecorder = new MediaRecorder(); 

// Step 1: Unlock and set camera to MediaRecorder 
mCamera.unlock(); 
mMediaRecorder.setCamera(mCamera); 

// Step 2: Set sources 
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

// Step 3: Set the high speed CamcorderProfile 
mMediaRecorder.setProfile(profile); 

// Step 4: Set output file 
// Step 5: Prepare media recorder 
// Step 6: Capture video 

sorundur, yakalanan videolar cihazım destekler 120 fps ağır çekim videolar değildir. Onlar sıradan 29 fps videosu. Bunlar normal kayıt profilleri gibi benzer, (( QUALITY_HIGH_SPEED_LOW gelen) QUALITY_HIGH_SPEED_2160P için aşağıda tanımlanan tüm yüksek hız profilleri için

:

I official documentation aşağıdaki bahsediyor olan this answer geçti Sadece daha yüksek çıkış kare hızı ve bit hızı ile, bu nedenle setProfile (CamcorderProfile) parametrelerini belirtmeden bu profillerin ayarlanması, ağır çekimden ziyade yüksek hızlı videolar üretecektir. Bu, Farklı çekim ve çıkış (oynatma) kare hızları. yavaş hareket video kayıt için, yavaş hareket faktörü göre video çıkış (çalma) kare hızını ve bit hızı uygun şekilde yoluyla setVideoFrameRate (int) ve setVideoEncodingBitRate (int) ayarlamak gerekir uygulaması. Uygulama MediaCodec enkoder ile video kayıt yapmayı planlıyorsa, MediaFormat'ın her bir alanını bu Kameraya göre aynı şekilde ayarlamanız gerekir.

I, setProfile zaten seçilmiş CamcorderProfile türetilen parametreler ile iki yöntem setVideoFrameRate ve setVideoEncodingBitRate çağırır Anlamadığım şey. Onları neden tekrar aramam gerekiyor? Burada neyi özlüyorum?

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. Hayatım boyunca bunu işe yaramayacağım!

DÜZENLEME: Öyle gibi yöntemleri çağırmadan denedi ama yine de normal hız videoyu yakalar:

mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4); 
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4); 

1/4 CamcorderProfile.QUALITY_HIGH_SPEED_HIGH tarafından reklamı kare hızı 120 olduğu ve bir yakalamak istediğiniz saniyede dilimlerinde 30 fps video belgesinde belirtildiği gibi here

halka int videoFrameRate API seviyesi 8

Eklenen hedef video çerçeve hızı ond. başvurunun diğer bir MediaRecorder kodlama parametreleri belirtmeden setProfile (CamcorderProfile) ile video kayıt yapılandırır halinde

Bu

saniyede hedef kaydedilen video çıkış çerçeve oranıdır. Örneğin, yüksek hızlı kalite profilleri için (QUALITY_HIGH_SPEED_LOW konumundan QUALITY_HIGH_SPEED_2160P), , bu, videonun kaydedildiği ve oynatıldığı kare hızıdır. Uygulama, yüksek hız kalitesi profilleri olan ile yavaş kullanımlı kullanım durumu oluşturmak istiyorsa, setVideoFrameRate (int) aracılığıyla istenilen çıkış (oynatma) kare hızına karşılık gelen farklı bir video karesi oranı ayarlamalıdır.QUALITY_HIGH_SPEED_720P CamcorderProfile içinde 240FPS videoFrameRate tanıtır ve eğer Örneğin, uygulama 1/8 faktör yavaş çekim kayıt videoları oluşturmak niyetinde setVideoFrameRate (int) ile 30fps ayarlamak gerekir uygulaması. başarısız olması, normal hızda çalma kare hızına sahip yüksek hızlı videolarla sonuçlanır (örneğin yukarıdaki 240 fps). Uygulama MediaCodec enkoder ile video kayıt yapmak niyetinde ise, bu bireysel MediaFormat bireysel alanı bu KameraProfiline göre benzer şekilde ayarlamalıdır.

+0

sadece bir tahmin, ama aslında 'setVideoFrameRate' aramaya çalıştım ve' elle setVideoEncodingBitRate'? Profilinizin gönderdiği değerleri kontrol ettiniz mi? – damian

+0

Evet @damian, ben hazırlamak hemen önce aşağıdaki çağrı: 'mMediaRecorder.setVideoEncodingBitRate (profile.videoBitRate/4);' 'mMediaRecorder.setVideoFrameRate (profile.videoFrameRate/4);' profil 'videoBitRate' olan' 27000000' ve 'videoFrameRate'' 120' – Siddharth

+0

Merhaba, @Siddharth. Buna bir çözüm buldunuz mu? Aynı problemi yaşıyorum. – flutillie

cevap

-1
mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW); 

veya

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH); 
+1

[doc] (https://developer.android.com/intl/es/reference/android/media/CamcorderProfile.html#QUALITY_HIGH_SPEED_HIGH) "CamcorderProfile.QUALITY_HIGH_SPEED_HIGH" değerinin "2001" olduğunu söylüyor. VideoFrameRate'i 2001 olarak ayarlayacağımı sanmıyorum. Cevabınızı detaylandırır mısınız? – Siddharth