Class 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:
    • NetStream.Play.FileStructureInvalid: This event is sent if the player detects an MP4 with an invalid file structure. Flash Player cannot play files that have invalid file structures.
    • NetStream.Play.NoSupportedTrackFound: This event is sent if the player does not detect any supported tracks. If there aren't any supported video, audio or data tracks found, Flash Player does not play the file.
    Author:
    The Red5 Project, Paul Gregoire (mondain@gmail.com)
    • Field Detail

      • PREFIX_AUDIO_CONFIG_FRAME

        public static final byte[] PREFIX_AUDIO_CONFIG_FRAME
        Audio packet prefix for the decoder frame
      • 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 - on IO exception
    • 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
      • dumpBox

        public static void dumpBox​(org.mp4parser.Container box)
        Dumps the children of a container box.
        Parameters:
        box - mp4 box
      • 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 org.apache.mina.core.buffer.IoBuffer getFileData()
        Returns the file buffer.
        Returns:
        File contents as byte buffer
      • 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()