## org.red5.io.flv.impl
Class FLVReader

    java.lang.Object
      org.red5.io.flv.impl.FLVReader

All Implemented Interfaces:
  IKeyFrameDataAnalyzer, IoConstants, ITagReader

    public class FLVReader

extends Object
implements IoConstants, ITagReader, IKeyFrameDataAnalyzer

A Reader is used to read the contents of a FLV file. NOTE: This class is not implemented as threading-safe. The caller should make sure the threading-safety.

Author:
  The Red5 Project (red5@osflash.org), Dominick Accattato (daccattato@gmail.com), Luke Hubbard, Codegent Ltd (luke@codegent.com), Paul Gregoire, (mondain@gmail.com)

Nested Class Summary

Nested classes/interfaces inherited from interface org.red5.io.flv.IKeyFrameDataAnalyzer
`IKeyFrameDataAnalyzer.KeyFrameMeta`

Field Summary

Fields inherited from interface org.red5.io.IoConstants

`FLAG_CODEC_H263, FLAG_CODEC_SCREEN, FLAG_CODEC_VP6, FLAG_FORMAT_ADPCM, FLAG_FORMAT_MP3, FLAG_FORMAT_NELLYMOSER, FLAG_FORMAT_NELLYMOSER_8_KHZ, FLAG_FORMAT_RAW, FLAG_FRAMETYPE_DISPOSABLE, FLAG_FRAMETYPE_INTERFRAME, FLAG_FRAMETYPE_KEYFRAME, FLAG_RATE_11_KHZ, FLAG_RATE_22_KHZ, FLAG_RATE_44_KHZ, FLAG_RATE_5_5_KHZ, FLAG_SIZE_16_BIT, FLAG_SIZE_8_BIT, FLAG_TYPE_MONO, FLAG_TYPE_STEREO, MASK_SOUND_FORMAT, MASK_SOUND_RATE, MASK_SOUND_SIZE, MASK_SOUND_TYPE, MASK_VIDEO_CODEC, MASK_VIDEO_FRAMETYPE, TYPE_AUDIO, TYPE_METADATA, TYPE_VIDEO`

Constructor Summary
`FLVReader(File f)` Creates FLV reader from file input stream.
`FLVReader(File f, boolean generateMetadata)` Creates FLV reader from file input stream, sets up metadata generation flag.
`FLVReader(IoBuffer buffer, boolean generateMetadata)` Accepts mapped file bytes to construct internal members.

Method Summary
`IKeyFrameDataAnalyzer.KeyFrameMeta` `analyzeKeyFrames()` Key frames analysis may be used as a utility method so synchronize it.
`void` `close()` Closes the reader and free any allocated memory.
`void` `decodeHeader()` Decode the header of the stream;
`int` `getAudioCodecId()`
`static int` `getBufferSize()` Getter for buffer size.
`static String` `getBufferType()` Getter for buffer type (auto, direct or heap).
`long` `getBytesRead()` Returns the amount of bytes read
`long` `getDuration()` Return length in seconds
`static long` `getDuration(File flvFile)`
`IStreamableFile` `getFile()` Return the file that is loaded.
`IoBuffer` `getFileData()` Returns the file buffer.
`int` `getOffset()` Returns the offet length
`long` `getTotalBytes()` Get the total readable bytes in a file or ByteBuffer.
`int` `getVideoCodecId()`
`boolean` `hasMoreTags()` Returns a boolean stating whether the FLV has more tags
`boolean` `hasVideo()` Check if the reader also has video tags.
`void` `position(long pos)` Put the current position to pos.
`ITag` `readTag()` Returns a Tag object
`static void` `setBufferSize(int bufferSize)` Setter for property 'bufferSize'.
`static void` `setBufferType(String bufferType)` Setter for buffer type.
`void` `setKeyFrameCache(IKeyFrameMetaCache keyframeCache)`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### FLVReader

    public FLVReader(File f)
              throws IOException

  Creates FLV reader from file input stream.

  Parameters:
    `f` - File
  Throws:
    `IOException` - on error

### FLVReader

    public FLVReader(File f,
                     boolean generateMetadata)
              throws IOException

  Creates FLV reader from file input stream, sets up metadata generation flag.

  Parameters:
    `f` - File input stream
    `generateMetadata` - `true` if metadata generation required, `false` otherwise
  Throws:
    `IOException` - on error

### FLVReader

    public FLVReader(IoBuffer buffer,
                     boolean generateMetadata)

  Accepts mapped file bytes to construct internal members.

  Parameters:
    `generateMetadata` - `true` if metadata generation required, `false` otherwise
    `buffer` - IoBuffer

Method Detail

### setKeyFrameCache

    public void setKeyFrameCache(IKeyFrameMetaCache keyframeCache)

### getTotalBytes

    public long getTotalBytes()

  Get the total readable bytes in a file or ByteBuffer.

  Specified by:
    `getTotalBytes` in interface `ITagReader`
  Returns:
    Total readable bytes

### hasVideo

    public boolean hasVideo()

  Check if the reader also has video tags.

  Specified by:
    `hasVideo` in interface `ITagReader`
  Returns:
    has video

### getBufferType

    public static String getBufferType()

  Getter for buffer type (auto, direct or heap).

  Returns:
    Value for property 'bufferType'

### setBufferType

    public static void setBufferType(String bufferType)

  Setter for buffer type.

  Parameters:
    `bufferType` - Value to set for property 'bufferType'

### getBufferSize

    public static int getBufferSize()

  Getter for buffer size.

  Returns:
    Value for property 'bufferSize'

### setBufferSize

    public static void setBufferSize(int bufferSize)

  Setter for property 'bufferSize'.

  Parameters:
    `bufferSize` - Value to set for property 'bufferSize'

### getFileData

    public IoBuffer getFileData()

  Returns the file buffer.

  Returns:
    File contents as byte buffer

### decodeHeader

    public void decodeHeader()

  Decode the header of the stream;

  Specified by:
    `decodeHeader` in interface `ITagReader`

### getFile

    public IStreamableFile getFile()

  Return the file that is loaded.

  Specified by:
    `getFile` in interface `ITagReader`
  Returns:
    the file to be loaded

### getOffset

    public int getOffset()

  Returns the offet length

  Specified by:
    `getOffset` in interface `ITagReader`
  Returns:
    int

### getBytesRead

    public long getBytesRead()

  Returns the amount of bytes read

  Specified by:
    `getBytesRead` in interface `ITagReader`
  Returns:
    long

### getDuration

    public long getDuration()

  Return length in seconds

  Specified by:
    `getDuration` in interface `ITagReader`
  Returns:
    length in seconds

### getVideoCodecId

    public int getVideoCodecId()

### getAudioCodecId

    public int getAudioCodecId()

### hasMoreTags

    public boolean hasMoreTags()

  Returns a boolean stating whether the FLV has more tags

  Specified by:
    `hasMoreTags` in interface `ITagReader`
  Returns:
    boolean

### readTag

    public ITag readTag()

  Returns a Tag object

  Specified by:
    `readTag` in interface `ITagReader`
  Returns:
    Tag

### close

    public void close()

  Closes the reader and free any allocated memory.

  Specified by:
    `close` in interface `ITagReader`

### analyzeKeyFrames

    public IKeyFrameDataAnalyzer.KeyFrameMeta analyzeKeyFrames()

  Key frames analysis may be used as a utility method so synchronize it.

  Specified by:
    `analyzeKeyFrames` in interface `IKeyFrameDataAnalyzer`
  Returns:
    Keyframe metadata

### position

    public void position(long pos)

  Put the current position to pos. The caller must ensure the pos is a valid one (eg. not sit in the middle of a frame).

  Specified by:
    `position` in interface `ITagReader`
  Parameters:
    `pos` - New position in file. Pass `Long.MAX_VALUE` to seek to end of file.

### getDuration

    public static long getDuration(File flvFile)

Copyright © 2006-2010 The Red5 Project