mistserver/src/output/output_progressive_mp4.h

49 lines
1.4 KiB
C++

#include "output_http.h"
#include <mist/http_parser.h>
namespace Mist {
struct keyPart{
public:
bool operator < (const keyPart& rhs) const {
if (time < rhs.time){
return true;
}
if (time == rhs.time){
if (trackID < rhs.trackID){
return true;
}
}
return false;
}
long unsigned int trackID;
long unsigned int size;
long long unsigned int time;
long long unsigned int endTime;
long unsigned int index;
};
class OutProgressiveMP4 : public HTTPOutput {
public:
OutProgressiveMP4(Socket::Connection & conn);
~OutProgressiveMP4();
static void init(Util::Config * cfg);
void parseRange(std::string header, long long & byteStart, long long & byteEnd, long long & seekPoint, unsigned int headerSize);
std::string DTSCMeta2MP4Header(long long & size);
void findSeekPoint(long long byteStart, long long & seekPoint, unsigned int headerSize);
void onHTTP();
void sendNext();
void sendHeader();
protected:
long long fileSize;
long long byteStart;
long long byteEnd;
long long leftOver;
long long currPos;
long long seekPoint;
std::set <keyPart> sortSet;//filling sortset for interleaving parts
long long unsigned estimateFileSize();
};
}
typedef Mist::OutProgressiveMP4 mistOut;