Class DataInputOutputHandler

    • Constructor Summary

      Constructors 
      Constructor Description
      DataInputOutputHandler​(java.io.DataInput in)
      Create a handler that can only be opened for reading.
      DataInputOutputHandler​(java.io.DataInput in, java.io.DataOutput out, boolean closeStreamOnClose)
      Creates a new handler.
      DataInputOutputHandler​(java.io.DataOutput out)
      Create a handler that can only be opened for writing.
      DataInputOutputHandler​(java.io.RandomAccessFile file)
      Create a handler that can only be opened for reading, writing and seeking.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int close()
      A request to close() from FFMPEG
      java.io.DataInput getDataInput()
      Returns the DataInput we'd input from if asked.
      java.io.DataOutput getDataOutput()
      Returns the DataOutput we'd output to if asked.
      java.lang.Object getOpen()
      Returns the object currently open(String, int).
      boolean isCloseStreamOnClose()
      Will this handler call Closeable.close() automatically when its close() method is called by AVPKit? We will check if the object we're using supports Closeable.
      boolean isStreamed​(java.lang.String url, int flags)
      Special callback made by AVPKit in order to determine if your stream supports streaming.
      int open​(java.lang.String url, int flags)
      This method gets called by FFMPEG when it opens a file.
      int read​(byte[] buf, int size)
      This method gets called by FFMPEG when it tries to read data.
      long seek​(long offset, int whence)
      A request from FFMPEG to seek to a position in the stream.
      int write​(byte[] buf, int size)
      This method gets called by FFMPEG when it tries to write data.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • CLOSE_STREAM_ON_CLOSE

        public static final boolean CLOSE_STREAM_ON_CLOSE
        Whether or not this class will default calling Closeable.close() on a stream when close() is called on this method. Can be overriden in constructors.
        See Also:
        Constant Field Values
    • Constructor Detail

      • DataInputOutputHandler

        public DataInputOutputHandler​(java.io.DataInput in)
        Create a handler that can only be opened for reading.
        Parameters:
        in - an input object.
      • DataInputOutputHandler

        public DataInputOutputHandler​(java.io.DataOutput out)
        Create a handler that can only be opened for writing.
        Parameters:
        out - an output object
      • DataInputOutputHandler

        public DataInputOutputHandler​(java.io.RandomAccessFile file)
        Create a handler that can only be opened for reading, writing and seeking.
        Parameters:
        file - a file to use.
      • DataInputOutputHandler

        public DataInputOutputHandler​(java.io.DataInput in,
                                      java.io.DataOutput out,
                                      boolean closeStreamOnClose)
        Creates a new handler. If you pass in non null arguments for both in and out, the handler may be opened in either IURLProtocolHandler.URL_RDONLY_MODE or IURLProtocolHandler.URL_WRONLY_MODE, but not at the same time.

        IURLProtocolHandler.URL_RDWR mode is supported by this handler if both in and out are instances of RandomAccessFile.

        Parameters:
        in - The object to read from if asked to.
        out - The object to write from if asked to.
        closeStreamOnClose - Whether or not to automatically call Closeable.close() on the given channel when close() is called.
    • Method Detail

      • close

        public int close()
        A request to close() from FFMPEG
        Specified by:
        close in interface IURLProtocolHandler
        Returns:
        -1 on error; else >= 0
      • read

        public int read​(byte[] buf,
                        int size)
        This method gets called by FFMPEG when it tries to read data.

        For non-blocking IO, return: IError.typeToErrorNumber(com.avpkit.core.IError.Type) pass in IError.Type.ERROR_AGAIN for the error type. This returns the platform specific number for EAGAIN on your platform signaling that callers should try again later.

        Alternately implementors may block until data is returning, but they should then respect the Thread.isInterrupted() setting.

        Specified by:
        read in interface IURLProtocolHandler
        Parameters:
        buf - The buffer to write your data to.
        size - The number of bytes in buf data available for you to write the data that FFMPEG will read.
        Returns:
        0 for end of file, else number of bytes you wrote to the buffer, or -1 if error.
      • seek

        public long seek​(long offset,
                         int whence)
        A request from FFMPEG to seek to a position in the stream. This method is not supported on this class and always return -1;
        Specified by:
        seek in interface IURLProtocolHandler
        Parameters:
        offset - The offset in bytes.
        whence - Where that offset is relative to. Follow the C stdlib fseek() conventions EXCEPT IURLProtocolHandler.SEEK_SIZE should return back the size of the stream in bytes if known without adjusting the seek pointer.
        Returns:
        -1 if not supported, else the position relative to whence
      • write

        public int write​(byte[] buf,
                         int size)
        This method gets called by FFMPEG when it tries to write data.

        For non-blocking IO, return: IError.typeToErrorNumber(com.avpkit.core.IError.Type) pass in IError.Type.ERROR_AGAIN for the error type. This returns the platform specific number for EAGAIN on your platform signaling that callers should try again later.

        Alternately implementators may block until data is returning, but they should then respect the Thread.isInterrupted() setting.

        Specified by:
        write in interface IURLProtocolHandler
        Parameters:
        buf - The data you should write.
        size - The number of bytes in buf.
        Returns:
        0 for end of file, else number of bytes you read from buf, or -1 if error.
      • isStreamed

        public boolean isStreamed​(java.lang.String url,
                                  int flags)
        Special callback made by AVPKit in order to determine if your stream supports streaming.

        If this method returns true, AVPKit will assume it cannot seek backwards in this container.

        This has one main practical consequence. When writing it means certain container formats (e.g. the MOV container) will not be usable as it requires seeking back to the start of a file to write MOV required header information once the entire file has been encoded.

        But if your medium is streaming, you'll want to return true for this, and then FFMPEG will not attempt to seek back in time.

        Always true, unless we're inputting or outputting to a RandomAccessFile.
        Specified by:
        isStreamed in interface IURLProtocolHandler
        Parameters:
        url - The URL that would be passed to IURLProtocolHandler.open(String, int)
        flags - The flags that would be passed to IURLProtocolHandler.open(String, int)
        Returns:
        true if you can stream that URL; false if not.
      • getDataInput

        public java.io.DataInput getDataInput()
        Returns the DataInput we'd input from if asked.
        Returns:
        the DataInput
      • getDataOutput

        public java.io.DataOutput getDataOutput()
        Returns the DataOutput we'd output to if asked.
        Returns:
        the DataOutput
      • isCloseStreamOnClose

        public boolean isCloseStreamOnClose()
        Will this handler call Closeable.close() automatically when its close() method is called by AVPKit? We will check if the object we're using supports Closeable.
        Returns:
        the closeStreamOnClose setting