关于Java:jcodec可以将音频添加到MP4文件吗?

Can jcodec add audio to MP4 file?

对于有使用jcodec经验的任何人,我的理解是该库尚无法编码音频(但是可以对其进行解码)。

但是,jcodec确实具有PCMMP4MuxerTrack类,该类允许您在编码MP4视频时将原始PCM数据的SampleSamples(ByteBuffer)添加到音轨。这样会产生带有声音的MP4视频文件。

我已经成功地将一些虚拟PCM音频添加到了我导出的MP4文件中,并且VLC正常播放了它,所以它似乎可以正常工作...

但是,如果这行得通,为什么我总是看到人们说MP4不支持PCM音频(一个来源)?

我是否很幸运VLC可以准确地播放带声音的MP4文件?它可能无法在其他播放器/操作系统上运行吗?


我希望这能奏效,您告诉我。.在Java中打开一个AAC文件以读取其字节

1)准备变量

1
2
int frameLength;
byte[] header = new byte[7]; //a byte array of 7 slots

2)现在将AAC文件流的前7个字节复制到此"标头"数组中。

1
2
3
frameLength = (header[3]&0x03) << 11 |
              (header[4]&0xFF) << 3 |
              (header[5]&0xFF) >> 5 ;

3)从AAC的第8个字节开始,您可以复制所有字节,直到FrameLength减7。我们减去7,因为提取的FrameLength包含AAC报头(称为ADTS报头)的7个字节,在MP4中您有声音减去ADTS标头,因此每个帧副本都必须跳过这7个字节。

提示:标头的前5个字节在每个帧中保持不变,因此您可以在整个文件中搜索该字节模式以标识每个AAC帧的位置,如果您知道该帧的开始位置,则可以工作长度也要。

现在您有了一个AAC帧,您可以尝试使用具有功能addFrame(MP4Packet pkt)的FramesMP4MuxerTrack.java,其中MP4Packet pkt是您复制的AAC帧字节。每次找到新的AAC框架时,就调用该函数。