2013-07-06 2 views
9

Voraussetzung:

Ich möchte eine App entwickeln, die Video Umkodierung mit Pause hat und Funktion wieder aufnehmen.

Ich habe versucht:

ich entwickelt habe, die App bis zu Umkodierung des Videos durch Oberflächenansicht verwenden.

Bereits Recherchiert:

Ich habe schon die ganze Website gesucht und auch like aber bis jetzt kann ich nicht die Lösung bekommen und , dass ich weiß, dass es keine Standardoption für Pause in Android ist und Video fortsetzen und durch das Zusammenführen des Videos können wir es auch erreichen.

Was ich brauche:

Bitte mir teilen, wenn es irgendein externes Plugin für sie verfügbar ist, leite mich, wie dies zu erreichen, wenn Sie bereits erreicht, und mir auch jede resouce teilen, die im Zusammenhang, wie zu fusionieren Video ..ich gesucht haben, aber keine richtige Ressource ich irgend etwas gesehen hatte, teilen Sie bitte, ob Sie finden ..Wie Pause hinzuzufügen und Funktion wieder aufnehmen, während Video Umkodierung in android

Antwort

5

Endlich finde ich die Antwort :)
i über Forschung ffmpeg es tiefer scheint ein nd einige Tage graben um ihn herum aber kann nicht
richtige Ressource für ffmepg bekommen und ich versuche, mp4parser lib zu verwenden und meine Anforderung erfolgreich abgeschlossen.

Code für mehrere Video-Merging

public class MergeVide 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(); 
     } 
} 


die Zählung ist nichts anderes als Videodatei Zahl.

der obige Code für mehr Video zusammenführen und senden Sie den endgültigen Code zu einer anderen Aktivität in dem ich beschlossen, das Video in der Vorschau.
vor der Verwendung des obigen Codes stellen Sie sicher, mp4parser lib verwenden.

+0

Hey Karthi, ich habe versucht, diesen Code zu verwenden. Es wirft Fehler und empfiehlt mir, mit DataSource zu werfen, nach dem Werfen wirft ClassCastException auf diese Zeile: inMovies [i] = MovieCreator.build ((DataSource) neue FileInputStream ( Pfade [i]). GetChannel()); Dann habe ich den Pfad ohne Kanal und FileInputStream ersetzt, da es auch direkte Zeichenketten akzeptiert, es fügt auch Video ein, aber es funktioniert nicht und es wird falsch verbunden. Kannst du mir sagen, dass die Version des Glases, die du benutzt hast, ich versuchen werde, sie zu ersetzen? Bitte sagen Sie mir auch, wie Sie DataSource nicht anwenden können. Bitte lass es mich wissen. Vielen Dank. – iabhi

+0

Nun, ich habe eine Ausnahme "java.io.IOException: Mp4TrackImpl {handler = 'vide'} kann nicht an Mp4TrackImpl {handler = 'vide'} angehängt werden, da sich ihre Beispielbeschreibungsfelder unterscheiden:" während des Hinzufügens. if (videoTracks.size()> 0) { Ergebnis.addTrack (new AppendTrack (videoTracks . ToArray (neuer Track [videoTracks.size()]))); } –

+0

@karthi können Sie uns sagen, was ist BasicContainer? – duggu