package cn.org.hentai.jtt1078.test; import cn.org.hentai.jtt1078.codec.G711Codec; import cn.org.hentai.jtt1078.server.Jtt1078Decoder; import cn.org.hentai.jtt1078.util.ByteUtils; import cn.org.hentai.jtt1078.util.Packet; import java.io.FileInputStream; import java.io.FileOutputStream; /** * Created by matrixy on 2019/12/21. */ public class AudioTest { public static void main(String[] args) throws Exception { int len = -1; byte[] block = new byte[1024]; FileInputStream fis = new FileInputStream("e:\\test\\streaming.hex"); Jtt1078Decoder decoder = new Jtt1078Decoder(); G711Codec codec = new G711Codec(); FileOutputStream fos = new FileOutputStream("e:\\test\\fuckfuckfuck1111.pcm"); while ((len = fis.read(block)) > -1) { decoder.write(block, 0, len); while (true) { Packet p = decoder.decode(); if (p == null) break; int lengthOffset = 28; int dataType = (p.seek(15).nextByte() >> 4) & 0x0f; // 透传数据类型:0100,没有后面的时间以及Last I Frame Interval和Last Frame Interval字段 if (dataType == 0x04) lengthOffset = 28 - 8 - 2 - 2; else if (dataType == 0x03) lengthOffset = 28 - 4; if (dataType == 0x03) { byte[] pcmData = codec.toPCM(p.seek(lengthOffset + 2).nextBytes()); fos.write(pcmData); fos.flush(); } } } fos.close(); fis.close(); } }