Javaコードで特定のサイズのビデオのパーティションを作成したい。たとえば、サイズが20 mbのビデオを考えてみましょう。それぞれ、5mbのピースが必要です。つまり、4つのパーツを取得します。以下のコードを使用しましたが、.MP4ファイルのみを作成し、ビデオファイルは作成しません。
public static void divideFile(File f) {
int partCounter = 1;//I like to name parts from 001, 002, 003,
//you can change it to 0 if you want 000, 001,003
int sizeOfFiles = 1024 * 1024;// 1MB
byte[] buffer = new byte[sizeOfFiles];
String fileName = f.getName();
//try-with-resources to ensure closing stream
try (FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis)) {
int bytesAmount = 0;
while ((bytesAmount = bis.read(buffer)) > 0) {
//write each chunk of data into separate file with different number in name
String filePartName = String.format("%s.%03d", fileName, partCounter++);
File newFile = new File(f.getParent(), filePartName);
try (FileOutputStream out = new FileOutputStream(newFile)) {
out.write(buffer, 0, bytesAmount);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
各パートを再生可能なビデオ自体にする必要があると思います。この場合、プレーヤーが適切に処理できるように、各パートには正しいメタデータヘッダーが必要です。
ビデオをバイト単位で分割すると、どのチャンクにもメタデータが存在しないか、正しくないことを意味します。
次のコマンド(mp4の場合)を使用して、ffmpegを使用してこれを正しく行うことができます。
ffmpeg -I videoPath -ss startTime -t endTime -c copy outputVideoChunk.mp4
Androidアプリ内でffmpegを使用する方法はいくつかありますが、最も簡単な方法の1つは、次のような十分にサポートされているラッパーライブラリを使用することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加