Gnash
0.8.11dev
|
The FLVParser class parses FLV streams. More...
#include <FLVParser.h>
Public Member Functions | |
FLVParser (std::unique_ptr< IOChannel > lt) | |
Create an FLV parser reading input from the given IOChannel. More... | |
~FLVParser () | |
Kills the parser... More... | |
virtual bool | seek (std::uint32_t &) |
Seeks to the closest possible position the given position, and returns the new position. More... | |
virtual bool | parseNextChunk () |
Parse next chunk of input. More... | |
std::uint64_t | getBytesLoaded () const |
Return number of bytes parsed so far. More... | |
bool | indexingCompleted () const |
Return true of indexing is completed. More... | |
virtual void | fetchMetaTags (OrderedMetaTags &tags, std::uint64_t ts) |
Retrieve any parsed metadata tags up to a specified timestamp. More... | |
![]() | |
MediaParser (std::unique_ptr< IOChannel > stream) | |
virtual | ~MediaParser () |
DSOEXPORT std::uint64_t | getBufferLength () const |
Returns mininum length of available buffers in milliseconds. More... | |
DSOEXPORT bool | isBufferEmpty () const |
Return true if both audio and video buffers are empty. More... | |
DSOEXPORT std::uint_fast64_t | getBufferTime () const |
Return the time we want the parser thread to maintain in the buffer. More... | |
DSOEXPORT void | setBufferTime (std::uint_fast64_t t) |
Set the time we want the parser thread to maintain in the buffer. More... | |
DSOEXPORT bool | nextFrameTimestamp (std::uint64_t &ts) const |
Get timestamp of the next frame available, if any. More... | |
DSOEXPORT bool | nextVideoFrameTimestamp (std::uint64_t &ts) const |
Get timestamp of the video frame which would be returned on nextVideoFrame. More... | |
DSOEXPORT std::unique_ptr< EncodedVideoFrame > | nextVideoFrame () |
Returns the next video frame in the parsed buffer, advancing video cursor. More... | |
DSOEXPORT bool | nextAudioFrameTimestamp (std::uint64_t &ts) const |
Get timestamp of the audio frame which would be returned on nextAudioFrame. More... | |
DSOEXPORT std::unique_ptr< EncodedAudioFrame > | nextAudioFrame () |
Returns the next audio frame in the parsed buffer, advancing audio cursor. More... | |
VideoInfo * | getVideoInfo () |
Returns a VideoInfo class about the videostream. More... | |
AudioInfo * | getAudioInfo () |
Returns a AudioInfo class about the audiostream. More... | |
bool | parsingCompleted () const |
Return true of parsing is completed. More... | |
std::uint64_t | getBytesTotal () const |
Return total number of bytes in input. More... | |
virtual boost::optional< Id3Info > | getId3Info () const |
Get ID3 data from the parsed stream if it exists. More... | |
Static Public Attributes | |
static const size_t | paddingBytes = 8 |
The size of padding for all buffers that might be read by FFMPEG. More... | |
Additional Inherited Members | |
![]() | |
typedef std::multimap< std::uint64_t, std::shared_ptr< SimpleBuffer > > | MetaTags |
A container for executable MetaTags contained in media streams. More... | |
typedef std::vector< MetaTags::mapped_type > | OrderedMetaTags |
![]() | |
void | startParserThread () |
}@ More... | |
void | stopParserThread () |
Stop the parser thread. More... | |
void | clearBuffers () |
Clear the a/v buffers. More... | |
void | pushEncodedAudioFrame (std::unique_ptr< EncodedAudioFrame > frame) |
Push an encoded audio frame to buffer. More... | |
void | pushEncodedVideoFrame (std::unique_ptr< EncodedVideoFrame > frame) |
Push an encoded video frame to buffer. More... | |
void | parserLoop () |
bool | parserThreadKillRequested () const |
void | waitIfNeeded (std::unique_lock< std::mutex > &qMutexLock) |
void | wakeupParserThread () |
bool | bufferFull () const |
Method to check if buffer is full w/out locking the _qMutex. More... | |
![]() | |
std::unique_ptr< VideoInfo > | _videoInfo |
Subclasses must set the following variables: More... | |
std::unique_ptr< AudioInfo > | _audioInfo |
Info about the audio stream (if any) More... | |
bool | _parsingComplete |
Whether the parsing is complete or not. More... | |
std::atomic< std::uint_fast64_t > | _bytesLoaded |
Number of bytes loaded. More... | |
std::unique_ptr< IOChannel > | _stream |
The stream used to access the file. More... | |
std::mutex | _streamMutex |
std::atomic< std::uint_fast64_t > | _bufferTime |
std::thread | _parserThread |
std::atomic< bool > | _parserThreadKillRequested |
std::condition_variable | _parserThreadWakeup |
std::mutex | _qMutex |
mutex protecting access to the a/v encoded frames queues More... | |
bool | _seekRequest |
The FLVParser class parses FLV streams.
gnash::media::FLVParser::FLVParser | ( | std::unique_ptr< IOChannel > | lt | ) |
Create an FLV parser reading input from the given IOChannel.
lt | IOChannel to use for input. Ownership transferred. |
References gnash::media::MediaParser::startParserThread().
gnash::media::FLVParser::~FLVParser | ( | ) |
Kills the parser...
References gnash::media::MediaParser::stopParserThread().
|
virtual |
Retrieve any parsed metadata tags up to a specified timestamp.
This copies pointers to a SimpleBuffer of AMF data from _metaTags, then removes those pointers from the MetaTags map. Any metadata later than the timestamp is kept until fetchMetaTags is called again (or the dtor is called).
ts | The latest timestamp to retrieve metadata for. |
tags | This is filled with shared pointers to metatags in timestamp order. Ownership of the data is shared. It is destroyed automatically along with the last owner. |
Reimplemented from gnash::media::MediaParser.
|
virtual |
Return number of bytes parsed so far.
Reimplemented from gnash::media::MediaParser.
References _, gnash::media::MediaParser::_bytesLoaded, gnash::media::MediaParser::_stream, data, fill, gnash::log_error(), and paddingBytes.
|
inlinevirtual |
Return true of indexing is completed.
If this function returns false, parseNextChunk will be called even when buffers are full. Parsers supporting indexing separated from parsing should override this method and have parseNextChunk figure if they only need to index or to parse based on bufferFull.
Reimplemented from gnash::media::MediaParser.
References ts.
|
virtual |
Parse next chunk of input.
The implementations are required to parse a small chunk of input, so to avoid blocking too much if parsing conditions change (ie: seek or destruction requested)
When LOAD_MEDIA_IN_A_SEPARATE_THREAD is defined, this should never be called by users (consider protected).
Implements gnash::media::MediaParser.
References _, gnash::media::MediaParser::_audioInfo, gnash::media::MediaParser::_bytesLoaded, gnash::media::MediaParser::_parsingComplete, gnash::media::MediaParser::_seekRequest, gnash::media::MediaParser::_stream, gnash::media::MediaParser::_streamMutex, gnash::media::MediaParser::_videoInfo, gnash::media::AUDIO_CODEC_AAC, gnash::media::MediaParser::bufferFull(), gnash::media::MediaParser::clearBuffers(), gnash::media::CODEC_TYPE_FLASH, data, gnash::equal(), IF_VERBOSE_PARSE, gnash::log_debug(), gnash::log_error(), gnash::log_unimpl(), paddingBytes, position, gnash::media::MediaParser::pushEncodedAudioFrame(), gnash::media::MediaParser::pushEncodedVideoFrame(), gnash::media::VIDEO_CODEC_H264, gnash::media::VIDEO_CODEC_VP6, and gnash::media::VIDEO_CODEC_VP6A.
|
virtual |
Seeks to the closest possible position the given position, and returns the new position.
time | input/output parameter, input requests a time, output return the actual time seeked to. |
Implements gnash::media::MediaParser.
References gnash::media::MediaParser::_parsingComplete, gnash::media::MediaParser::_seekRequest, gnash::media::MediaParser::_streamMutex, gnash::media::MediaParser::clearBuffers(), and gnash::log_debug().
|
static |
The size of padding for all buffers that might be read by FFMPEG.
This possibly also applies to other media handlers (gst). Ideally this would be taken from the current Handler, but we don't know about it here.
Referenced by getBytesLoaded(), and parseNextChunk().