2011-08-12 11 views
17

नहीं कहा जाता है। पूर्वावलोकनवॉलबैक कार्यान्वयन ऑनप्रैवफ्रेम को कैमरे को शुरू करने और पूर्वावलोकन शुरू करने के बाद समस्या के बिना कॉल किया जाता है (कैमरा.स्टार्टवेव())। समस्या यह है कि अगर मैं MediaRecorder पर MediaRecorder का उपयोग कर वीडियो रिकॉर्डिंग करता हूं तो पूर्वावलोकन फ़्रेम को और भी नहीं कहा जाता है।कैमरा ऑनपेव्यूफ्रेम को कैमरे का उपयोग करते समय

मैं समझता हूं कि वीडियो रिकॉर्ड करने के लिए MediaRecorder का उपयोग करते समय कैमरा बंद हो जाता है। पूर्वावलोकन Callback, लेकिन इसे पुनरारंभ क्यों नहीं किया जा सकता है?

मैंने कैमरा पूर्वावलोकन कॉलबैक (setPreviewCallback (कॉलबैक) को रीसेट करने का प्रयास किया है और स्टार्ट पूर्वावलोकन को पुनरारंभ करना है, लेकिन जब मेरे पास पूर्वावलोकन है, तो पूर्वावलोकन पर कोई कॉल नहीं है।

उत्तर

4

आप previewCallBacks के नए इन्स्टेन्शियशन() इंटरफ़ेस के भीतर यह बुलाना चाहिए जैसे

नीचे
public void surfaceCreated(SurfaceHolder holder) { 
     // if (mediaRecorder == null) { 
     try { 
      camera = Camera.open(); 
      camera.setPreviewCallback(new PreviewCallback() { 
       public void onPreviewFrame(byte[] _data, Camera _camera) { 
       } 
      } 
     } 
} 
1

आप startPreview() कॉल करने के लिए फिर से करने के बाद एक वीडियो या फोटो लिया गया था की जरूरत है।

12

आपको सतह पर सेटप्रेव्यूवॉलबैक कॉल करना होगा, न केवल सतह में, न केवल सतह में।

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
if (mHolder.getSurface() == null){ 
    return; 
} 

try { 
    mCamera.stopPreview(); 
} catch (Exception e){ 
    // ignore: tried to stop a non-existent preview 
} 

try { 
    mCamera.setPreviewCallback(this); 
    mCamera.setPreviewDisplay(mHolder); 
    mCamera.startPreview(); 

} catch (Exception e){ 
    Log.d(TAG, "Error starting camera preview: " + e.getMessage()); 
} 
} 
+0

धन्यवाद, यह मेरे लिए काम किया! – Austin

7

मुझे एक ही समस्या थी; देख

setOneShotPreviewCallback not hitting onPreviewFrame() in callback

मुझे क्या पता चला कि Camera#unlock() बुला MediaRecorder तैयार करने के लिए के बाद, यह पूर्वावलोकन कॉलबैक करने से पहले Camera#reconnect() कॉल करने के लिए जरूरी हो गया था था। ऐसा इसलिए है क्योंकि Camera.unlock()MediaRecorder से कनेक्ट करने के लिए प्रक्रिया से कैमरे को अलग करता है।

http://developer.android.com/reference/android/hardware/Camera.html#unlock()

मेरी जांच में मैं यह भी पता चला है, तो आप एक शॉट विधि के अलावा अन्य तरीकों का उपयोग कर किसी भी पूर्वावलोकन कॉलबैक निर्धारित करते हैं, आप Camera#reconnect() बुला रूप में अच्छी तरह के बाद इन सभी को पुनर्स्थापित करने के लिए है। तो, संक्षेप में:

mCamera.unlock(); 
//set up MediaRecorder 
mCamera.reconnect(); 
mCamera.setPreviewCallback(mCallback); 
//or whatever callback method you want to use 
//and even if you've set this callback already 

मुझे उम्मीद है कि इससे मदद मिलती है!

+0

यह मेरी समस्या हल हो गया। मैं 'रीकनेक्ट() 'के बजाय' लॉक()' को कॉल कर रहा था। –

संबंधित मुद्दे