/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.container.test; import org.apache.log4j.Logger; import org.junit.Test; import com.ttProject.container.IContainer; import com.ttProject.container.IReader; import com.ttProject.container.flv.FlvHeaderTag; import com.ttProject.container.flv.FlvTagWriter; import com.ttProject.container.mpegts.MpegtsPacketReader; import com.ttProject.container.mpegts.type.Pes; import com.ttProject.nio.channels.FileReadChannel; import com.ttProject.nio.channels.IFileReadChannel; /** * convert from mpegts(multi tracks) to flv * @author taktod */ public class MultiMpegtsToTest { /** logger */ private Logger logger = Logger.getLogger(MultiMpegtsToTest.class); /** * make 4 flv from 1 mpegts. * @throws Exception */ @Test public void makeMultiFlvTest() throws Exception { logger.info("make flv from multiple track mpegts test."); convertTest( FileReadChannel.openFileReadChannel( "http://49.212.39.17/mario_3video_1audio.ts" ) ); } private void convertTest(IFileReadChannel source) { FlvTagWriter writer1 = null; FlvTagWriter writer2 = null; FlvTagWriter writer3 = null; FlvTagWriter writer4 = null; try { writer1 = new FlvTagWriter("output_640x360.flv"); writer2 = new FlvTagWriter("output_320x180.flv"); writer3 = new FlvTagWriter("output_160x90.flv"); writer4 = new FlvTagWriter("output_audio_only.flv"); FlvHeaderTag flvHeader = new FlvHeaderTag(); flvHeader.setAudioFlag(true); flvHeader.setVideoFlag(true); writer1.addContainer(flvHeader); writer2.addContainer(flvHeader); writer3.addContainer(flvHeader); flvHeader.setVideoFlag(false); writer4.addContainer(flvHeader); IReader reader = new MpegtsPacketReader(); IContainer container = null; while((container = reader.read(source)) != null) { if(container instanceof Pes) { Pes pes = (Pes)container; logger.info(pes); if(pes.getFrame() == null) { continue; } switch(pes.getPid()) { case 0x0100: writer1.addFrame(pes.getPid(), pes.getFrame()); break; case 0x0101: writer2.addFrame(pes.getPid(), pes.getFrame()); break; case 0x0102: writer3.addFrame(pes.getPid(), pes.getFrame()); break; case 0x0103: writer1.addFrame(pes.getPid(), pes.getFrame()); writer2.addFrame(pes.getPid(), pes.getFrame()); writer3.addFrame(pes.getPid(), pes.getFrame()); writer4.addFrame(pes.getPid(), pes.getFrame()); break; default: break; } } } } catch(Exception e) { logger.warn(e); } finally { if(writer1 != null) { try { writer1.prepareTailer(); } catch(Exception e) { } writer1 = null; } if(writer2 != null) { try { writer2.prepareTailer(); } catch(Exception e) { } writer2 = null; } if(writer3 != null) { try { writer3.prepareTailer(); } catch(Exception e) { } writer3 = null; } if(writer4 != null) { try { writer4.prepareTailer(); } catch(Exception e) { } writer4 = null; } if(source != null) { try { source.close(); } catch(Exception e) { } source = null; } } } }