jcodec可以将音频添加到MP4文件吗?

时间:2015-08-11 22:24:59

标签: java audio mp4 pcm jcodec

对于使用jcodec的任何人,我的理解是该库还不能对音频进行编码(但它可以对其进行解码)。

然而,jcodec确实有PCMMP4MuxerTrack class,允许您在编码MP4视频时将原始PCM数据的 addSamples(ByteBuffer)添加到音频轨道。这会生成带声音的MP4视频文件。

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

但如果这样有效,为什么我一直看到人们说MP4不支持PCM音频(one source)?

我是否幸运的是,VLC正在准确播放带声音的MP4文件?它可能不适用于其他播放器/操作系统吗?

1 个答案:

答案 0 :(得分:2)

我希望这有效,你告诉我..在java中打开一个AAC文件来读取它的字节

1)准备变量

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

2)现在将AAC文件流的前7个字节复制到这个"标题"阵列

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

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

提示:标题的前5个字节对于每个帧保持相同,因此您可以在整个文件中搜索该字节模式,以识别每个AAC帧的位置,如果您知道之前的框架的开始位置然后你也可以计算长度。

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