在android中使用单独分割的视频文件{used java for splitting}

时间:2016-06-15 11:27:21

标签: java android video

我正在开发一个Android项目,需要我将视频文件分成几个部分(比如每个5 MB),然后单独播放这些部分。 我已成功将视频分割成部分,但这些部分没有播放。(可能缺少播放器识别的一些播放属性)。 如果有人可以提供关于如何在代码的上下文中不合并(我的项目所必需)的方式来播放这些单独部分的解决方案。 PS。不能使用任何第三方软件制作Android应用程序。

这是我正在使用的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    final TextView textView = (TextView) findViewById(R.id.textView);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    textView.setText("Successfull");
                    splitFile(new File(Environment.getExternalStorageDirectory() + "/testing1/video.mp4"));
                }
            }
    );
}

public static void splitFile(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, ...

    int sizeOfFiles = 1024 * 1024 * 10;// 10MB
    byte[] buffer = new byte[sizeOfFiles];

    try (BufferedInputStream bis = new BufferedInputStream(
            new FileInputStream(f))) {//try-with-resources to ensure closing stream
        String name = f.getName();

        int tmp = 0;
        while ((tmp = bis.read(buffer)) > 0) {
            //write each chunk of data into separate file with different number in name
            File newFile = new File(f.getParent(), name + "."
                    + String.format("%03d", partCounter++)+".mp4");
            try (FileOutputStream out = new FileOutputStream(newFile)) {
                out.write(buffer, 0, tmp);//tmp is chunk size
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

它永远不会以这种方式工作。您实际上在做的只是将二进制文件拆分为多个部分。 mp4视频(或任何格式)视频的数据以特定格式编码,只是将文件分成几部分不会分割视频本身。它将使部件呈现不可读(读取:不可播放)。视频文件中的初始字节通常包含有关视频文件的元数据。你必须阅读有关MP4格式规范的内容,并且必须编写一个编码器/解码器(这不会是一杯茶)。

最好使用库分割视频文件。

答案 1 :(得分:1)

您只是将二进制文件拆分为多个部分。视频文件使用称为编解码器的程序以特殊格式编码。如果你想让你的块可以播放,你必须确保它们的格式正确,根据原始的编解码器。

也许您可以查看this之类的内容。它显示了如何使用ffmpeg将视频文件拆分为可播放的块。如果它在Android上可用,您也可以尝试使用它。