中提到的爲其選擇容器。我更喜歡adts。
將有效載荷數據複製到一個足夠大的容器中,只需添加你的位。所以在網上淘了我的解決方案後,我工作的一些片斷到位
profile =(configParams[0]>>3)&0x1f;
frequency_index = (this.configParams[0]&0x7) <<1 | (this.configParams[1]>>7) &0x1;
channel_config = (this.configParams[1]>>3) &0xf;
int finallength = encoded_length + 7;
ENCodedByteArray[0] = (byte) 0xff;
ENCodedByteArray[1] = (byte) 0xf1;
ENCodedByteArray[2] = (byte) (((profile - 1) << 6) + (frequency_index << 2) +(channel_config >> 2));
ENCodedByteArray[3] = (byte) (((channel_config & 0x3) << 6) + (finallength >> 11));
ENCodedByteArray[4] = (byte)((finallength & 0x7ff) >> 3);
ENCodedByteArray[5] = (byte) (((finallength & 7) << 5) + 0x1f) ;
ENCodedByteArray[6] = (byte) 0xfc;
使用類似
byte chunkADTS[]=new byte[info.size + 7];
fillInADTSHeader(chunkADTS,info.size);
outputBuffers[bR].get(chunkADTS,7,info.size);
buffer.pushData(chunkADTS);
在Android 4.3及以上版本,你可以使用[MediaMuxer](http://developer.android .com/reference/android/media/MediaMuxer.html)將MediaCodec的輸出打包到MPEG-4容器中。作爲獎勵,當AAC包含在.MP4中時,它不需要每個數據包的ADTS標頭。我有一個快速n'髒的例子[這裏](https://github.com/OnlyInAmerica/HWEncoderExperiments/blob/audioonly/HWEncoderExperiments/src/main/java/net/openwatch/hwencoderexperiments/AudioEncoder.java)。 – dbro
你能提供一個更詳細的例子嗎?我想實施這個解決方案,但我不清楚它是如何融合在一起的。我正在下載AAC-ATDS音頻文件並嘗試在本地播放。如果我使用MediaCodec解碼器將aac解碼成PCM,然後將其饋送到音軌中,我可以在本地播放它。我寧願將其重新編碼爲可與常規媒體播放器一起播放的格式。 (我不知道爲什麼下載的文件上的ATDS標題不起作用,但我相信MediaCodec解碼器會去除它們;如果它們真的存在的話)。 – user1743524