Moved HLS-specific TS output handling from output_ts_base to output_hls
This commit is contained in:
parent
af96a8577d
commit
f69fe8a4fb
4 changed files with 18 additions and 11 deletions
|
@ -108,6 +108,7 @@ namespace Mist {
|
||||||
|
|
||||||
OutHLS::OutHLS(Socket::Connection & conn) : TSOutput(conn){
|
OutHLS::OutHLS(Socket::Connection & conn) : TSOutput(conn){
|
||||||
realTime = 0;
|
realTime = 0;
|
||||||
|
until=0xFFFFFFFFFFFFFFFFull;
|
||||||
}
|
}
|
||||||
|
|
||||||
OutHLS::~OutHLS() {}
|
OutHLS::~OutHLS() {}
|
||||||
|
@ -270,6 +271,19 @@ namespace Mist {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutHLS::sendNext(){
|
||||||
|
//First check if we need to stop.
|
||||||
|
if (thisPacket.getTime() >= until){
|
||||||
|
stop();
|
||||||
|
wantRequest = true;
|
||||||
|
parseData = false;
|
||||||
|
//Ensure alignment of contCounters for selected tracks, to prevent discontinuities.
|
||||||
|
H.Chunkify("", 0, myConn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Invoke the generic TS output sendNext handler
|
||||||
|
TSOutput::sendNext();
|
||||||
|
}
|
||||||
|
|
||||||
void OutHLS::sendTS(const char * tsData, unsigned int len){
|
void OutHLS::sendTS(const char * tsData, unsigned int len){
|
||||||
H.Chunkify(tsData, len, myConn);
|
H.Chunkify(tsData, len, myConn);
|
||||||
|
|
|
@ -8,6 +8,7 @@ namespace Mist {
|
||||||
~OutHLS();
|
~OutHLS();
|
||||||
static void init(Util::Config * cfg);
|
static void init(Util::Config * cfg);
|
||||||
void sendTS(const char * tsData, unsigned int len=188);
|
void sendTS(const char * tsData, unsigned int len=188);
|
||||||
|
void sendNext();
|
||||||
void onHTTP();
|
void onHTTP();
|
||||||
bool isReadyForPlay();
|
bool isReadyForPlay();
|
||||||
protected:
|
protected:
|
||||||
|
@ -18,6 +19,7 @@ namespace Mist {
|
||||||
int keysToSend;
|
int keysToSend;
|
||||||
unsigned int vidTrack;
|
unsigned int vidTrack;
|
||||||
unsigned int audTrack;
|
unsigned int audTrack;
|
||||||
|
long long unsigned int until;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ namespace Mist {
|
||||||
packCounter=0;
|
packCounter=0;
|
||||||
haveAvcc = false;
|
haveAvcc = false;
|
||||||
ts_from = 0;
|
ts_from = 0;
|
||||||
until=0xFFFFFFFFFFFFFFFFull;
|
|
||||||
setBlocking(true);
|
setBlocking(true);
|
||||||
sendRepeatingHeaders = false;
|
sendRepeatingHeaders = false;
|
||||||
appleCompat=false;
|
appleCompat=false;
|
||||||
|
@ -30,7 +29,7 @@ namespace Mist {
|
||||||
if (!dataLen){return;}
|
if (!dataLen){return;}
|
||||||
|
|
||||||
if (packData.getBytesFree() == 184){
|
if (packData.getBytesFree() == 184){
|
||||||
packData.clear();
|
packData.clear();
|
||||||
packData.setPID(pkgPid);
|
packData.setPID(pkgPid);
|
||||||
packData.setContinuityCounter(++contPkg);
|
packData.setContinuityCounter(++contPkg);
|
||||||
if (firstPack){
|
if (firstPack){
|
||||||
|
@ -68,13 +67,6 @@ namespace Mist {
|
||||||
char * dataPointer = 0;
|
char * dataPointer = 0;
|
||||||
unsigned int dataLen = 0;
|
unsigned int dataLen = 0;
|
||||||
thisPacket.getString("data", dataPointer, dataLen); //data
|
thisPacket.getString("data", dataPointer, dataLen); //data
|
||||||
if (packTime >= until){ //this if should only trigger for HLS
|
|
||||||
stop();
|
|
||||||
wantRequest = true;
|
|
||||||
parseData = false;
|
|
||||||
sendTS("",0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//apple compatibility timestamp correction
|
//apple compatibility timestamp correction
|
||||||
if (appleCompat){
|
if (appleCompat){
|
||||||
packTime -= ts_from;
|
packTime -= ts_from;
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace Mist {
|
||||||
public:
|
public:
|
||||||
TSOutput(Socket::Connection & conn);
|
TSOutput(Socket::Connection & conn);
|
||||||
virtual ~TSOutput(){};
|
virtual ~TSOutput(){};
|
||||||
void sendNext();
|
virtual void sendNext();
|
||||||
virtual void sendTS(const char * tsData, unsigned int len=188){};
|
virtual void sendTS(const char * tsData, unsigned int len=188){};
|
||||||
void fillPacket(char const * data, size_t dataLen, bool & firstPack, bool video, bool keyframe, uint32_t pkgPid, int & contPkg);
|
void fillPacket(char const * data, size_t dataLen, bool & firstPack, bool video, bool keyframe, uint32_t pkgPid, int & contPkg);
|
||||||
protected:
|
protected:
|
||||||
|
@ -29,7 +29,6 @@ namespace Mist {
|
||||||
bool appleCompat;
|
bool appleCompat;
|
||||||
bool sendRepeatingHeaders;
|
bool sendRepeatingHeaders;
|
||||||
long long unsigned int ts_from;
|
long long unsigned int ts_from;
|
||||||
long long unsigned int until;
|
|
||||||
long long unsigned int lastVid;
|
long long unsigned int lastVid;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue