FragmentedMp4Extractor
@UnstableApi
public class FragmentedMp4Extractor implements Extractor
Extracts data from the FMP4 container format.
Summary
Nested types |
|---|
@DocumentedFlags controlling the behavior of the extractor. |
Constants |
|
|---|---|
static final ExtractorsFactory |
This field is deprecated. Use |
static final int |
Flag to disable parsing of artwork metadata. |
static final int |
Flag to use the source subtitle formats without modification. |
static final int |
Flag to indicate that the extractor should output an event message metadata track. |
static final int |
Flag to enable reading and merging of all sidx boxes before continuing extraction. |
static final int |
Flag to enable reading the 'mfra' box for seeking in fragmented MP4s. |
static final int |
Flag to extract additional sample dependency information, and mark output buffers with |
static final int |
Flag to extract additional sample dependency information, and mark output buffers with |
static final int |
Flag to work around an issue in some video streams where every frame is marked as a sync frame. |
static final int |
Flag to ignore any edit lists in the stream. |
static final int |
Flag to ignore any tfdt boxes in the stream. |
Public constructors |
|---|
|
This method is deprecated. Use |
This method is deprecated. Use |
FragmentedMp4Extractor(SubtitleParser.Factory subtitleParserFactory)Constructs an instance. |
This method is deprecated. Use |
FragmentedMp4Extractor(Constructs an instance. |
This method is deprecated. Use |
This method is deprecated. Use |
This method is deprecated. Use |
FragmentedMp4Extractor(Constructs an instance. |
Public methods |
|
|---|---|
static int |
@FragmentedMp4Extractor.FlagsReturns |
ImmutableList<SniffFailure> |
Returns additional details about the last call to |
void |
init(ExtractorOutput output)Initializes the extractor with an |
static ExtractorsFactory |
newFactory(SubtitleParser.Factory subtitleParserFactory)Creates a factory for |
int |
read(ExtractorInput input, PositionHolder seekPosition)Extracts data read from a provided |
void |
release()Releases all kept resources. |
void |
seek(long position, long timeUs)Notifies the extractor that a seek has occurred. |
boolean |
sniff(ExtractorInput input)Returns whether this extractor can extract samples from the |
Protected methods |
|
|---|---|
@Nullable Track |
modifyTrack(@Nullable Track track) |
Inherited Constants |
||||||
|---|---|---|---|---|---|---|
|
Inherited methods |
||
|---|---|---|
|
Constants
FLAG_DISABLE_ARTWORK_METADATA
public static final int FLAG_DISABLE_ARTWORK_METADATA = 1024
Flag to disable parsing of artwork metadata.
FLAG_EMIT_RAW_SUBTITLE_DATA
public static final int FLAG_EMIT_RAW_SUBTITLE_DATA = 32
Flag to use the source subtitle formats without modification. If unset, subtitles will be transcoded to APPLICATION_MEDIA3_CUES during extraction.
FLAG_ENABLE_EMSG_TRACK
public static final int FLAG_ENABLE_EMSG_TRACK = 4
Flag to indicate that the extractor should output an event message metadata track. Any event messages in the stream will be delivered as samples to this track.
FLAG_MERGE_FRAGMENTED_SIDX
public static final int FLAG_MERGE_FRAGMENTED_SIDX = 256
Flag to enable reading and merging of all sidx boxes before continuing extraction.
FLAG_READ_MFRA_FOR_SEEK_MAP
public static final int FLAG_READ_MFRA_FOR_SEEK_MAP = 512
Flag to enable reading the 'mfra' box for seeking in fragmented MP4s.
FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES
public static final int FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES = 64
Flag to extract additional sample dependency information, and mark output buffers with BUFFER_FLAG_NOT_DEPENDED_ON for H.264 video.
This class always marks the samples at the start of each group of picture (GOP) with BUFFER_FLAG_KEY_FRAME. Usually, key frames can be decoded independently, without depending on other samples.
Setting this flag enables elementary stream parsing to identify disposable samples that are not depended on by other samples. Any disposable sample can be safely omitted, and the rest of the track will remain valid.
FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265
public static final int FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265 = 128
Flag to extract additional sample dependency information, and mark output buffers with BUFFER_FLAG_NOT_DEPENDED_ON for H.265 video.
FLAG_WORKAROUND_EVERY_VIDEO_FRAME_IS_SYNC_FRAME
public static final int FLAG_WORKAROUND_EVERY_VIDEO_FRAME_IS_SYNC_FRAME = 1
Flag to work around an issue in some video streams where every frame is marked as a sync frame. The workaround overrides the sync frame flags in the stream, forcing them to false except for the first sample in each segment.
This flag does nothing if the stream is not a video stream.
FLAG_WORKAROUND_IGNORE_EDIT_LISTS
public static final int FLAG_WORKAROUND_IGNORE_EDIT_LISTS = 16
Flag to ignore any edit lists in the stream.
FLAG_WORKAROUND_IGNORE_TFDT_BOX
public static final int FLAG_WORKAROUND_IGNORE_TFDT_BOX = 2
Flag to ignore any tfdt boxes in the stream.
Public constructors
FragmentedMp4Extractor
public FragmentedMp4Extractor(SubtitleParser.Factory subtitleParserFactory)
Constructs an instance.
| Parameters | |
|---|---|
SubtitleParser.Factory subtitleParserFactory |
The |
FragmentedMp4Extractor
publicFragmentedMp4Extractor(
@FragmentedMp4Extractor.Flags int flags,
@Nullable TimestampAdjuster timestampAdjuster
)
FragmentedMp4Extractor
public FragmentedMp4Extractor(
SubtitleParser.Factory subtitleParserFactory,
@FragmentedMp4Extractor.Flags int flags
)
Constructs an instance.
| Parameters | |
|---|---|
SubtitleParser.Factory subtitleParserFactory |
The |
@FragmentedMp4Extractor.Flags int flags |
Flags that control the extractor's behavior. |
FragmentedMp4Extractor
publicFragmentedMp4Extractor(
@FragmentedMp4Extractor.Flags int flags,
@Nullable TimestampAdjuster timestampAdjuster,
@Nullable Track sideloadedTrack
)
FragmentedMp4Extractor
publicFragmentedMp4Extractor(
@FragmentedMp4Extractor.Flags int flags,
@Nullable TimestampAdjuster timestampAdjuster,
@Nullable Track sideloadedTrack,
List<Format> closedCaptionFormats
)
FragmentedMp4Extractor
publicFragmentedMp4Extractor(
@FragmentedMp4Extractor.Flags int flags,
@Nullable TimestampAdjuster timestampAdjuster,
@Nullable Track sideloadedTrack,
List<Format> closedCaptionFormats,
@Nullable TrackOutput additionalEmsgTrackOutput
)
FragmentedMp4Extractor
public FragmentedMp4Extractor(
SubtitleParser.Factory subtitleParserFactory,
@FragmentedMp4Extractor.Flags int flags,
@Nullable TimestampAdjuster timestampAdjuster,
@Nullable Track sideloadedTrack,
List<Format> closedCaptionFormats,
@Nullable TrackOutput additionalEmsgTrackOutput
)
Constructs an instance.
| Parameters | |
|---|---|
SubtitleParser.Factory subtitleParserFactory |
The |
@FragmentedMp4Extractor.Flags int flags |
Flags that control the extractor's behavior. |
@Nullable TimestampAdjuster timestampAdjuster |
Adjusts sample timestamps. May be null if no adjustment is needed. |
@Nullable Track sideloadedTrack |
Sideloaded track information, in the case that the extractor will not receive a moov box in the input data. Null if a moov box is expected. |
List<Format> closedCaptionFormats |
For tracks that contain SEI messages, the formats of the closed caption channels to expose. |
@Nullable TrackOutput additionalEmsgTrackOutput |
An extra track output that will receive all emsg messages targeting the player, even if |
Public methods
codecsToParseWithinGopSampleDependenciesAsFlags
@FragmentedMp4Extractor.Flags
public static int codecsToParseWithinGopSampleDependenciesAsFlags(
@C.VideoCodecFlags int videoCodecFlags
)
Returns Flags denoting if an extractor should parse within GOP sample dependencies.
| Parameters | |
|---|---|
@C.VideoCodecFlags int videoCodecFlags |
The set of codecs for which to parse within GOP sample dependencies. |
getSniffFailureDetails
public ImmutableList<SniffFailure> getSniffFailureDetails()
Returns additional details about the last call to sniff. The returned list may be empty if no additional details are available, or the last sniff call returned
true.
This only contains details that were discovered before sniff returned
false, it is not an exhaustive list of issues which, if resolved, would cause the file to be successfully sniffed.
init
public void init(ExtractorOutput output)
Initializes the extractor with an ExtractorOutput. Called at most once.
| Parameters | |
|---|---|
ExtractorOutput output |
An |
newFactory
public static ExtractorsFactory newFactory(SubtitleParser.Factory subtitleParserFactory)
Creates a factory for FragmentedMp4Extractor instances with the provided SubtitleParser.Factory.
read
public int read(ExtractorInput input, PositionHolder seekPosition)
Extracts data read from a provided ExtractorInput. Must not be called before init.
A single call to this method will block until some progress has been made, but will not block for longer than this. Hence each call will consume only a small amount of input data.
In the common case, RESULT_CONTINUE is returned to indicate that the ExtractorInput passed to the next read is required to provide data continuing from the position in the stream reached by the returning call. If the extractor requires data to be provided from a different position, then that position is set in seekPosition and RESULT_SEEK is returned. If the extractor reached the end of the data provided by the ExtractorInput, then RESULT_END_OF_INPUT is returned.
When this method throws an IOException, extraction may continue by providing an ExtractorInput with an unchanged read position to a subsequent call to this method.
| Parameters | |
|---|---|
ExtractorInput input |
The |
PositionHolder seekPosition |
If |
| Returns | |
|---|---|
int |
One of the |
| Throws | |
|---|---|
java.io.IOException |
If an error occurred reading from or parsing the input. |
seek
public void seek(long position, long timeUs)
Notifies the extractor that a seek has occurred.
Following a call to this method, the ExtractorInput passed to the next invocation of read is required to provide data starting from
position in the stream. Valid random access positions are the start of the stream and positions that can be obtained from any SeekMap passed to the ExtractorOutput.
| Parameters | |
|---|---|
long position |
The byte offset in the stream from which data will be provided. |
long timeUs |
The seek time in microseconds. |
sniff
public boolean sniff(ExtractorInput input)
Returns whether this extractor can extract samples from the ExtractorInput, which must provide data from the start of the stream.
If true is returned, the input's reading position may have been modified. Otherwise, only its peek position may have been modified.
| Parameters | |
|---|---|
ExtractorInput input |
The |
| Returns | |
|---|---|
boolean |
Whether this extractor can read the provided input. |
| Throws | |
|---|---|
java.io.IOException |
If an error occurred reading from the input. |