1

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

但是,jcodec 确实有一个PCMMP4MuxerTrack 类,它允许您在编码 MP4 视频时将原始 PCM 数据的样本(字节缓冲区)添加到音轨。这会产生一个带声音的 MP4 视频文件。

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


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

我很幸运 VLC 可以准确地播放我的 MP4 文件吗?它可能不适用于其他播放器/操作系统吗?

4

1 回答 1

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 标头(称为 ADTS 标头)的 7 个字节,而在 MP4 中,您有声音减去 ADTS 标头所以每个帧副本都必须跳过这 7 个字节。

提示:每个帧的头的前 5 个字节保持相同,因此您可以在整个文件中搜索该字节模式以识别每个 AAC 帧的位置,如果您知道之前帧的起始位置,那么您也可以计算出长度.

现在你有一个 AAC 帧,你可以尝试使用FramesMP4MuxerTrack.java,它有一个函数 addFrame(MP4Packet pkt)MP4Packet pkt你复制的 AAC 帧字节。每次找到新的 AAC 帧时调用该函数。

于 2015-08-12T19:48:05.637 回答