/*
* myLib - https://github.com/taktod/myLib
* Copyright (c) 2014 ttProject. All rights reserved.
*
* Licensed under The MIT license.
*/
package com.ttProject.container.flv;
import org.apache.log4j.Logger;
import com.ttProject.container.Container;
import com.ttProject.container.IContainer;
import com.ttProject.nio.channels.IReadChannel;
import com.ttProject.unit.extra.BitConnector;
import com.ttProject.unit.extra.BitLoader;
import com.ttProject.unit.extra.bit.Bit24;
import com.ttProject.unit.extra.bit.Bit32;
import com.ttProject.unit.extra.bit.Bit1;
import com.ttProject.unit.extra.bit.Bit5;
import com.ttProject.unit.extra.bit.Bit8;
/**
* flv header tag.
* first 13 bytes for flv file.
* @author taktod
*/
public class FlvHeaderTag extends Container implements IContainer {
/** logger */
@SuppressWarnings("unused")
private Logger logger = Logger.getLogger(FlvHeaderTag.class);
private final Bit24 signature;
private Bit8 version = new Bit8(1);
private Bit5 reserved1 = new Bit5();
private Bit1 audioFlag = new Bit1();
private Bit1 reserved2 = new Bit1();
private Bit1 videoFlag = new Bit1();
private Bit32 length = new Bit32(9);
private Bit32 reserved3 = new Bit32();
/**
* constructor
* @param signature
*/
public FlvHeaderTag(Bit24 signature) {
this.signature = signature;
setPosition(0);
setPts(0);
setTimebase(1000);
super.update();
}
/**
* constructor
*/
public FlvHeaderTag() {
this(new Bit24('F' << 16 | 'L' << 8 | 'V'));
super.update();
}
/**
* {@inheritDoc}
*/
@Override
public void minimumLoad(IReadChannel channel) throws Exception {
// read all data here.
BitLoader loader = new BitLoader(channel);
loader.load(version, reserved1, audioFlag, reserved2, videoFlag,
length, reserved3);
super.update();
setSize(13);
}
/**
* {@inheritDoc}
*/
@Override
public void load(IReadChannel channel) throws Exception {
super.update();
}
/**
* set video track.
* @param flag
*/
public void setVideoFlag(boolean flag) {
videoFlag.set(flag ? 1 : 0);
super.update();
}
/**
* set audio track.
* @param flag
*/
public void setAudioFlag(boolean flag) {
audioFlag.set(flag ? 1 : 0);
super.update();
}
/**
* {@inheritDoc}
*/
@Override
protected void requestUpdate() throws Exception {
BitConnector connector = new BitConnector();
setData(connector.connect(signature, version, reserved1,
audioFlag, reserved2, videoFlag, length, reserved3));
}
}