/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.packet.flv; import java.nio.ByteBuffer; import java.util.List; import com.ttProject.packet.IMediaPacket; import com.ttProject.packet.MediaPacketManager; /** * このプログラムでは、共有する情報を保持しておく必要がある。 * @author taktod */ public class FlvPacketManager extends MediaPacketManager { public static final byte AUDIO_TAG = 0x08; public static final byte VIDEO_TAG = 0x09; public static final byte META_TAG = 0x12; public static final byte FLV_TAG = 0x46; public static final byte[] flvHeader = { 0x46, 0x4C, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00}; private long currentPos = 0; // 処理の現在位置(時刻) public void setCurrentPos(long pos) { currentPos = pos; } public long getCurrentPos() { return currentPos; } /** ヘッダパケット保持 */ private FlvHeaderPacket headerPacket = null; private int CRC = 0x00000000; public int getCRC() { return CRC; } @Override public void reset() { currentPos = 0; headerPacket = null; super.reset(); } /** * 拡張子取得 */ @Override public String getExt() { return ".flv"; } @Override public String getHeaderExt() { return ".flh"; } /** * パケットを取得します。 */ @Override public List<IMediaPacket> getPackets(ByteBuffer data) { List<IMediaPacket> result = super.getPackets(data); if(!headerPacket.isSaved()) { result.add(0, headerPacket); } return result; } /** * パケットの内容を解析します。 */ @Override protected IMediaPacket analizePacket(ByteBuffer buffer) { IMediaPacket packet = getCurrentPacket(); if(packet == null) { if(headerPacket == null) { headerPacket = new FlvHeaderPacket(this); } packet = new FlvMediaPacket(this, headerPacket); } if(packet.analize(buffer)) { setCurrentPacket(null); return packet; } else { setCurrentPacket(packet); return null; } } }