2013-06-15 7 views
1

Comment puis-je mettre en pause une vidéo lors de l'enregistrement? J'ai lu que Android ne supporte pas cette fonction, mais la caméra vidéo par défaut sur le Samsung Galaxy S3 le fait parfaitement. Comment Samsung le fait-il?Enregistrer une vidéo avec une pause

+1

Je n'ai jamais utilisé l'enregistrement vidéo, mais peut-être qu'ils créent simplement un autre fichier après la reprise et quand l'enregistrement est terminé, ils les collent ensemble? – Lingviston

+3

Samsung, en tant que fabricant et éditeur d'une version Android, est assez libre d'ajouter des fonctionnalités non standard, qui peuvent être ou non disponibles pour d'autres développeurs et ne seront probablement pas disponibles pour les autres appareils. –

Répondre

2

L'enregistreur n'a pas la fonctionnalité Pause ce que vous avez à faire est d'enregistrer plusieurs vidéos et fusionné simplement.

class merge_video extends AsyncTask<String, Integer, String> { 

    @Override 
    protected void onPreExecute() { 
     progressDialog = ProgressDialog.show(Video.this, 
       "Preparing for upload", "Please wait...", true); 
     // do initialization of required objects objects here 
    }; 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      String paths[] = new String[count]; 
      Movie[] inMovies = new Movie[count]; 
      for (int i = 0; i < count; i++) { 
       paths[i] = path + filename + String.valueOf(i + 1) + ".mp4"; 
       inMovies[i] = MovieCreator.build(new FileInputStream(
         paths[i]).getChannel()); 
      } 
      List<Track> videoTracks = new LinkedList<Track>(); 
      List<Track> audioTracks = new LinkedList<Track>(); 
      for (Movie m : inMovies) { 
       for (Track t : m.getTracks()) { 
        if (t.getHandler().equals("soun")) { 
         audioTracks.add(t); 
        } 
        if (t.getHandler().equals("vide")) { 
         videoTracks.add(t); 
        } 
       } 
      } 

      Movie result = new Movie(); 

      if (audioTracks.size() > 0) { 
       result.addTrack(new AppendTrack(audioTracks 
         .toArray(new Track[audioTracks.size()]))); 
      } 
      if (videoTracks.size() > 0) { 
       result.addTrack(new AppendTrack(videoTracks 
         .toArray(new Track[videoTracks.size()]))); 
      } 

      BasicContainer out = (BasicContainer) new DefaultMp4Builder() 
        .build(result); 

      @SuppressWarnings("resource") 
      FileChannel fc = new RandomAccessFile(String.format(Environment 
        .getExternalStorageDirectory() + "/wishbyvideo.mp4"), 
        "rw").getChannel(); 
      out.writeContainer(fc); 
      fc.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     String mFileName = Environment.getExternalStorageDirectory() 
       .getAbsolutePath(); 
     mFileName += "/wishbyvideo.mp4"; 
     filename = mFileName; 
     return mFileName; 
    } 

    @Override 
    protected void onPostExecute(String value) { 
     super.onPostExecute(value); 
     progressDialog.dismiss(); 
     Intent i = new Intent(Video.this, VideoUpload.class); 
     i.putExtra("videopath", value); 
     i.putExtra("id", id); 
     i.putExtra("name", name); 
     i.putExtra("photo", photo); 
     startActivity(i); 
     finish(); 
     } 
} 

le nombre n'est que le nombre de fichiers vidéo.

le code ci-dessus pour fusionner plus de vidéo et envoyer le code final à une autre activité en ce que j'ai décidé de prévisualiser la vidéo. avant d'utiliser le code ci-dessus assurez-vous d'utiliser mp4parser lib

Questions connexes