5

मैं उस वीडियो को देखना चाहता हूं जिसे मैं वर्तमान में एक SurfaceView में रिकॉर्ड कर रहा हूं और यदि रिकोडिंग समाप्त हो गया है तो मैं उसी SurfaceView में वीडियो को फिर से चलाने के लिए चाहता हूं। भले ही मैंने सोचा कि यह ऐप्स में एक आम विशेषता होगी, मुझे कोई उदाहरण नहीं मिला और मेरा कोड काम नहीं कर सका।एंड्रॉइड: उसी सतह दृश्य में वीडियो रिकॉर्ड और चलाएं

private void prepareRecorder() { 
try { 
    recorder = new MediaRecorder(); 
    recorder.setPreviewDisplay(holder.getSurface()); 

    camera.unlock(); 
    recorder.setCamera(camera); 

    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

    camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW); 
    recorder.setProfile(camcorderProfile); 

    File newFile = new File(videoFilePath); 

    recorder.setOutputFile(newFile.getAbsolutePath()); 

    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
}catch(Exception e){ 
    releaseCamera(); 
} 
} 

//

public void onClick(View v) { 


    if(mediaPlayer!=null) { 
     mediaPlayer.reset(); 
     mediaPlayer.release(); 
    } 
    mediaPlayer = new MediaPlayer(); 



    try { 
     mediaPlayer.setDataSource(videoFile.getAbsolutePath()); 
     SurfaceView surfaceView = (SurfaceView) getView().findViewById(R.id.videoInvitationFragSurfaceView); 

     mediaPlayer.setSurface(surfaceView.getHolder().getSurface()); 
     mediaPlayer.prepareAsync(); 
     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mediaPlayer) { 
       mediaPlayer.start(); 
      } 
     }); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

मैं बस, वीडियो मेरी कोड काम करता है रिकॉर्ड अगर सिर्फ वीडियो यह रूप में अच्छी तरह से काम करता है खेलते हैं। कोई विचार?

अग्रिम धन्यवाद

संपादित करें: एक मौजूदा समाधान के रूप में मैं दो SurfaceViews और "छिपाएँ" उन्हें (सेट 0 करने के लिए आकार) यदि

+0

मैं एक ही मुद्दा हो रहा है, किसी भी नए समाधान या सिर्फ कामकाज? क्या आप अपना पूरा कोड भी दिखा सकते हैं, कृपया किस पर क्लिक करें? – Lion789

+0

मैं अभी भी दो सतहदृश्यों के साथ कामकाज का उपयोग कर रहा हूं। जब मैं प्ले बटन पर क्लिक करता हूं तो मैं Surfaceview.setFixedSize (0,0) के माध्यम से पहली सतहदृश्य को छोटा करता हूं और दूसरे को उसी तरीके से विस्तारित करता हूं – AljoSt

उत्तर

0

मैं सिर्फ वीडियो मेरे कोड काम करता है रिकॉर्ड यदि आवश्यक हो उपयोग करते हैं, अगर सिर्फ वीडियो चलाएं तो यह भी काम करता है। कोई विचार?

जितना मैं समझता हूँ, आप एक ही सतह देखने के बाद ही इसे नष्ट कर दिया और पुनर्जीवित कर रहा है पुन: उपयोग कर सकते हैं, यानी आप एक ही SurfaceView का पुन: उपयोग कर सकते हैं के बाद ही surfaceDestroyed() कहा जाता है और उसके बाद surfaceCreated() इस के बाद ही कहा जाता है को नष्ट करने और चक्र आप कर सकते हैं बनाने के SurfaceView का पुन: उपयोग करें।

हासिल करने के लिए यह सब आपको क्या करना है यह है: के बाद वीडियो रिकॉर्डिंग है जो दृश्य को surfaceDestroyed() कॉल बैक और फिर से सेट SurfaceView दृश्यता सुनिश्चित करेगा जो कि शुरू वीडियो प्लेबैक के बाद surfaceCreated() फोन करेगा चला गया करने के लिए सेट SurfaceView दृश्यता किया जाता है।

यह बहुत बोझिल प्रक्रिया तो मैं निम्नलिखित तरीके से रिकॉर्डिंग और प्लेबैक के लिए एक ही SurfaceView प्रयोग किया जाता है:

  1. जब गतिविधि की जांच बनाई गई है अगर videofile आशय

  2. में उपलब्ध है यदि हाँ के लिए SurfaceView का उपयोग प्लेबैक

  3. अब

    उपयोगकर्ता वीडियो पुनः आरंभ गतिविधि मिटा दिया है तो

  4. videofile के रूप में एक बार रिकॉर्डिंग से किया जाता है और उपयोगकर्ता प्लेबैक करने के लिए आशय में संलग्न videofile जानकारी के साथ वीडियो पुनः आरंभ गतिविधि चाहते

  5. रिकॉर्डिंग के लिए आशय उपयोग SurfaceView में नहीं पाया जाता

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