org.red5.io.mp4.impl
Class MP4Reader

java.lang.Object
  extended by org.red5.io.mp4.impl.MP4Reader
All Implemented Interfaces:
IKeyFrameDataAnalyzer, IoConstants, ITagReader

public class MP4Reader
extends Object
implements IoConstants, ITagReader, IKeyFrameDataAnalyzer

This reader is used to read the contents of an MP4 file. NOTE: This class is not implemented as thread-safe, the caller should ensure the thread-safety.

New NetStream notifications
Two new notifications facilitate the implementation of the playback components:

Author:
The Red5 Project ([email protected]), Paul Gregoire ([email protected])

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.red5.io.flv.IKeyFrameDataAnalyzer
IKeyFrameDataAnalyzer.KeyFrameMeta
 
Field Summary
static byte[] EMPTY_AAC
          Blank AAC data
static byte[] PREFIX_AUDIO_FRAME
          Audio packet prefix
static byte[] PREFIX_VIDEO_CONFIG_FRAME
          Video packet prefix for the decoder frame
static byte[] PREFIX_VIDEO_FRAME
          Video packet prefix for standard frames (interframe)
static byte[] PREFIX_VIDEO_KEYFRAME
          Video packet prefix for key frames
 
Fields inherited from interface org.red5.io.IoConstants
AVC_PACKET_TYPE_END_OF_SEQUENCE, AVC_PACKET_TYPE_NALU, AVC_PACKET_TYPE_SEQUENCE_HEADER, 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_GENERATED_KEYFRAME, FLAG_FRAMETYPE_INFO, FLAG_FRAMETYPE_INTERFRAME, FLAG_FRAMETYPE_KEYFRAME, FLAG_RATE_11_KHZ, FLAG_RATE_22_KHZ, FLAG_RATE_44_KHZ, FLAG_RATE_48_KHZ, FLAG_RATE_5_5_KHZ, FLAG_SIZE_16_BIT, FLAG_SIZE_8_BIT, FLAG_TYPE_MONO, FLAG_TYPE_STEREO, INFO_PACKET_SEEK_END, INFO_PACKET_SEEK_START, MASK_SOUND_FORMAT, MASK_SOUND_RATE, MASK_SOUND_SIZE, MASK_SOUND_TYPE, MASK_VIDEO_CODEC, MASK_VIDEO_FRAMETYPE, TYPE_AUDIO, TYPE_ENCRYPTED, TYPE_ENCRYPTED_AUDIO, TYPE_ENCRYPTED_METADATA, TYPE_ENCRYPTED_VIDEO, TYPE_METADATA, TYPE_VIDEO
 
Constructor Summary
MP4Reader(File f)
          Creates MP4 reader from file input stream, sets up metadata generation flag.
 
Method Summary
 void analyzeFrames()
          Performs frame analysis and generates metadata for use in seeking.
 IKeyFrameDataAnalyzer.KeyFrameMeta analyzeKeyFrames()
          Analyze and return keyframe metadata.
 void close()
          Closes the reader and free any allocated memory.
 void decodeHeader()
          This handles the moov atom being at the beginning or end of the file, so the mdat may also be before or after the moov atom.
 String getAudioCodecId()
           
 long getBytesRead()
          Returns the amount of bytes read
 long getDuration()
          Return length in seconds
 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 IoBuffer.
 String 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()
          Packages media data for return to providers
 ITag readTagHeader()
           
 void setAudioCodecId(String audioCodecId)
           
 void setVideoCodecId(String videoCodecId)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PREFIX_AUDIO_FRAME

public static final byte[] PREFIX_AUDIO_FRAME
Audio packet prefix


EMPTY_AAC

public static final byte[] EMPTY_AAC
Blank AAC data


PREFIX_VIDEO_CONFIG_FRAME

public static final byte[] PREFIX_VIDEO_CONFIG_FRAME
Video packet prefix for the decoder frame


PREFIX_VIDEO_KEYFRAME

public static final byte[] PREFIX_VIDEO_KEYFRAME
Video packet prefix for key frames


PREFIX_VIDEO_FRAME

public static final byte[] PREFIX_VIDEO_FRAME
Video packet prefix for standard frames (interframe)

Constructor Detail

MP4Reader

public MP4Reader(File f)
          throws IOException
Creates MP4 reader from file input stream, sets up metadata generation flag.

Parameters:
f - File input stream
Throws:
IOException
Method Detail

decodeHeader

public void decodeHeader()
This handles the moov atom being at the beginning or end of the file, so the mdat may also be before or after the moov atom.

Specified by:
decodeHeader in interface ITagReader

getTotalBytes

public long getTotalBytes()
Get the total readable bytes in a file or IoBuffer.

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

getFileData

public IoBuffer getFileData()
Returns the file buffer.

Returns:
File contents as byte buffer

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 String getVideoCodecId()

getAudioCodecId

public String 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()
Packages media data for return to providers

Specified by:
readTag in interface ITagReader
Returns:
Tag

analyzeFrames

public void analyzeFrames()
Performs frame analysis and generates metadata for use in seeking. All the frames are analyzed and sorted together based on time and offset.


position

public void position(long pos)
Put the current position to pos. The caller must ensure the pos is a valid one.

Specified by:
position in interface ITagReader
Parameters:
pos - position to move to in file / channel

close

public void close()
Closes the reader and free any allocated memory.

Specified by:
close in interface ITagReader

setVideoCodecId

public void setVideoCodecId(String videoCodecId)

setAudioCodecId

public void setAudioCodecId(String audioCodecId)

readTagHeader

public ITag readTagHeader()

analyzeKeyFrames

public IKeyFrameDataAnalyzer.KeyFrameMeta analyzeKeyFrames()
Description copied from interface: IKeyFrameDataAnalyzer
Analyze and return keyframe metadata.

Specified by:
analyzeKeyFrames in interface IKeyFrameDataAnalyzer
Returns:
Metadata object


Copyright © 2006-2012 The Red5 Project