对于使用jcodec的任何人,我的理解是该库还不能对音频进行编码(但它可以对其进行解码)。
然而,jcodec确实有PCMMP4MuxerTrack class,允许您在编码MP4视频时将原始PCM数据的 addSamples(ByteBuffer)添加到音频轨道。这会生成带声音的MP4视频文件。
我已经成功地将一些虚拟PCM音频添加到我导出的MP4文件中,并且VLC正常播放,所以它似乎有效......
但如果这样有效,为什么我一直看到人们说MP4不支持PCM音频(one source)?
我是否幸运的是,VLC正在准确播放带声音的MP4文件?它可能不适用于其他播放器/操作系统吗?
答案 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帧时都可以调用该函数。