2016-01-31 10 views
10

का उपयोग कर एंड्रॉइड कैप्चरिंग धीमी गति वीडियो कैप्चरिंग मैं अपने नेक्सस 5x पर धीमी गति वीडियो कैप्चर करने की कोशिश कर रहा हूं। यह मैं कैसे मीडिया रिकॉर्डर को विन्यस्त कर रहा हूँ:कैमकॉर्डरप्रोफाइल

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 

समस्या है, पर कब्जा कर लिया वीडियो 120 fps धीमी गति वीडियो है कि मेरे डिवाइस का समर्थन करता है नहीं कर रहे हैं। वे नियमित 29 एफपीएस वीडियो हैं।

मैं this answer माध्यम से चला गया है, जो official documentation में निम्नलिखित के बारे में बात:

सभी उच्च गति से नीचे (( QUALITY_HIGH_SPEED_LOW से QUALITY_HIGH_SPEED_2160P करने के लिए) परिभाषित प्रोफ़ाइल के लिए, वे इसी तरह के सामान्य रिकॉर्डिंग प्रोफाइल के रूप कर रहे हैं, केवल उच्च आउटपुट फ्रेम दर और बिट दर के साथ। इसलिए, इन प्रोफाइल को सेटप्रोफाइल (कैमकॉर्डरप्रोफाइल) के साथ सेट करना किसी भी अन्य एन्कोडिंग को निर्दिष्ट किए बिना पैरामीटर धीमी गति वीडियो के बजाय उच्च गति वाले वीडियो का उत्पादन करेगा ई अलग कैप्चर और आउटपुट (प्लेबैक) फ्रेम दर। धीमी गति वीडियो रिकॉर्ड करने के लिए, आवेदन वीडियो आउटपुट (प्लेबैक) फ्रेम दर और बिट दर उचित रूप से के माध्यम से setVideoFrameRate (पूर्णांक) और setVideoEncodingBitRate (int) धीमी गति कारक के आधार पर सेट करना होगा। यदि एप्लिकेशन MediaCodec एन्कोडर के साथ वीडियो रिकॉर्डिंग करने का इरादा रखता है, तो उसे इस कैमकॉर्डर प्रोफाइल के अनुसार मीडियाफॉर्मैट के प्रत्येक व्यक्तिगत फ़ील्ड को सेट करना होगा।

बात यह है कि मैं है, setProfile पहले से ही दो तरीकों setVideoFrameRate और चुने हुए CamcorderProfile से प्राप्त मानकों के साथ setVideoEncodingBitRate कॉल नहीं मिलता है। मुझे उन्हें फिर से कॉल करने की आवश्यकता क्यों है? मुझे यहां क्या समझ नहीं आ रहा है?

किसी भी मदद की सराहना की जाएगी। मेरे जीवन के लिए, मैं इसे काम करने के लिए नहीं मिल सकता!

संपादित करें: मैं तो जैसे तरीकों बुला की कोशिश की है लेकिन यह अभी भी सामान्य गति वीडियो कैप्चर करता है:

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

1/4 के बाद से CamcorderProfile.QUALITY_HIGH_SPEED_HIGH द्वारा विज्ञापित फ्रेम दर 120 है और मैं एक पर कब्जा करना चाहते हैं 30 एफपीएस वीडियो के रूप में दस्तावेज़ में कहा गया है here

सार्वजनिक पूर्णांक videoFrameRate

एपीआई स्तर 8 में जोड़ा गया लक्ष्य वीडियो फ्रेम प्रति सेकंड फ्रेम में दर दूसरी।

यह प्रति सेकंड लक्ष्य दर्ज की गई वीडियो आउटपुट फ्रेम दर यदि आवेदन किसी अन्य MediaRecorder एन्कोडिंग मानकों निर्दिष्ट किए बिना setProfile (CamcorderProfile) के माध्यम से वीडियो रिकॉर्डिंग कॉन्फ़िगर करता है। उदाहरण के लिए, उच्च गति गुणवत्ता प्रोफाइल (QUALITY_HIGH_SPEED_LOW से QUALITY_HIGH_SPEED_2160P तक), यह फ्रेम दर है जहां वीडियो रिकॉर्ड किया गया है और के साथ खेला गया है। यदि एप्लिकेशन के साथ धीमी गति उपयोग केस बनाने का इरादा रखता है तो उच्च गति गुणवत्ता प्रोफाइल, इसे एक अलग वीडियो फ्रेम दर सेट करना चाहिए जो वांछित आउटपुट (प्लेबैक) फ्रेम दर से सेटVideoFrameRate (int) के अनुरूप है।उदाहरण के लिए, यदि QUALITY_HIGH_SPEED_720P कैमकॉर्डरप्रोफाइल में 240fps वीडियो फ्रेम फ्रेम का विज्ञापन करता है, और एप्लिकेशन 1/8 कारक धीमी गति रिकॉर्डिंग वीडियो बनाने का इरादा रखता है, एप्लिकेशन को सेटविडियोफ्रेमरेट (int) के माध्यम से 30fps सेट करना होगा। करने के लिए असफल इतना सामान्य गति प्लेबैक फ्रेम दर (ऊपर के उदाहरण के लिए 240fps) के साथ उच्च गति वीडियो में परिणाम होगा है। यदि एप्लिकेशन का इरादा मीडियाकोडेक एन्कोडर के साथ वीडियो रिकॉर्डिंग करता है, तो इसे मीडियाफॉर्मैट के व्यक्तिगत फ़ील्ड को इस कैमकॉर्डरप्रोफाइल के अनुसार सेट करना होगा।

+0

बस एक अनुमान है, लेकिन आप वास्तव में 'setVideoFrameRate' फोन करने की कोशिश की थी और' मैन्युअल setVideoEncodingBitRate'? क्या आपने अपनी प्रोफ़ाइल सबमिट करने वाले मानों की जांच की है? – damian

+0

हाँ @damian, मैं फोन बस से पहले निम्न तैयार: 'mMediaRecorder.setVideoEncodingBitRate (profile.videoBitRate/4);' ' mMediaRecorder.setVideoFrameRate (profile.videoFrameRate/4);' प्रोफ़ाइल 'videoBitRate' है' 27000000' और '' videoFrameRate' 120' – Siddharth

+0

हाय, @Siddharth है। क्या आपने कभी इसका समाधान निकाला है? मुझे भी यही समस्या हो रही है। – flutillie

उत्तर

-1
mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW); 

या

mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH); 
+1

[डॉक्टर] (https://developer.android.com/intl/es/reference/android/media/CamcorderProfile.html#QUALITY_HIGH_SPEED_HIGH) कहता है कि 'कैमकॉर्डरप्रोफाइल.QUALITY_HIGH_SPEED_HIGH' का मान' 2001' है। मुझे संदेह है कि मैं 2001 के रूप में वीडियो फ्रेम नाम सेट कर सकता हूं। क्या आप अपना जवाब विस्तृत कर सकते हैं? – Siddharth