MythTV  master
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
HLSRingBuffer Class Reference

#include <libmythtv/HLS/httplivestreambuffer.h>

Inheritance diagram for HLSRingBuffer:
[legend]
Collaboration diagram for HLSRingBuffer:
[legend]

Public Member Functions

 HLSRingBuffer (const QString &lfilename)
 
 HLSRingBuffer (const QString &lfilename, bool open)
 
 ~HLSRingBuffer () override
 
bool IsOpen (void) const override
 
long long GetReadPosition (void) const override
 
bool OpenFile (const QString &lfilename, std::chrono::milliseconds retry_ms=kDefaultOpenTimeout) override
 Opens an HTTP Live Stream for reading. More...
 
bool IsStreamed (void) override
 
bool IsSeekingAllowed (void) override
 
bool IsBookmarkAllowed (void) override
 
bool SaveToDisk (const QString &filename, int segstart=0, int segend=-1)
 
int NumStreams (void) const
 
void Interrupt (void)
 
void Continue (void)
 
int DurationForBytes (uint size)
 returns an estimated duration in ms for size amount of data returns 0 if we can't estimate the duration More...
 
- Public Member Functions inherited from MythMediaBuffer
 ~MythMediaBuffer () override=0
 Deletes. More...
 
MythBufferType GetType () const
 
void SetOldFile (bool Old)
 Tell RingBuffer if this is an old file or not. More...
 
void UpdateRawBitrate (uint RawBitrate)
 Set the raw bit rate, to allow RingBuffer adjust effective bitrate. More...
 
void UpdatePlaySpeed (float PlaySpeed)
 Set the play speed, to allow RingBuffer adjust effective bitrate. More...
 
void EnableBitrateMonitor (bool Enable)
 
void SetBufferSizeFactors (bool EstBitrate, bool Matroska)
 Tells RingBuffer that the raw bitrate may be inaccurate and the underlying container is matroska, both of which may require a larger buffer size. More...
 
void SetWaitForWrite (void)
 
QString GetSafeFilename (void)
 
QString GetFilename (void) const
 
QString GetSubtitleFilename (void) const
 
QString GetLastError (void) const
 
bool GetCommsError (void) const
 
void ResetCommsError (void)
 
bool GetStopReads (void) const
 
QString GetDecoderRate (void)
 
QString GetStorageRate (void)
 
QString GetAvailableBuffer (void)
 
uint GetBufferSize (void) const
 
bool IsNearEnd (double Framerate, uint Frames) const
 
long long GetWritePosition (void) const
 Returns how far into a ThreadedFileWriter file we have written. More...
 
long long GetRealFileSize (void) const
 
bool IsDisc (void) const
 
bool IsDVD (void) const
 
bool IsBD (void) const
 
const MythDVDBufferDVD (void) const
 
MythDVDBufferDVD (void)
 
const MythBDBufferBD (void) const
 
MythBDBufferBD (void)
 
int Read (void *Buffer, int Count)
 This is the public method for reading from a file, it calls the appropriate read method if the file is remote or buffered, or a BD/DVD. More...
 
int Peek (void *Buffer, int Count)
 
int Peek (std::vector< char > &Buffer)
 
void Reset (bool Full=false, bool ToAdjust=false, bool ResetInternal=false)
 Resets the read-ahead thread and our position in the file. More...
 
void Pause (void)
 Pauses the read-ahead thread. Calls StopReads(void). More...
 
void Unpause (void)
 Unpauses the read-ahead thread. Calls StartReads(void). More...
 
void WaitForPause (void)
 Waits for Pause(void) to take effect. More...
 
void Start (void)
 Starts the read-ahead thread. More...
 
void StopReads (void)
 
void StartReads (void)
 
long long Seek (long long Position, int Whence, bool HasLock=false)
 
long long SetAdjustFilesize (void)
 
int GetReadBufAvail (void) const
 Returns number of bytes available for reading from buffer. More...
 
bool SetReadInternalMode (bool Mode)
 
bool IsReadInternalMode (void) const
 
bool LiveMode (void) const
 Returns true if this RingBuffer has been assigned a LiveTVChain. More...
 
void SetLiveMode (LiveTVChain *Chain)
 Assigns a LiveTVChain to this RingBuffer. More...
 
void IgnoreLiveEOF (bool Ignore)
 Tells RingBuffer whether to ignore the end-of-file. More...
 
int Write (const void *Buffer, uint Count)
 Writes buffer to ThreadedFileWriter::Write(const void*,uint) More...
 
bool IsIOBound (void) const
 
void WriterFlush (void)
 Calls ThreadedFileWriter::Flush(void) More...
 
void Sync (void)
 Calls ThreadedFileWriter::Sync(void) More...
 
long long WriterSeek (long long Position, int Whence, bool HasLock=false)
 Calls ThreadedFileWriter::Seek(long long,int). More...
 
bool WriterSetBlocking (bool Lock=true)
 Calls ThreadedFileWriter::SetBlocking(bool) More...
 
virtual int BestBufferSize (void)
 
virtual bool StartFromBeginning (void)
 
virtual void IgnoreWaitStates (bool)
 
virtual bool IsInMenu (void) const
 
virtual bool IsInStillFrame (void) const
 
virtual bool IsInDiscMenuOrStillFrame (void) const
 
virtual bool HandleAction (const QStringList &, mpeg::chrono::pts)
 
virtual bool ReOpen (const QString &="")
 

Static Public Member Functions

static bool IsHTTPLiveStreaming (QByteArray *s)
 
static bool TestForHTTPLiveStreaming (const QString &filename)
 
- Static Public Member Functions inherited from MythMediaBuffer
static MythMediaBufferCreate (const QString &Filename, bool Write, bool UseReadAhead=true, std::chrono::milliseconds Timeout=kDefaultOpenTimeout, bool StreamOnly=false)
 Creates a RingBuffer instance. More...
 
static QString BitrateToString (uint64_t Rate, bool Hz=false)
 
static void AVFormatInitNetwork (void)
 

Protected Member Functions

int SafeRead (void *data, uint sz) override
 
long long GetRealFileSizeInternal (void) const override
 
long long SeekInternal (long long pos, int whence) override
 
- Protected Member Functions inherited from MythMediaBuffer
 MythMediaBuffer (MythBufferType Type)
 
void run (void) override
 Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead. More...
 
void CreateReadAheadBuffer (void)
 
void CalcReadAheadThresh (void)
 Calculates m_fillMin, m_fillThreshold, and m_readBlockSize from the estimated effective bitrate of the stream. More...
 
bool PauseAndWait (void)
 
int ReadPriv (void *Buffer, int Count, bool Peek)
 When possible reads from the read-ahead buffer, otherwise reads directly from the device. More...
 
int ReadDirect (void *Buffer, int Count, bool Peek)
 
bool WaitForReadsAllowed (void)
 
int WaitForAvail (int Count, std::chrono::milliseconds Timeout)
 
int ReadBufFree (void) const
 Returns number of bytes available for reading into buffer. More...
 
int ReadBufAvail (void) const
 Returns number of bytes available for reading from buffer. More...
 
void ResetReadAhead (long long NewInternal)
 Restart the read-ahead thread at the 'newinternal' position. More...
 
void KillReadAheadThread (void)
 Stops the read-ahead thread, and waits for it to stop. More...
 
uint64_t UpdateDecoderRate (uint64_t Latest=0)
 
uint64_t UpdateStorageRate (uint64_t Latest=0)
 
- Protected Member Functions inherited from MThread
int exec (void)
 Enters the qt event loop. call exit or quit to exit thread. More...
 
 MThread (const QString &objectName)
 Standard constructor. More...
 
 MThread (const QString &objectName, QRunnable *runnable)
 Use this constructor if you want the default run() method to run the QRunnable's run() method instead of entering the Qt event loop. More...
 
virtual ~MThread ()
 
 MThread (const MThread &)=delete
 
MThreadoperator= (const MThread &)=delete
 
void RunProlog (void)
 Sets up a thread, call this if you reimplement run(). More...
 
void RunEpilog (void)
 Cleans up a thread's resources, call this if you reimplement run(). More...
 
QThread * qthread (void)
 Returns the thread, this will always return the same pointer no matter how often you restart the thread. More...
 
void setObjectName (const QString &name)
 
QString objectName (void) const
 
void setPriority (QThread::Priority priority)
 
QThread::Priority priority (void) const
 
bool isFinished (void) const
 
bool isRunning (void) const
 
void setStackSize (uint stackSize)
 
uint stackSize (void) const
 
void exit (int retcode=0)
 Use this to exit from the thread if you are using a Qt event loop. More...
 
void start (QThread::Priority p=QThread::InheritPriority)
 Tell MThread to start running the thread in the near future. More...
 
void terminate (void)
 Kill a thread unsafely. More...
 
void quit (void)
 calls exit(0) More...
 
bool wait (std::chrono::milliseconds time=std::chrono::milliseconds::max())
 Wait for the MThread to exit, with a maximum timeout. More...
 

Private Member Functions

void FreeStreamsList (QList< HLSStream * > *streams) const
 
HLSStreamGetStreamForSegment (int segnum) const
 
HLSStreamGetStream (int wanted, const StreamsList *streams=nullptr) const
 
HLSStreamGetFirstStream (const StreamsList *streams=nullptr) const
 
HLSStreamGetLastStream (const StreamsList *streams=nullptr) const
 
HLSStreamFindStream (const HLSStream *hls_new, const StreamsList *streams=nullptr) const
 
HLSStreamGetCurrentStream (void) const
 return the stream we are currently streaming from More...
 
HLSStreamParseStreamInformation (const QString &line, const QString &uri) const
 
int ParseKey (HLSStream *hls, const QString &line)
 
int ParseM3U8 (const QByteArray *buffer, StreamsList *streams=nullptr)
 
int Prefetch (int count)
 Preferetch the first x segments of the stream. More...
 
void SanityCheck (const HLSStream *hls) const
 
HLSSegmentGetSegment (int segnum, std::chrono::milliseconds timeout=1s)
 Retrieve segment [segnum] from any available streams. More...
 
int NumSegments (void) const
 
int ChooseSegment (int stream) const
 
int64_t SizeMedia (void) const
 
void WaitUntilBuffered (void)
 Wait until we have enough segments buffered to allow smooth playback Do not wait if VOD and at end of buffer. More...
 
void SanitizeStreams (StreamsList *streams=nullptr)
 Streams may not be all starting at the same sequence number, so attempt to align their starting sequence. More...
 

Static Private Member Functions

static QString ParseAttributes (const QString &line, const char *attr)
 
static int ParseDecimalValue (const QString &line, int &target)
 Return the decimal argument in a line of type: blah:<decimal> presence of value <decimal> is compulsory or it will return RET_ERROR. More...
 
static int ParseSegmentInformation (const HLSStream *hls, const QString &line, int &duration, QString &title)
 
static int ParseTargetDuration (HLSStream *hls, const QString &line)
 
static int ParseMediaSequence (HLSStream *hls, const QString &line)
 
static int ParseProgramDateTime (HLSStream *hls, const QString &line)
 
static int ParseAllowCache (HLSStream *hls, const QString &line)
 
static int ParseVersion (const QString &line, int &version)
 
static int ParseEndList (HLSStream *hls)
 
static int ParseDiscontinuity (HLSStream *hls, const QString &line)
 

Private Attributes

QString m_m3u8
 
QByteArray m_peeked
 
HLSPlaybackm_playback {nullptr}
 
StreamsList m_streams
 
QMutex m_lock
 
bool m_meta {false}
 
bool m_error {false}
 
int m_startup {0}
 
int64_t m_bitrate {0}
 assumed bitrate of playback used for the purpose of calculating length and seek position. More...
 
bool m_seektoend {false}
 FFmpeg seek to the end of the stream in order to determine the length of the video. More...
 
StreamWorkerm_streamworker {nullptr}
 
PlaylistWorkerm_playlistworker {nullptr}
 
FILE * m_fd {nullptr}
 
bool m_interrupted {false}
 
bool m_killed {false}
 

Friends

class StreamWorker
 
class PlaylistWorker
 

Additional Inherited Members

- Static Public Attributes inherited from MythMediaBuffer
static constexpr std::chrono::milliseconds kDefaultOpenTimeout { 2s }
 
static constexpr std::chrono::milliseconds kLiveTVOpenTimeout { 10s }
 
- Static Protected Member Functions inherited from MThread
static void setTerminationEnabled (bool enabled=true)
 
static void usleep (std::chrono::microseconds time)
 
template<typename R , typename P >
static std::enable_if_t< std::chrono::treat_as_floating_point< R >::value, void > usleep (std::chrono::duration< R, P > time)
 
static void ThreadSetup (const QString &name)
 This is to be called on startup in those few threads that haven't been ported to MThread. More...
 
static void ThreadCleanup (void)
 This is to be called on exit in those few threads that haven't been ported to MThread. More...
 
static void Cleanup (void)
 This will print out all the running threads, call exit(1) on each and then wait up to 5 seconds total for all the threads to exit. More...
 
static void GetAllThreadNames (QStringList &list)
 
static void GetAllRunningThreadNames (QStringList &list)
 
- Protected Attributes inherited from MythMediaBuffer
MythBufferType m_type
 
QReadWriteLock m_posLock
 
long long m_readPos { 0 }
 
long long m_writePos { 0 }
 
long long m_internalReadPos { 0 }
 
long long m_ignoreReadPos { -1 }
 
QReadWriteLock m_rbrLock
 
int m_rbrPos { 0 }
 
QReadWriteLock m_rbwLock
 
int m_rbwPos { 0 }
 
volatile bool m_stopReads {false}
 
QString m_safeFilename
 
QReadWriteLock m_rwLock
 
QString m_filename
 
QString m_subtitleFilename
 
QString m_lastError
 
ThreadedFileWriterm_tfw { nullptr }
 
int m_fd2 { -1 }
 
bool m_writeMode { false }
 
RemoteFilem_remotefile { nullptr }
 
uint m_bufferSize { BUFFER_SIZE_MINIMUM }
 
bool m_lowBuffers { false }
 
bool m_fileIsMatroska { false }
 
bool m_unknownBitrate { false }
 
bool m_startReadAhead { false }
 
char * m_readAheadBuffer { nullptr }
 
bool m_readAheadRunning { false }
 
bool m_reallyRunning { false }
 
bool m_requestPause { false }
 
bool m_paused { false }
 
bool m_ateof { false }
 
bool m_waitForWrite { false }
 
bool m_beingWritten { false }
 
bool m_readsAllowed { false }
 
bool m_readsDesired { false }
 
volatile bool m_recentSeek { true }
 
bool m_setSwitchToNext { false }
 
uint m_rawBitrate { 8000 }
 
float m_playSpeed { 1.0F }
 
int m_fillThreshold { 65536 }
 
int m_fillMin { -1 }
 
int m_readBlockSize { DEFAULT_CHUNK_SIZE}
 
int m_wantToRead { 0 }
 
int m_numFailures { 0 }
 
bool m_commsError { false }
 
bool m_oldfile { false }
 
LiveTVChainm_liveTVChain { nullptr }
 
bool m_ignoreLiveEOF { false }
 
long long m_readAdjust { 0 }
 
int m_readOffset { 0 }
 
bool m_readInternalMode { false }
 
bool m_bitrateMonitorEnabled { false }
 
QMutex m_decoderReadLock
 
QMap< std::chrono::milliseconds, uint64_t > m_decoderReads
 
QMutex m_storageReadLock
 
QMap< std::chrono::milliseconds, uint64_t > m_storageReads
 
QWaitCondition m_generalWait
 Condition to signal that the read ahead thread is running. More...
 
- Protected Attributes inherited from MThread
MThreadInternalm_thread {nullptr}
 
QRunnable * m_runnable {nullptr}
 
bool m_prologExecuted {true}
 
bool m_epilogExecuted {true}
 

Detailed Description

Definition at line 38 of file httplivestreambuffer.h.

Constructor & Destructor Documentation

◆ HLSRingBuffer() [1/2]

HLSRingBuffer::HLSRingBuffer ( const QString &  lfilename)
explicit

Definition at line 1617 of file httplivestreambuffer.cpp.

◆ HLSRingBuffer() [2/2]

HLSRingBuffer::HLSRingBuffer ( const QString &  lfilename,
bool  open 
)

Definition at line 1625 of file httplivestreambuffer.cpp.

◆ ~HLSRingBuffer()

HLSRingBuffer::~HLSRingBuffer ( )
override

Definition at line 1636 of file httplivestreambuffer.cpp.

Member Function Documentation

◆ IsOpen()

bool HLSRingBuffer::IsOpen ( void  ) const
overridevirtual

Implements MythMediaBuffer.

Definition at line 3055 of file httplivestreambuffer.cpp.

◆ GetReadPosition()

long long HLSRingBuffer::GetReadPosition ( void  ) const
overridevirtual

Implements MythMediaBuffer.

Definition at line 3048 of file httplivestreambuffer.cpp.

◆ OpenFile()

bool HLSRingBuffer::OpenFile ( const QString &  lfilename,
std::chrono::milliseconds  retry_ms = kDefaultOpenTimeout 
)
overridevirtual

Opens an HTTP Live Stream for reading.

Parameters
lfilenameUrl of the HTTP live stream to read.
retry_msIgnored. This value is part of the API inherited from the parent class.
Returns
Returns true if the live stream was opened.

Implements MythMediaBuffer.

Definition at line 2611 of file httplivestreambuffer.cpp.

Referenced by HLSRingBuffer().

◆ IsStreamed()

bool HLSRingBuffer::IsStreamed ( void  )
inlineoverridevirtual

Reimplemented from MythMediaBuffer.

Definition at line 49 of file httplivestreambuffer.h.

◆ IsSeekingAllowed()

bool HLSRingBuffer::IsSeekingAllowed ( void  )
inlineoverridevirtual

Reimplemented from MythMediaBuffer.

Definition at line 50 of file httplivestreambuffer.h.

Referenced by SeekInternal().

◆ IsBookmarkAllowed()

bool HLSRingBuffer::IsBookmarkAllowed ( void  )
inlineoverridevirtual

Reimplemented from MythMediaBuffer.

Definition at line 51 of file httplivestreambuffer.h.

◆ IsHTTPLiveStreaming()

bool HLSRingBuffer::IsHTTPLiveStreaming ( QByteArray *  s)
static

Definition at line 1756 of file httplivestreambuffer.cpp.

Referenced by OpenFile(), and TestForHTTPLiveStreaming().

◆ TestForHTTPLiveStreaming()

bool HLSRingBuffer::TestForHTTPLiveStreaming ( const QString &  filename)
static

Definition at line 1790 of file httplivestreambuffer.cpp.

Referenced by MythMediaBuffer::Create().

◆ SaveToDisk()

bool HLSRingBuffer::SaveToDisk ( const QString &  filename,
int  segstart = 0,
int  segend = -1 
)

Definition at line 2699 of file httplivestreambuffer.cpp.

◆ NumStreams()

int HLSRingBuffer::NumStreams ( void  ) const

◆ Interrupt()

void HLSRingBuffer::Interrupt ( void  )

Definition at line 3060 of file httplivestreambuffer.cpp.

◆ Continue()

void HLSRingBuffer::Continue ( void  )

Definition at line 3069 of file httplivestreambuffer.cpp.

◆ DurationForBytes()

int HLSRingBuffer::DurationForBytes ( uint  size)

returns an estimated duration in ms for size amount of data returns 0 if we can't estimate the duration

Definition at line 2862 of file httplivestreambuffer.cpp.

◆ SafeRead()

int HLSRingBuffer::SafeRead ( void *  data,
uint  sz 
)
overrideprotectedvirtual

Implements MythMediaBuffer.

Definition at line 2777 of file httplivestreambuffer.cpp.

◆ GetRealFileSizeInternal()

long long HLSRingBuffer::GetRealFileSizeInternal ( void  ) const
overrideprotectedvirtual

Reimplemented from MythMediaBuffer.

Definition at line 2886 of file httplivestreambuffer.cpp.

◆ SeekInternal()

long long HLSRingBuffer::SeekInternal ( long long  pos,
int  whence 
)
overrideprotectedvirtual

Implements MythMediaBuffer.

Definition at line 2892 of file httplivestreambuffer.cpp.

◆ FreeStreamsList()

void HLSRingBuffer::FreeStreamsList ( QList< HLSStream * > *  streams) const
private

Definition at line 1663 of file httplivestreambuffer.cpp.

Referenced by PlaylistWorker::ReloadPlaylist(), and ~HLSRingBuffer().

◆ GetStreamForSegment()

HLSStream * HLSRingBuffer::GetStreamForSegment ( int  segnum) const
private

Definition at line 1677 of file httplivestreambuffer.cpp.

Referenced by SeekInternal().

◆ GetStream()

HLSStream * HLSRingBuffer::GetStream ( int  wanted,
const StreamsList streams = nullptr 
) const
private

◆ GetFirstStream()

HLSStream * HLSRingBuffer::GetFirstStream ( const StreamsList streams = nullptr) const
private

Definition at line 1701 of file httplivestreambuffer.cpp.

◆ GetLastStream()

HLSStream * HLSRingBuffer::GetLastStream ( const StreamsList streams = nullptr) const
private

Definition at line 1706 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ FindStream()

HLSStream * HLSRingBuffer::FindStream ( const HLSStream hls_new,
const StreamsList streams = nullptr 
) const
private

Definition at line 1719 of file httplivestreambuffer.cpp.

Referenced by PlaylistWorker::ReloadPlaylist().

◆ GetCurrentStream()

HLSStream * HLSRingBuffer::GetCurrentStream ( void  ) const
private

return the stream we are currently streaming from

Definition at line 1747 of file httplivestreambuffer.cpp.

Referenced by GetStreamForSegment(), OpenFile(), PlaylistWorker::run(), SizeMedia(), and WaitUntilBuffered().

◆ ParseAttributes()

QString HLSRingBuffer::ParseAttributes ( const QString &  line,
const char *  attr 
)
staticprivate

Definition at line 1822 of file httplivestreambuffer.cpp.

Referenced by ParseKey(), and ParseStreamInformation().

◆ ParseDecimalValue()

int HLSRingBuffer::ParseDecimalValue ( const QString &  line,
int &  target 
)
staticprivate

Return the decimal argument in a line of type: blah:<decimal> presence of value <decimal> is compulsory or it will return RET_ERROR.

Definition at line 1847 of file httplivestreambuffer.cpp.

Referenced by ParseMediaSequence(), ParseTargetDuration(), and ParseVersion().

◆ ParseSegmentInformation()

int HLSRingBuffer::ParseSegmentInformation ( const HLSStream hls,
const QString &  line,
int &  duration,
QString &  title 
)
staticprivate

Definition at line 1862 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseTargetDuration()

int HLSRingBuffer::ParseTargetDuration ( HLSStream hls,
const QString &  line 
)
staticprivate

Definition at line 1921 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseStreamInformation()

HLSStream * HLSRingBuffer::ParseStreamInformation ( const QString &  line,
const QString &  uri 
) const
private

Definition at line 1939 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseMediaSequence()

int HLSRingBuffer::ParseMediaSequence ( HLSStream hls,
const QString &  line 
)
staticprivate

Definition at line 1982 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseKey()

int HLSRingBuffer::ParseKey ( HLSStream hls,
const QString &  line 
)
private

Definition at line 2011 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseProgramDateTime()

int HLSRingBuffer::ParseProgramDateTime ( HLSStream hls,
const QString &  line 
)
staticprivate

Definition at line 2096 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseAllowCache()

int HLSRingBuffer::ParseAllowCache ( HLSStream hls,
const QString &  line 
)
staticprivate

Definition at line 2107 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseVersion()

int HLSRingBuffer::ParseVersion ( const QString &  line,
int &  version 
)
staticprivate

Definition at line 2131 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseEndList()

int HLSRingBuffer::ParseEndList ( HLSStream hls)
staticprivate

Definition at line 2162 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseDiscontinuity()

int HLSRingBuffer::ParseDiscontinuity ( HLSStream hls,
const QString &  line 
)
staticprivate

Definition at line 2174 of file httplivestreambuffer.cpp.

Referenced by ParseM3U8().

◆ ParseM3U8()

int HLSRingBuffer::ParseM3U8 ( const QByteArray *  buffer,
StreamsList streams = nullptr 
)
private

Definition at line 2181 of file httplivestreambuffer.cpp.

Referenced by PlaylistWorker::GetHTTPLiveMetaPlaylist(), and OpenFile().

◆ Prefetch()

int HLSRingBuffer::Prefetch ( int  count)
private

Preferetch the first x segments of the stream.

Definition at line 2391 of file httplivestreambuffer.cpp.

Referenced by OpenFile().

◆ SanityCheck()

void HLSRingBuffer::SanityCheck ( const HLSStream hls) const
private

Definition at line 2416 of file httplivestreambuffer.cpp.

Referenced by GetSegment().

◆ GetSegment()

HLSSegment * HLSRingBuffer::GetSegment ( int  segnum,
std::chrono::milliseconds  timeout = 1s 
)
private

Retrieve segment [segnum] from any available streams.

Assure that the segment has been downloaded Return nullptr if segment couldn't be retrieved after timeout (in ms)

Definition at line 2442 of file httplivestreambuffer.cpp.

Referenced by SaveToDisk().

◆ NumSegments()

int HLSRingBuffer::NumSegments ( void  ) const
private

◆ ChooseSegment()

int HLSRingBuffer::ChooseSegment ( int  stream) const
private

Definition at line 2494 of file httplivestreambuffer.cpp.

◆ SizeMedia()

int64_t HLSRingBuffer::SizeMedia ( void  ) const
private

Definition at line 2731 of file httplivestreambuffer.cpp.

Referenced by GetRealFileSizeInternal(), and SeekInternal().

◆ WaitUntilBuffered()

void HLSRingBuffer::WaitUntilBuffered ( void  )
private

Wait until we have enough segments buffered to allow smooth playback Do not wait if VOD and at end of buffer.

Definition at line 2748 of file httplivestreambuffer.cpp.

Referenced by SafeRead().

◆ SanitizeStreams()

void HLSRingBuffer::SanitizeStreams ( StreamsList streams = nullptr)
private

Streams may not be all starting at the same sequence number, so attempt to align their starting sequence.

Definition at line 2540 of file httplivestreambuffer.cpp.

Referenced by PlaylistWorker::GetHTTPLiveMetaPlaylist(), and OpenFile().

Friends And Related Function Documentation

◆ StreamWorker

friend class StreamWorker
friend

Definition at line 124 of file httplivestreambuffer.h.

Referenced by OpenFile().

◆ PlaylistWorker

friend class PlaylistWorker
friend

Definition at line 126 of file httplivestreambuffer.h.

Referenced by OpenFile().

Member Data Documentation

◆ m_m3u8

QString HLSRingBuffer::m_m3u8
private

Definition at line 97 of file httplivestreambuffer.h.

Referenced by OpenFile(), ParseM3U8(), and ParseStreamInformation().

◆ m_peeked

QByteArray HLSRingBuffer::m_peeked
private

Definition at line 98 of file httplivestreambuffer.h.

◆ m_playback

HLSPlayback* HLSRingBuffer::m_playback {nullptr}
private

◆ m_streams

StreamsList HLSRingBuffer::m_streams
private

◆ m_lock

QMutex HLSRingBuffer::m_lock
mutableprivate

Definition at line 104 of file httplivestreambuffer.h.

Referenced by Continue(), and Interrupt().

◆ m_meta

bool HLSRingBuffer::m_meta {false}
private

Definition at line 105 of file httplivestreambuffer.h.

Referenced by ParseM3U8(), and StreamWorker::run().

◆ m_error

bool HLSRingBuffer::m_error {false}
private

◆ m_startup

int HLSRingBuffer::m_startup {0}
private

Definition at line 110 of file httplivestreambuffer.h.

Referenced by OpenFile(), and SeekInternal().

◆ m_bitrate

int64_t HLSRingBuffer::m_bitrate {0}
private

assumed bitrate of playback used for the purpose of calculating length and seek position.

the value itself is irrelevant, as it's only used as a common reference

Definition at line 116 of file httplivestreambuffer.h.

Referenced by OpenFile(), SeekInternal(), and SizeMedia().

◆ m_seektoend

bool HLSRingBuffer::m_seektoend {false}
private

FFmpeg seek to the end of the stream in order to determine the length of the video.

Set to boolean to true after we detected a seek to the end this will prevent waiting for new data in safe_read

Definition at line 122 of file httplivestreambuffer.h.

Referenced by SeekInternal(), and WaitUntilBuffered().

◆ m_streamworker

StreamWorker* HLSRingBuffer::m_streamworker {nullptr}
private

◆ m_playlistworker

PlaylistWorker* HLSRingBuffer::m_playlistworker {nullptr}
private

Definition at line 127 of file httplivestreambuffer.h.

Referenced by OpenFile(), and ~HLSRingBuffer().

◆ m_fd

FILE* HLSRingBuffer::m_fd {nullptr}
private

Definition at line 128 of file httplivestreambuffer.h.

Referenced by SafeRead(), and ~HLSRingBuffer().

◆ m_interrupted

bool HLSRingBuffer::m_interrupted {false}
private

◆ m_killed

bool HLSRingBuffer::m_killed {false}
private

Definition at line 130 of file httplivestreambuffer.h.

Referenced by ParseM3U8(), Prefetch(), and ~HLSRingBuffer().


The documentation for this class was generated from the following files: