Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mp4parser旋转并保存视频_Java_Video_Rotation_Mp4parser - Fatal编程技术网

Java mp4parser旋转并保存视频

Java mp4parser旋转并保存视频,java,video,rotation,mp4parser,Java,Video,Rotation,Mp4parser,在我的Android项目中,我需要将视频旋转90度。谷歌搜索之后,我停在了可以与Android集成的mp4parser。视频存储在设备上,也将保存在设备上(不确定是否使用其他名称,但这并不重要)。 以下是我正在使用的代码(由isoviewer-1.0-RC-35生成),但如果需要,我可以将库更改为2.0版: try { String inputVideoName = "path_to_a_video"; IsoFile out = new IsoFile(inputVide

在我的Android项目中,我需要将视频旋转90度。谷歌搜索之后,我停在了可以与Android集成的mp4parser。视频存储在设备上,也将保存在设备上(不确定是否使用其他名称,但这并不重要)。 以下是我正在使用的代码(由isoviewer-1.0-RC-35生成),但如果需要,我可以将库更改为2.0版:

try 
{
    String inputVideoName = "path_to_a_video";

    IsoFile out =  new IsoFile(inputVideoName);
    out.getMovieBox().getMovieHeaderBox().setMatrix(Matrix.ROTATE_90);

    File outputVideoName = new File("path_to_a_saved_processed_video");
    if (!outputVideoName.exists())
        outputVideoName.createNewFile();

    FileOutputStream fos = new FileOutputStream(outputVideoName);
    out.writeContainer(fos.getChannel());
    fos.close();
    out.close();
} 
catch (IOException e) {
    Log.e("test", "some exception", e);
}

该代码编译、运行和保存视频,但使用原始旋转,因此不会对其进行任何更改。怎么了?

这有帮助吗?另外,您不认为应该使用比Isoviewer更大的等参线吗

package com.googlecode.mp4parser;

import com.googlecode.mp4parser.authoring.Movie;
import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
import com.googlecode.mp4parser.util.Matrix;

import java.io.FileOutputStream; 
import java.io.IOException;


public class Rotate {
public static void main(String[] args) throws IOException {

    String f1 = AppendExample.class.getProtectionDomain().getCodeSource().getLocation().getFile() + "/1365070268951.mp4";

    Movie inMovie = MovieCreator.build(f1);
    inMovie.setMatrix(Matrix.ROTATE_90);

    new DefaultMp4Builder().build(inMovie).writeContainer(new FileOutputStream("output.mp4").getChannel());
}
}

代码看起来不错。我猜android播放器不支持旋转视频,只是忽略了电影标题中的矩阵。尝试使用VLC、mplayer或avplay播放输出文件(其中至少有一个应支持电影头转换矩阵)。最好使用这些播放器的最新版本。或者,您可以检查输出文件(可以使用十六进制编辑器手动检查,也可以使用mp4dump或类似工具检查),并检查输出文件转换矩阵是否符合您的预期。这会让您感到困惑。视频是在设备处于另一个方向时制作的。如果我使用vlc客户端查看视频(原始视频和旋转视频),它们会被旋转,但vlc是唯一显示旋转视频的播放器。问题是我使用ffmpeg库对该视频进行了修剪,之后我发现了与NDK集成的旋转问题。这是否意味着修剪操作不保存标题?我尝试使用ffmpeg对其进行旋转,但库中包含的版本不支持旋转。此外,我无法将库更新到项目中(这是我与NDK的第一次接触)。