6

Ich habe versucht, nach einer besseren Lösung zu suchen, um die Videoaufnahme anzuhalten und fortzusetzen. Soweit ich weiß, erlaubt die Media Recorder-Klasse keine Pause während der Aufnahme für Android 4.3 oder niedriger.Pause ..... Option wie die Standard-Kamera-App?

Ich fand die mp4parser-Bibliothek, die mehrere Videodateien in eine Videodatei zusammenführen kann. Ich verwende die folgenden Gläser:

aspectjrt-1.7.3.jar

isoparser-1.0.6.jar

Das Problem ist es viel zu lange dauert, um sie miteinander zu verschmelzen . Zum Beispiel, 2-3 Video-Dateien, die rund 5 Minuten lang sind würde insgesamt mindestens 2 Minuten dauern, um sie zusammenzuführen !!

Die Standard-Kamera-App, die mit meinem Galaxy S3 und Note 2 geliefert wird, die die Pause-Option auf der Videoaufnahme haben. Ihre pausierten Videos benötigen weniger als 1 Sekunde, um die Zusammenführung abzuschließen.

Kann mir bitte jemand sagen, was ich hier falsch mache?

ich den Code unten bin mit den Videodateien zu fusionieren:

for (ArrayList<String> PathList : VideoList) { 
      VideoPathList = PathList; 
     } 

     for (String mMovie : VideoPathList) { 
      Movie movie = MovieCreator.build(mMovie); 
      MovieList.add(movie); 
     } 

     List<Track> videoTracks = new LinkedList<Track>(); 
     List<Track> audioTracks = new LinkedList<Track>(); 
     for (Movie mMovie : MovieList) { 
      for (Track t : mMovie.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 basicContainer = (BasicContainer) new DefaultMp4Builder().build(result); 

      final String FileLocation = (UserSavedDirectoryPATH + "/"); 
      final File DirectoryExistCheck = new File(FileLocation); 
      if(!DirectoryExistCheck.exists()) { 
       DirectoryExistCheck.mkdir(); 
      } 
      NewVideo = FileLocation + "Video " + ".mp4"; 

      FileChannel fileChannel = new FileOutputStream(new File(String.format(NewVideo))).getChannel(); 
      basicContainer.writeContainer(fileChannel); 
      fileChannel.close(); 
     } catch(Exception error) { } 
     GalleryAddNewVideo(NewVideo); 
     Delete_VideoPaths(VideoPathList); 

ich sehr schätzen für Ihre Hilfe,

Vielen Dank

Antwort

0

Vielleicht die Aufnahme in roh tun erhöhen die Leistung:

  1. Speichern Sie die Aufzeichnung in einer Raw-Datei (statt in einer codierten Forma t).
  2. Fügen Sie jedes Mal, wenn der Benutzer die Aufzeichnung fortsetzt, das Ende der gleichen Raw-Datei an.
  3. schließlich auf Anschlag, die RAW-Datei, um die gewünschte Format (mp4 oder was auch immer) konvertieren

Auf diese Weise würden Sie nicht mp4parser oder irgendetwas anderes benötigen, um die Videos zu verschmelzen.

+0

Vielen Dank für den Kommentar. Gibt es trotzdem einen Code, ein Sample oder einen Link? Vielen Dank –