
public class DataInputOutputHandler extends Object implements IURLProtocolHandler
DataInput
objects or write to DataOutput objects.
The IURLProtocolHandler.URL_RDWR mode is not supported
unless both input and output objects are the same
RandomAccessFile
IURLProtocolHandler.isStreamed(String, int) will return
true, unless this class is reading from or writing to
a RandomAccessFile;
| Modifier and Type | Field and Description |
|---|---|
static 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. |
SEEK_CUR, SEEK_END, SEEK_SET, SEEK_SIZE, URL_RDONLY_MODE, URL_RDWR, URL_WRONLY_MODE| Constructor and Description |
|---|
DataInputOutputHandler(DataInput in)
Create a handler that can only be opened for reading.
|
DataInputOutputHandler(DataInput in,
DataOutput out,
boolean closeStreamOnClose)
Creates a new handler.
|
DataInputOutputHandler(DataOutput out)
Create a handler that can only be opened for writing.
|
DataInputOutputHandler(RandomAccessFile file)
Create a handler that can only be opened for reading,
writing and seeking.
|
| Modifier and Type | Method and Description |
|---|---|
int |
close()
A request to close() from FFMPEG
|
DataInput |
getDataInput()
Returns the
DataInput we'd input from if asked. |
DataOutput |
getDataOutput()
Returns the
DataOutput we'd output to if asked. |
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 Humble Video?
We will check if the object we're using supports Closeable. |
boolean |
isStreamed(String url,
int flags)
Special callback made by Humble Video in order to determine if your
stream supports streaming.
|
int |
open(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.
|
public static final boolean CLOSE_STREAM_ON_CLOSE
Closeable.close() on a stream when
close() is called on this method. Can be
overriden in constructors.public DataInputOutputHandler(DataInput in)
in - an input object.public DataInputOutputHandler(DataOutput out)
out - an output objectpublic DataInputOutputHandler(RandomAccessFile file)
file - a file to use.public DataInputOutputHandler(DataInput in, DataOutput out, boolean closeStreamOnClose)
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.
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.public int close()
close in interface IURLProtocolHandlerpublic int open(String url, int flags)
open in interface IURLProtocolHandlerurl - The URL to openflags - The flags (e.g. IURLProtocolHandler.URL_RDONLY_MODE)public int read(byte[] buf,
int size)
For non-blocking IO, return:
io.humble.video.Error#typeToErrorNumber(io.humble.video.Error.Type)
pass in io.humble.video.Error.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.
read in interface IURLProtocolHandlerbuf - 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.public long seek(long offset,
int whence)
seek in interface IURLProtocolHandleroffset - 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.public int write(byte[] buf,
int size)
For non-blocking IO, return:
io.humble.video.Error#typeToErrorNumber(io.humble.video.Error.Type)
pass in io.humble.video.Error.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.
write in interface IURLProtocolHandlerbuf - The data you should write.size - The number of bytes in buf.public boolean isStreamed(String url, int flags)
If this method returns true, Humble Video 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 aRandomAccessFile.isStreamed in interface IURLProtocolHandlerurl - The URL that would be passed to IURLProtocolHandler.open(String, int)flags - The flags that would be passed to IURLProtocolHandler.open(String, int)public DataInput getDataInput()
DataInput we'd input from if asked.DataInputpublic DataOutput getDataOutput()
DataOutput we'd output to if asked.DataOutputpublic Object getOpen()
open(String, int).public boolean isCloseStreamOnClose()
Closeable.close() automatically
when its close() method is called by Humble Video?
We will check if the object we're using supports Closeable.Copyright © 2018 Humble Software. All rights reserved.