Как я могу упаковать необработанные данные AAC в поток MPEG2-TS?
Я непрерывно перекодирую (микрофон) и сжимаю PCM-аудио внутри Android в AAC:
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 для каждого кадра:
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 или Google Music Player.
Теперь мой вопрос:
Я хотел бы отправить закодированные данные в виде HTTP LIVE STREAM (HLS) некоторым рендерерам, как будто я уже делаю это с WAV и MP3-потоками.
Но если я отправляю его в Android-приложение, поток не начинает воспроизводиться, пока я не прерву запись и, следовательно, не сброшу / не завершу поток. С МР3 проблем нет, здесь воспроизведение начинается через секунды.
Что касается страницы "Поддерживаемые типы мультимедиа" Android, HLS - это только поддерживается на
Черновик протокола прямой трансляции HTTP / HTTPS: только медиафайлы MPEG-2 TS
Кто подскажет, как упаковать необработанный AAC-поток в TS-поток MPEG-2, а не в MPEG4-поток, как сейчас?
Я новичок в этой области, прошу прощения за ошибки.