zoukankan      html  css  js  c++  java
  • MP4和MP3的合成

    目标,将MP3中的声音合成到MP4中去。

    采用的第三方库:MP4Parser,

    Muxing Audio/Video

    The API and the process is straight-forward:

    1. You wrap each raw format file into an appropriate Track object. 

      H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl("video.h264"));
      AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl("audio.aac"));
    2. These Track object are then added to a Movie object

      Movie movie = new Movie();
      movie.addTrack(h264Track);
      movie.addTrack(aacTrack);
    3. The Movie object is fed into an MP4Builder to create the container. 

      Container mp4file = new DefaultMp4Builder().build(movie);
    4. Write the container to an appropriate sink.

      FileChannel fc = new FileOutputStream(new File("output.mp4")).getChannel();
      mp4file.writeContainer(fc);
      fc.close();

    要求.h264文件和aac文件的作为“输入”, 输出为mp4格式。

    测试:使用MediaRecorder生成后缀为.H264的文件。测试可以在手机端播放。使用以上方法与一个aac文件合成。报错:

    java.lang.NullPointerException: Attempt to read from field 'int com.googlecode.mp4parser.h264.model.PictureParameterSet.seq_parameter_set_id' on a null object reference

    h264Track = new H264TrackImpl(new FileDataSourceImpl("/storage/emulated/0/DCIM/TestCamera/VID_2016.H264"));//报错行

    构造失败。谷歌该问题无果。

    查看mp4parser的issues:

    Combine a music.m4a on a video.mp4 overwrite my video audio

    mp4parser的作者回复:

    “Basically you want to merge two audio tracks to one. Players won't play two audio tracks at the same time. This is a use case that requires decoding, then merging and encoding into one audio track again. The MP4parser cannot do that. I guess you'll need to use ffmpeg or the MediaCodec API.”

    一句话,mp4parser做不到。

  • 相关阅读:
    springmvc,springboot单元测试配置
    uboot中ftd命令
    在根文件系统中查看设备树(有助于调试)
    协议类接口
    网络设备接口
    块设备驱动框架
    i2c子系统
    触摸屏
    input子系统
    原子访问、自旋锁、互斥锁、信号量
  • 原文地址:https://www.cnblogs.com/rockylearnstodevelop/p/5357675.html
Copyright © 2011-2022 走看看