Повернуть видео с Mp4parser

мне нужно повернуть видео, чтобы настроить некоторые из моих потребностей. Я объясню подробности в следующем списке.

Я создаю приложение Vine like. Мне нужно записать видео, а потом объединить все части в один файл. Я делаю это без проблем в приложении для Android, используя библиотеку mp4 parser с последней версией 1.0-RC-26, используя пример, приведенный на их сайте:здесь

пример добавления видео отлично работает, если все видео имеют одинаковое но я обнаружил некоторые проблемы с записью видео с передней камеры, поэтому быстрым решением было установить запись ориентации видео на 270. Плохая часть этого решения заключается в том, что сегмент с этой ориентацией появляется с неправильной ориентацией на объединенном видео.

мое возможное решение - повернуть видео, чтобы применить то, что мне нужно в разных ситуациях, но у меня нет рабочего примера с моим кодом. Поиск в Интернете я нашел решения, как это один здесь. Проблема с этим кодом заключается в том, что он несовместим с последней версией (это дает ошибку компиляции) . Я тоже пытался понять логику библиотеки, но у меня нет результатов. Например, я экспериментировал с использованием setMatrix инструкция по объекту Movie, но она просто не работает.

public static void mergeVideo(int SegmentNumber) throws Exception {

    Log.d("PM", "Merge process started");
     Movie[] inMovies = new Movie[SegmentNumber]   ;
     //long[] Matrix = new long[SegmentNumber];

     for (int i = 1 ; i <= SegmentNumber; i++){
         File file =  new File(getCompleteFilePath(i));
         if (file.exists()){
             FileInputStream fis = new FileInputStream(getCompleteFilePath(i));
             //Set rotation I tried to experiment with this instruction but is not working
             inMovies [i-1].setMatrix(Matrix.ROTATE_90);
             inMovies [i-1] = MovieCreator.build(fis.getChannel());

             Log.d("PM", "Video " + i  + " merged" );
         }

         //fis.close();
     }


        List<Track> videoTracks = new LinkedList<Track>();
        List<Track> audioTracks = new LinkedList<Track>();

        for (Movie m : inMovies) {
            for (Track t : m.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) {
            result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
        }
        if (videoTracks.size() > 0) {
            result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
        }

        Container out = new DefaultMp4Builder().build(result);

        //out.getMovieBox().getMovieHeaderBox().setMatrix(Matrix.ROTATE_180); //set orientation, default merged video have wrong orientation
        // Create a media file name
        //
        String filename =  getCompleteMergedVideoFilePath()  ;

        FileChannel fc = new RandomAccessFile(String.format(filename), "rw").getChannel();
        out.writeContainer(fc);
        fc.close();


        //don't leave until the file is on his place
        File file = new File (filename);
        do {
            if (! file.exists()){
                Log.d("PM", "Result file not ready");
            }
       } while (! file.exists() );
       //
        Log.d("PM", "Merge process finished");
}

кто-то повернул видео с самой последней версией парсера Mp4? Английский не является моим родным языком, поэтому я приношу извинения за любую грамматическую ошибку.

1 ответов


for (int i = 1; i <= SegmentNumber; i++) {

    IsoFile isoFile = new IsoFile(getCompleteFilePath(i));
    Movie m = new Movie();

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

    for (TrackBox trackBox : trackBoxes) {
        trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
        m.addTrack(new Mp4TrackImpl(trackBox));
    }

    inMovies[i - 1] = m;
}

Это то, что я сделал, чтобы повернуть видео.