Requisito:
voglio sviluppare un app che ha ricodifica video con pausa e riprendere la funzione.
ho provato:
ho sviluppato l'applicazione fino ricodifica il video utilizzando la visualizzazione della superficie.
già eseguito tutte le ricerche:
Ho già cercato in tutto il sito e anche like ma fino ad ora non riesco a ottenere la soluzione e che so non v'è alcuna opzione di default in Android per la pausa e riprendi video e anche conoscendo unendo il video possiamo realizzarlo.
cosa ho bisogno:
prega di condividere me se non v'è alcun plugin esterno ad esso, mi guida come raggiungere questo obiettivo se si dispone già raggiunto, e mi ha anche condividere qualsiasi resouce che si è riferito a come per unire il video ..i hanno cercato, ma senza risorse corretto che avevo visto si prega di condividere qualsiasi cosa se si trova ..Come aggiungere mettere in pausa e riprendere la funzione, mentre ricodifica video nel Android
9
A
risposta
5
Finalmente trovo la risposta :)
ho una ricerca sulla ffmpeg sembra più a fondo un e qualche giorno in più scavando intorno a esso ma non posso ottenere la risorsa giusta
per ffmepg e provo a usare mp4parser lib e ho completato con successo il mio requisito.
Codice per la fusione multipla Video
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();
}
}
il conteggio non è altro che il numero di file di video.
il codice precedente per unire più video e inviare il codice finale a un'altra attività in cui ho deciso di visualizzare l'anteprima del video.
prima di utilizzare il codice precedente, assicurarsi di utilizzare mp4parser lib.
Hey Karthi, ho provato a usare questo codice. Genera errore e mi consiglia di eseguire il cast con DataSource, dopo averlo lanciato genera ClassCastException su questa riga: inMovies [i] = MovieCreator.build ((DataSource) nuovo FileInputStream ( percorsi [i]). GetChannel()); Poi ho sostituito il percorso senza canale e FileInputStream in quanto accetta anche file di stringhe dirette, ma anche i video, ma non riesce a giocare e si unisce in modo errato. Puoi dirmi la versione del barattolo che hai usato cercherò di sostituire con quello. Inoltre, per favore dimmi come non lanciare DataSource. Gentilmente fammi sapere. Grazie. – iabhi
Bene ho ottenuto un'eccezione "java.io.IOException: impossibile aggiungere Mp4TrackImpl {handler = 'vide'} a Mp4TrackImpl {handler = 'vide'} poiché le loro caselle Descrizione del campione differiscono:" durante l'aggiunta di questo. se (videoTracks.size()> 0) { risultato.addTrack (nuovo AppendTrack (videoTracks .toArray (new Track [videoTracks.size()]))); } –
@karthi puoi dirci cos'è BasicContainer? – duggu