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
android与MP4Parser的合并问题_Android_Video_Mp4parser - Fatal编程技术网

android与MP4Parser的合并问题

android与MP4Parser的合并问题,android,video,mp4parser,Android,Video,Mp4parser,我有一个关于合并两个视频的问题。当我试图合并来自不同横向模式(左/右)的两个视频时,其中一个视频显示颠倒。我使用MP4Parser作为库来管理修剪和合并 protected void combineClips() throws IOException { MediaMetadataRetriever m = new MediaMetadataRetriever(); for (int i = 0; i < paths.size(); i++) { m

我有一个关于合并两个视频的问题。当我试图合并来自不同横向模式(左/右)的两个视频时,其中一个视频显示颠倒。我使用MP4Parser作为库来管理修剪和合并

   protected void combineClips() throws IOException {

    MediaMetadataRetriever m = new MediaMetadataRetriever();
    for (int i = 0; i < paths.size(); i++) {
        m.setDataSource(paths.get(i));
        if (Build.VERSION.SDK_INT >= 17) {
            String s = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
            if (Integer.valueOf(s) == 0) {
                isLeftLandscape = true;
            }
            if (Integer.valueOf(s) == 180) {
                isRightLandscape = true;
            }
        }
    }


    for (int i = 0; i < paths.size(); i++) {
        Movie tm = MovieCreator.build(paths.get(i));
        Log.d(TAG, files.size() + "files");
        files.add(tm);
    }

    if (isLeftLandscape && isRightLandscape) {
        for (int i = 0; i < paths.size(); i++) {
            m.setDataSource(paths.get(i));
            if (Build.VERSION.SDK_INT >= 17) {
                String s = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
                if (Integer.valueOf(s) == 0)
                {
              Log.d(TAG, "the rotation is " + s);
                    rotate(paths.get(i), i);
            }}
        }
    }

    List<Track> videoTracks = new ArrayList<Track>();
    List<Track> audioTracks = new ArrayList<Track>();
    for (Movie movie : files) {
        for (Track t : movie.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) {
        Log.d(TAG, String.valueOf(audioTracks.size()) + "audi");
        result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
    }
    if (videoTracks.size() > 0) {
        Log.d(TAG, String.valueOf(audioTracks.size()) + "vide");
        result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
    }


    Container out = new DefaultMp4Builder().build(result);
    String folder_main = "VidApp";
    File f = new File(Environment.getExternalStorageDirectory(), folder_main);
    if (!f.exists()) {
        f.mkdirs();
    }
    FileChannel fc = new RandomAccessFile(String.format(System.getenv("EXTERNAL_STORAGE") + "/VidApp" + "/output.mp4"), "rw").getChannel();
    out.writeContainer(fc);

    fc.close();
    while (!audioTracks.isEmpty()) {
        audioTracks.remove(0);
    }
    while (!videoTracks.isEmpty()) {
        videoTracks.remove(0);
    }
    while (!files.isEmpty()) {
        files.remove(0);
    }
}




public void rotate(String path, int position) throws IOException {
    IsoFile isoFile = new IsoFile(path);
    Movie m = new Movie();

    List<TrackBox> trackBoxes = isoFile.getMovieBox().getBoxes(
            TrackBox.class);

    for (TrackBox trackBox : trackBoxes) {

        trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_180);
        m.addTrack(new Mp4TrackImpl(trackBox));
    }
    Log.d(TAG, position + " of " + files.size());
    files.set(position, m);
}
protectedvoid combineClips()引发IOException{
MediaMetadataRetriever m=新的MediaMetadataRetriever();
对于(int i=0;i=17){
字符串s=m.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u VIDEO\u ROTATION);
if(整数值=0){
isLeftLandscape=true;
}
if(整数值=180){
isRightLandscape=true;
}
}
}
对于(int i=0;i=17){
字符串s=m.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u VIDEO\u ROTATION);
if(整数值=0)
{
Log.d(标记“旋转为”+s);
旋转(路径。获取(i),i);
}}
}
}
List videoTracks=new ArrayList();
List audioTracks=新建ArrayList();
用于(电影:文件){
for(曲目t:movie.getTracks()){
if(t.getHandler().equals(“soun”)){
添加(t);
}
if(t.getHandler().equals(“vide”)){
视频跟踪。添加(t);
}
}
}
电影结果=新电影();
如果(audioTracks.size()>0){
Log.d(TAG,String.valueOf(audioTracks.size())+“audi”);
result.addTrack(新的AppendTrack(audioTracks.toArray)(新的曲目[audioTracks.size()));
}
如果(videoTracks.size()>0){
Log.d(TAG,String.valueOf(audioTracks.size())+“vide”);
result.addTrack(新的AppendTrack(videoTracks.toArray)(新的Track[videoTracks.size()));
}
Container out=new DefaultMp4Builder().build(结果);
字符串文件夹\u main=“VidApp”;
文件f=新文件(Environment.getExternalStorageDirectory(),文件夹\u main);
如果(!f.exists()){
f、 mkdirs();
}
FileChannel fc=new RandomAccessFile(String.format(System.getenv(“外部_存储”)+“/VidApp“+”/output.mp4”),“rw”).getChannel();
out.writeContainer(fc);
fc.close();
而(!audioTracks.isEmpty()){
音频曲目。删除(0);
}
而(!videoTracks.isEmpty()){
删除(0);
}
而(!files.isEmpty()){
删除(0);
}
}
公共void rotate(字符串路径,int位置)引发IOException{
IsoFile IsoFile=新的IsoFile(路径);
电影m=新电影();
List trackbox=isoFile.getMovieBox().getbox(
TrackBox.class);
用于(轨迹盒轨迹盒:轨迹盒){
trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_180);
m、 addTrack(新的Mp4TrackImpl(trackBox));
}
Log.d(标记,“+files.size()的位置+”);
文件集(位置,m);
}