package cn.org.hentai.jtt1078.flv; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Flv 音频封装编码 * author:zhouyili (11861744@qq.com) */ public class FlvAudioTagEncoder { public static final Logger log = LoggerFactory.getLogger(FlvAudioTagEncoder.class); public ByteBuf encode(AudioTag audioTag) throws Exception { ByteBuf buffer = Unpooled.buffer(); if (audioTag == null) return buffer; // buffer.writeInt(audioTag.getPreTagSize()); //----------------------tag header begin------- buffer.writeByte(8); buffer.writeMedium(audioTag.getTagDataSize()); buffer.writeMedium(audioTag.getOffSetTimestamp() & 0xFFFFFF); buffer.writeByte(audioTag.getOffSetTimestamp() >> 24); buffer.writeMedium(audioTag.getStreamId()); //---------------------tag header length 11--------- //---------------------tag header end---------------- byte formatAndRateAndSize = (byte) (audioTag.getFormat() << 4 | audioTag.getRate() << 2 | audioTag.getSize() << 1 | audioTag.getType()); //-------------data begin------- buffer.writeByte(formatAndRateAndSize); buffer.writeBytes(audioTag.getData()); //-------------data end ------- buffer.writeInt(buffer.writerIndex());//应该等于11+tagDataSize return buffer; } }