首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -> AAC = M4A与MPEG2 2-TS

Android -> AAC = M4A与MPEG2 2-TS
EN

Stack Overflow用户
提问于 2014-09-03 13:39:36
回答 1查看 1.6K关注 0票数 0

如何将原始AAC-数据打包到MPEG2 2-TS流中?

我是连续录制(麦克风)和压缩PCM-音频在Android到AAC:

代码语言:javascript
复制
    encoder = MediaCodec.createEncoderByType("audio/mp4a-latm");
    MediaFormat format = new MediaFormat();
    format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");
    format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 2);
    format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100);
    format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);
    format.setInteger(MediaFormat.KEY_AAC_PROFILE,
            MediaCodecInfo.CodecProfileLevel.AACObjectLC);
    encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

由于这会产生一个原始的、无头的AAC,我还为每个帧添加了所需的MPEG头:

代码语言:javascript
复制
    private void addADTStoPacket(byte[] packet, int packetLen) {
    int profile = 2; // M4A LC
                        // 39=MediaCodecInfo.CodecProfileLevel.AACObjectELD;
    int freqIdx = 4; // 44.1KHz
    int chanCfg = 2; // CPE

    // fill in ADTS data
    packet[0] = (byte) 0xFF;
    packet[1] = (byte) 0xF9;
    packet[2] = (byte) (((profile - 1) << 6) + (freqIdx << 2) + (chanCfg >> 2));
    packet[3] = (byte) (((chanCfg & 3) << 6) + (packetLen >> 11));
    packet[4] = (byte) ((packetLen & 0x7FF) >> 3);
    packet[5] = (byte) (((packetLen & 7) << 5) + 0x1F);
    // packet[6] = (byte) 0xFC;
    packet[6] = (byte) 0x00;// number of frames = 1;
}

这是很好的工作,我可以播放创建的AAC-文件。与VLC或谷歌音乐播放器。

现在我的问题是:

我想把编码的数据作为HTTP实时流(HLS)发送到一些渲染器,就像我已经在使用WAV和MP3-流一样。

但是如果我把它发送到一个Android应用程序中,流就不会开始播放,直到我中断录音,并为此冲洗/完成流。MP3没有问题,这里的回放是在几秒钟后开始的。

对于Android的"支持的媒体类型"-page,HLS只支持

HTTP/HTTPS直播流草稿协议:MPEG-2ts媒体文件

谁能告诉我,如何将原始的AAC-流封装成MPEG-2 TS流而不是像现在这样的MPEG4流?

我是这方面的新手,请原谅我的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 18:59:36

你可以回答你自己的问题。您需要将ADTS版本设置为MPEG2,而不是MPEG4。packet[1] = (byte) 0xF1;

另外,除非您知道缓冲区满值,否则packet[6] = (byte) 0xFC;是正确的。

请参阅这里的更多内容:http://wiki.multimedia.cx/index.php?title=ADTS

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25645906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档