汇总Android视频录制中常见问题

2019-12-10 19:34:20王冬梅
private void rotateVideoFile(String sourceFilePath, int degree) {
    List<TrackBox> trackBoxes = getTrackBoxesOfVideoFileByPath(sourceFilePath);
    Movie rotatedMovie = getRotatedMovieOfTrackBox(trackBoxes);
    writeMovieToModifiedFile(rotatedMovie);
  }

通过mp4parser旋转视频主要分为三步:

(1)获取视频文件对应的TrackBoxes;

(2)根据TrackBoxes获取旋转后的Movie对象;

(3)将Movie对象写入文件。

private List<TrackBox> getTrackBoxesOfVideoFileByPath(String sourceFilePath) {
    IsoFile isoFile = null;
    List<TrackBox> trackBoxes = null;
    try {
      isoFile = new IsoFile(sourceFilePath);
      trackBoxes = isoFile.getMovieBox().getBoxes(TrackBox.class);
      isoFile.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return trackBoxes;
  }

private Movie getRotatedMovieOfTrackBox(List<TrackBox> trackBoxes) {
    Movie rotatedMovie = new Movie();
    // 旋转
    for (TrackBox trackBox : trackBoxes) {
      trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
      rotatedMovie.addTrack(new Mp4TrackImpl(trackBox));
    }
    return rotatedMovie;
  }

private void writeMovieToModifiedFile(Movie movie) {
    Container container = new DefaultMp4Builder().build(movie);
    File modifiedVideoFile = new File(videoFilePath.replace(".mp4", "_MOD.mp4"));
    FileOutputStream fos;
    try {
      fos = new FileOutputStream(modifiedVideoFile);
      WritableByteChannel bb = Channels.newChannel(fos);
      container.writeContainer(bb);
      // 关闭文件流
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    } 
  }

本文对Android视频录制中常见的问题进行了说明,希望对大家的学习有所帮助。



注:相关教程知识阅读请移步到Android开发频道。