MistServer
2.5.3-Pro-19-gf5e75b1 ( Generic_64)
|
The output class is intended to be inherited by MistOut process classes. More...
#include <output.h>
Public Member Functions | |
Output (Socket::Connection &conn) | |
virtual | ~Output () |
void | bufferFinalize (unsigned long tid) |
Wraps up the buffering of a shared memory data page. More... | |
void | bufferLivePacket (JSON::Value &packet) |
Buffers a live packet to a page. More... | |
void | bufferLivePacket (DTSC::Packet &packet) |
Buffers a live packet to a page. More... | |
void | bufferNext (DTSC::Packet &pack) |
Buffers the next packet on the currently opened page. More... | |
void | bufferNext (JSON::Value &pack) |
Buffers the next packet on the currently opened page. More... | |
void | bufferRemove (unsigned long tid, unsigned long pageNumber) |
Removes a fully buffered page. More... | |
bool | bufferStart (unsigned long tid, unsigned long pageNumber) |
bool | closeOutputFileForRecording () |
long unsigned int | getMainSelectedTrack () |
Returns the ID of the main selected track, or 0 if no tracks are selected. More... | |
virtual void | initialize () |
void | initiateMeta () |
Opens a shared memory page for the stream metadata. More... | |
virtual void | onFail () |
Called when stream initialization has failed. More... | |
virtual bool | onFinish () |
virtual void | onRecord () |
virtual void | onRequest () |
bool | openOutputFileForRecording () |
virtual void | prepareNext () |
void | reconnect () |
Connects or reconnects to the stream. More... | |
virtual void | requestHandler () |
int | run () |
void | seek (unsigned long long pos) |
Prepares all tracks from selectedTracks for seeking to the specified ms position. More... | |
bool | seek (unsigned int tid, unsigned long long pos, bool getNextKey=false) |
void | selectDefaultTracks () |
virtual void | sendHeader () |
virtual void | sendNext () |
void | setBlocking (bool blocking) |
void | stats () |
void | stop () |
Clears the buffer, sets parseData to false, and generally makes not very much happen at all. More... | |
void | updateMeta () |
Static Public Member Functions | |
static void | init (Util::Config *cfg) |
static bool | listenMode () |
Data Fields | |
std::string | reqUrl |
Static Public Attributes | |
static JSON::Value | capa = JSON::Value() |
Protected Member Functions | |
void | continueNegotiate (unsigned long tid) |
virtual std::string | getConnectedBinHost () |
virtual std::string | getConnectedHost () |
unsigned int | getKeyForTime (long unsigned int trackId, long long timeStamp) |
bool | recording () |
Protected Attributes | |
std::map< int, DTSCPageData > | bookKeeping |
bool | completeKeysOnly |
Bool if we send whole keys only, so the metadata is complete and the output knows in advance what will be sent. More... | |
unsigned int | crc |
Checksum, if any, for usage in the stats. More... | |
bool | isBlocking |
If true, indicates that myConn is blocking. More... | |
bool | isInitialized |
If false, triggers initialization if parseData is true. More... | |
unsigned int | maxSkipAhead |
Maximum ms that we will go ahead of the intended timestamps. More... | |
unsigned int | minSkipAhead |
Minimum ms that we will go ahead of the intended timestamps. More... | |
Socket::Connection & | myConn |
Connection to the client. More... | |
DTSC::Meta | myMeta |
Stores either the input or output metadata. More... | |
negotiationProxy | nProxy |
int | outputFileDescriptor |
bool | parseData |
If true, triggers initalization if not already done, sending of header, sending of packets. More... | |
unsigned int | realTime |
Playback speed in ms of data per second. eg: 0 is infinite, 1000 real-time, 5000 is 0.2X speed, 500 = 2X speed. More... | |
std::set< unsigned long > | selectedTracks |
Stores the track id's that are either selected for playback or input. More... | |
bool | sentHeader |
If false, triggers sendHeader if parseData is true. More... | |
bool | standAlone |
IPC::sharedClient | statsPage |
Shared memory used for statistics reporting. More... | |
std::string | streamName |
DTSC::Packet | thisPacket |
bool | wantRequest |
If true, waits for a request. More... | |
Static Protected Attributes | |
static Util::Config * | config = NULL |
Private Member Functions | |
bool | checkLimits () |
std::string | getCountry (std::string ip) |
std::string | hostLookup (std::string ip) |
bool | isBlacklisted (std::string host, std::string streamName, int timeConnected) |
void | loadPageForKey (long unsigned int trackId, long long int keyNum) |
void | Log (std::string type, std::string message) |
bool | onList (std::string ip, std::string list) |
int | pageNumForKey (long unsigned int trackId, long long int keyNum) |
Private Attributes | |
std::set< sortedPageInfo > | buffer |
A sorted list of next-to-be-loaded packets. More... | |
bool | completeKeyReadyTimeOut |
std::map< unsigned long, unsigned int > | currKeyOpen |
long long unsigned int | firstTime |
Time of first packet after last seek. Used for real-time sending. More... | |
unsigned int | lastStats |
Time of last sending of stats. More... | |
std::map< unsigned long, unsigned long > | nxtKeyNum |
Contains the number of the next key, for page seeking purposes. More... | |
bool | sought |
If a seek has been done, this is set to true. Used for seeking on prepareNext(). More... | |
The output class is intended to be inherited by MistOut process classes.
It contains all generic code and logic, while the child classes implement anything specific to particular protocols or containers. It contains several virtual functions, that may be overridden to "hook" into the streaming process at those particular points, simplifying child class logic and implementation details.
Mist::Output::Output | ( | Socket::Connection & | conn | ) |
|
virtual |
|
inherited |
Wraps up the buffering of a shared memory data page.
Registers the data page on the track index page as well
tid | The trackid of the page to finalize |
|
inherited |
Buffers a live packet to a page.
Handles both buffering and creation of new pages
Initiates/continues negotiation with the buffer as well
packet | The packet to buffer |
|
inherited |
Buffers a live packet to a page.
Handles both buffering and creation of new pages
Initiates/continues negotiation with the buffer as well
packet | The packet to buffer |
|
inherited |
Buffers the next packet on the currently opened page.
pack | The packet to buffer |
|
inherited |
Buffers the next packet on the currently opened page.
pack | The packet to buffer |
|
inherited |
Removes a fully buffered page.
Does not do anything if the process is not standalone, in this case the master process will have an overloaded version of this function.
tid | The trackid to remove the page from |
pageNumber | The number of the page to remove |
|
inherited |
|
private |
bool Mist::Output::closeOutputFileForRecording | ( | ) |
|
protectedinherited |
|
protectedvirtual |
Reimplemented in Mist::HTTPOutput.
|
protectedvirtual |
Reimplemented in Mist::HTTPOutput.
|
private |
|
protected |
long unsigned int Mist::Output::getMainSelectedTrack | ( | ) |
Returns the ID of the main selected track, or 0 if no tracks are selected.
The main track is the first video track, if any, and otherwise the first other track.
|
private |
|
static |
|
virtual |
"CONN_PLAY"
trigger is stream-specific, and is ran when an active connection first opens a stream.Its payload is:
The "USER_NEW"
trigger is stream-specific, and is ran when a new user first opens a stream. Segmented protcols are unduplicated over the duration of the statistics log (~10 minutes), true streaming protocols (RTMP, RTSP) are not deduplicated as no duplication ever takes place. Its payload is:
Reimplemented in Mist::OutDashMP4.
|
inherited |
Opens a shared memory page for the stream metadata.
Assumes myMeta contains the metadata to write.
|
private |
|
inlinestatic |
|
private |
|
private |
|
virtual |
Called when stream initialization has failed.
The standard implementation will set isInitialized to false and close the client connection, thus causing the process to exit cleanly.
Reimplemented in Mist::HTTPOutput, and Mist::OutHTTP.
|
inlinevirtual |
Reimplemented in Mist::OutProgressiveOGG, and Mist::OutJSON.
|
private |
|
inlinevirtual |
Reimplemented in Mist::HTTPOutput.
|
virtual |
Reimplemented in Mist::OutRTSP, Mist::OutRTMP, Mist::HTTPOutput, and Mist::OutProgressiveOGG.
bool Mist::Output::openOutputFileForRecording | ( | ) |
|
private |
|
virtual |
void Mist::Output::reconnect | ( | ) |
Connects or reconnects to the stream.
Assumes streamName class member has been set already. Will start input if not currently active, calls onFail() if this does not succeed. After assuring stream is online, clears nProxy.metaPages, then sets nProxy.metaPages[0], statsPage and nProxy.userClient to (hopefully) valid handles. Finally, calls updateMeta()
|
protected |
|
virtual |
Reimplemented in Mist::HTTPOutput, and Mist::OutPush.
int Mist::Output::run | ( | ) |
"CONN_OPEN"
trigger is stream-specific, and is ran when a connection is made or passed to a new handler.Its payload is:
The "CONN_CLOSE"
trigger is stream-specific, and is ran when a connection closes. Its payload is:
void Mist::Output::seek | ( | unsigned long long | pos | ) |
Prepares all tracks from selectedTracks for seeking to the specified ms position.
bool Mist::Output::seek | ( | unsigned int | tid, |
unsigned long long | pos, | ||
bool | getNextKey = false |
||
) |
void Mist::Output::selectDefaultTracks | ( | ) |
|
virtual |
|
inlinevirtual |
void Mist::Output::setBlocking | ( | bool | blocking | ) |
void Mist::Output::stats | ( | ) |
void Mist::Output::stop | ( | ) |
Clears the buffer, sets parseData to false, and generally makes not very much happen at all.
void Mist::Output::updateMeta | ( | ) |
|
protected |
|
private |
A sorted list of next-to-be-loaded packets.
|
static |
|
private |
|
protected |
Bool if we send whole keys only, so the metadata is complete and the output knows in advance what will be sent.
|
staticprotectedinherited |
|
protected |
Checksum, if any, for usage in the stats.
|
private |
|
private |
Time of first packet after last seek. Used for real-time sending.
|
protected |
If true, indicates that myConn is blocking.
|
protected |
If false, triggers initialization if parseData is true.
|
private |
Time of last sending of stats.
|
protected |
Maximum ms that we will go ahead of the intended timestamps.
|
protected |
Minimum ms that we will go ahead of the intended timestamps.
|
protected |
Connection to the client.
|
protectedinherited |
Stores either the input or output metadata.
|
protectedinherited |
|
private |
Contains the number of the next key, for page seeking purposes.
|
protected |
|
protected |
If true, triggers initalization if not already done, sending of header, sending of packets.
|
protected |
Playback speed in ms of data per second. eg: 0 is infinite, 1000 real-time, 5000 is 0.2X speed, 500 = 2X speed.
std::string Mist::Output::reqUrl |
|
protectedinherited |
Stores the track id's that are either selected for playback or input.
|
protected |
If false, triggers sendHeader if parseData is true.
|
private |
If a seek has been done, this is set to true. Used for seeking on prepareNext().
|
protectedinherited |
|
protected |
Shared memory used for statistics reporting.
|
protectedinherited |
|
protectedinherited |
|
protected |
If true, waits for a request.