MP4ParserMergeAudioVideoを使用して、新しいオーディオをMP4ファイルに追加しています。ライブラリは.wavファイルを使用する.wavように指示していましたが、ディレクトリにファイルを保持し、オーディオファイルの名前を として指定するとexample.m4a、ファイルが見つからないという例外が発生します。そこで、ファイルを.m4a音声ファイルに変更しました。コードを以下に示します。
findViewById(R.id.append).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String root = Environment.getExternalStorageDirectory().toString();
Log.e("",""+root);
String audio = root + "/download/"+"mymovieaudio.m4a";
String video = root + "/download/"+"My_Movie.mp4";
String output = root + "/download/ouput.mp4";
mux(video, audio, output);
}
});
mux関数はこのようなものです
public boolean mux(String videoFile, String audioFile, String outputFile) {
Movie video;
try {
video = new MovieCreator().build(videoFile);
} catch (RuntimeException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
Movie audio;
try {
audio = new MovieCreator().build(audioFile);
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (NullPointerException e) {
e.printStackTrace();
return false;
}
Track audioTrack = audio.getTracks().get(0);
video.addTrack(audioTrack);
Container out = new DefaultMp4Builder().build(video);
FileOutputStream fos;
try {
fos = new FileOutputStream(outputFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
BufferedWritableFileByteChannel byteBufferByteChannel = new BufferedWritableFileByteChannel(fos);
try {
out.writeContainer(byteBufferByteChannel);
byteBufferByteChannel.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
output.mp4デバイスのダウンロード ディレクトリにファイルを正常に取得しました。問題は、オーディオがないことです。助けてください。前もって感謝します。