Search in sources :

Example 1 with TsWriter

use of com.feeyo.mpeg2ts.TsWriter in project feeyo-hlsserver by variflight.

the class TsWriterTest method main.

public static void main(String[] args) {
    byte[] buf1 = readTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/ec6d6ac2-283c-4f86-bbb3-ea4e03a214bf.ts");
    // 
    TsReader tsReader = new TsReader();
    int frameLength = 0;
    int audioFrameLength = 0;
    int videoFrameLength = 0;
    Ts[] tsPackets = tsReader.parseTsPacket(buf1);
    for (int i = 0; i < tsPackets.length; i++) {
        Ts ts = tsPackets[i];
        if (ts instanceof Pes) {
            Pes pes = (Pes) ts;
            if (pes.payload_unit_start_indicator == 1) {
                frameLength++;
                if (pes.stream_id == Ts.AUDIO_STREAM_ID) {
                    audioFrameLength++;
                } else {
                    videoFrameLength++;
                }
            }
        }
    }
    // 
    FrameData[] frames = new FrameData[frameLength];
    int frameIdx = 0;
    int currentFrameIdx = 0;
    for (int i = 0; i < tsPackets.length; i++) {
        Ts ts = tsPackets[i];
        if (ts instanceof Pes) {
            Pes pes = (Pes) ts;
            if (pes.payload_unit_start_indicator == 1) {
                currentFrameIdx = frameIdx;
                frames[currentFrameIdx] = new FrameData();
                frames[currentFrameIdx].buf = append(frames[currentFrameIdx].buf, pes.es_data, 0, pes.es_data.length);
                frames[currentFrameIdx].dts = pes.dts;
                frames[currentFrameIdx].pts = pes.pts;
                frames[currentFrameIdx].isAudio = (pes.stream_id == Ts.AUDIO_STREAM_ID);
                frameIdx++;
            } else {
                frames[currentFrameIdx].buf = append(frames[currentFrameIdx].buf, pes.es_data, 0, pes.es_data.length);
            }
        }
    }
    TsWriter tsWriter1 = new TsWriter();
    byte[] tsFileBuf = tsWriter1.write(true, FrameDataType.MIXED, frames);
    // System.out.println( bytesToHexString( tsFileBuf, 0, tsFileBuf.length));
    // mix
    writeTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/test1.ts", tsFileBuf);
    int audioFrameIndex = 0;
    FrameData[] audioFrames = new FrameData[audioFrameLength];
    int videoFrameIndex = 0;
    FrameData[] videoFrames = new FrameData[videoFrameLength];
    for (int i = 0; i < frames.length; i++) {
        FrameData frame = frames[i];
        if (frame.isAudio) {
            audioFrames[audioFrameIndex] = frame;
            audioFrameIndex++;
        } else {
            videoFrames[videoFrameIndex] = frame;
            videoFrameIndex++;
        }
    }
    TsWriter tsWriter2 = new TsWriter();
    // long lastPts = 90000;
    // for(int i = 0; i < audioFrames.length; i++) {
    // 
    // long pts =  (90000L * 1024) / 8000;
    // AvStreamFrame frame = audioFrames[i];
    // lastPts += pts;
    // frame.pts = lastPts;
    // }
    byte[] tsFileBuf2 = tsWriter2.write(true, FrameDataType.AUDIO, audioFrames);
    writeTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/test2.ts", tsFileBuf2);
    TsWriter tsWriter3 = new TsWriter();
    byte[] tsFileBuf3 = tsWriter3.write(true, FrameDataType.VIDEO, videoFrames);
    writeTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/test3.ts", tsFileBuf3);
}
Also used : TsReader(com.feeyo.mpeg2ts.TsReader) TsWriter(com.feeyo.mpeg2ts.TsWriter) Ts(com.feeyo.mpeg2ts.Ts) Pes(com.feeyo.mpeg2ts.Pes) FrameData(com.feeyo.mpeg2ts.TsWriter.FrameData)

Example 2 with TsWriter

use of com.feeyo.mpeg2ts.TsWriter in project feeyo-hlsserver by variflight.

the class TsWriterTest2 method main.

public static void main(String[] args) {
    byte[] buf1 = readTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/10844.ts");
    // 
    TsReader tsReader = new TsReader();
    int frameLength = 0;
    Ts[] tsPackets = tsReader.parseTsPacket(buf1);
    for (int i = 0; i < tsPackets.length; i++) {
        Ts ts = tsPackets[i];
        if (ts instanceof Pes) {
            Pes pes = (Pes) ts;
            if (pes.payload_unit_start_indicator == 1) {
                frameLength++;
            }
        }
    }
    // 
    FrameData[] frames = new FrameData[frameLength];
    int frameIdx = 0;
    int currentFrameIdx = 0;
    for (int i = 0; i < tsPackets.length; i++) {
        Ts ts = tsPackets[i];
        if (ts instanceof Pes) {
            Pes pes = (Pes) ts;
            if (pes.payload_unit_start_indicator == 1) {
                currentFrameIdx = frameIdx;
                frames[currentFrameIdx] = new FrameData();
                frames[currentFrameIdx].buf = append(frames[currentFrameIdx].buf, pes.es_data, 0, pes.es_data.length);
                frames[currentFrameIdx].dts = pes.dts;
                frames[currentFrameIdx].pts = pes.pts;
                frames[currentFrameIdx].isAudio = (pes.stream_id == Ts.AUDIO_STREAM_ID);
                frameIdx++;
            } else {
                frames[currentFrameIdx].buf = append(frames[currentFrameIdx].buf, pes.es_data, 0, pes.es_data.length);
            }
        }
    }
    TsWriter tsWriter1 = new TsWriter();
    byte[] tsFileBuf = tsWriter1.write(true, FrameDataType.AUDIO, frames);
    // mix
    writeTsFile("/Users/zhuam/git/feeyo/feeyostreamhls/testdata/test222.ts", tsFileBuf);
}
Also used : TsReader(com.feeyo.mpeg2ts.TsReader) TsWriter(com.feeyo.mpeg2ts.TsWriter) Ts(com.feeyo.mpeg2ts.Ts) Pes(com.feeyo.mpeg2ts.Pes) FrameData(com.feeyo.mpeg2ts.TsWriter.FrameData)

Aggregations

Pes (com.feeyo.mpeg2ts.Pes)2 Ts (com.feeyo.mpeg2ts.Ts)2 TsReader (com.feeyo.mpeg2ts.TsReader)2 TsWriter (com.feeyo.mpeg2ts.TsWriter)2 FrameData (com.feeyo.mpeg2ts.TsWriter.FrameData)2