Fixed messed up merge. Really, guys?

This commit is contained in:
Thulinma 2014-08-29 22:54:00 +02:00
parent 80f3588b56
commit 6890632e9d
3 changed files with 36 additions and 30 deletions

View file

@ -112,8 +112,37 @@ namespace Mist {
cfg->addBasicConnectorOptions(capa);
config = cfg;
}
//HIER
///this function generates the PMT packet
std::string OutHLS::createPMT(){
TS::ProgramMappingTable PMT;
PMT.PID(4096);
PMT.setTableId(2);
PMT.setSectionLength(0xB017);
PMT.setProgramNumber(1);
PMT.setVersionNumber(0);
PMT.setCurrentNextIndicator(0);
PMT.setSectionNumber(0);
PMT.setLastSectionNumber(0);
PMT.setPCRPID(0x100 + (*(selectedTracks.begin())) - 1);
PMT.setProgramInfoLength(0);
short id = 0;
//for all selected tracks
for (std::set<long unsigned int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){
if (myMeta.tracks[*it].codec == "H264"){
PMT.setStreamType(0x1B,id);
}else if (myMeta.tracks[*it].codec == "AAC"){
PMT.setStreamType(0x0F,id);
}else if (myMeta.tracks[*it].codec == "MP3"){
PMT.setStreamType(0x03,id);
}
PMT.setElementaryPID(0x100 + (*it) - 1, id);
PMT.setESInfoLength(0,id);
id++;
}
PMT.calcCRC();
return PMT.getStrBuf();
}
void OutHLS::fillPacket(bool & first, const char * data, size_t dataLen, char & ContCounter){
@ -123,7 +152,8 @@ namespace Mist {
PackData.Clear();
if (PacketNumber % 42 == 0){
HTTP_S.Chunkify(TS::PAT, 188, myConn);
HTTP_S.Chunkify(TS::PMT, 188, myConn);
std::string PMT = createPMT();
HTTP_S.Chunkify(PMT, myConn);
PacketNumber += 2;
}
}
@ -131,11 +161,7 @@ namespace Mist {
if (!dataLen){return;}
if (PackData.BytesFree() == 184){
if (myMeta.tracks[currentPacket.getTrackId()].type == "video"){
PackData.PID(0x100);
}else{
PackData.PID(0x101);
}
PackData.PID(0x100 - 1 + currentPacket.getTrackId());
PackData.ContinuityCounter(ContCounter++);
if (first){
PackData.UnitStart(1);

View file

@ -10,13 +10,13 @@ namespace Mist {
OutHLS(Socket::Connection & conn);
~OutHLS();
static void init(Util::Config * cfg);
void onRequest();
void onFail();
void sendNext();
protected:
HTTP::Parser HTTP_S;
HTTP::Parser HTTP_R;
HTTP::Parser HTTP_R;
std::string createPMT();
void fillPacket(bool & first, const char * data, size_t dataLen, char & ContCounter);
std::string liveIndex();
std::string liveIndex(int tid);

View file

@ -67,11 +67,7 @@ namespace Mist {
if (!dataLen){return;}
if (PackData.BytesFree() == 184){
if (myMeta.tracks[currentPacket.getTrackId()].type == "video"){
PackData.PID(0x100);
}else{
PackData.PID(0x101);
}
PackData.PID(0x100 - 1 + currentPacket.getTrackId());
PackData.ContinuityCounter(ContCounter++);
if (first){
PackData.UnitStart(1);
@ -138,21 +134,6 @@ namespace Mist {
///this function generates the PMT packet
std::string OutTS::createPMT(){
//0x02 = table ID = 2 = PMT
//0xB017 = section syntax(1) = 1, 0(1)=0, reserved(2) = 3, section_len(12) = 23
//0x0001 = ProgNo = 1
//0xC1 = reserved(2) = 3, version(5)=0, curr_next_indi(1) = 1
//0x00 = section_number = 0
//0x00 = last_section_no = 0
//0xE100 = reserved(3) = 7, PCR_PID(13) = 0x100
//0xF000 = reserved(4) = 15, proginfolen = 0
//0x1B = streamtype = 27 = H264
//0xE100 = reserved(3) = 7, elem_ID(13) = 0x100
//0xF000 = reserved(4) = 15, es_info_len = 0
//0x0F = streamtype = 15 = audio with ADTS transport syntax
//0xE101 = reserved(3) = 7, elem_ID(13) = 0x101
//0xF000 = reserved(4) = 15, es_info_len = 0
//0x2F44B99B = CRC32
TS::ProgramMappingTable PMT;
PMT.PID(4096);
PMT.setTableId(2);
@ -179,7 +160,6 @@ namespace Mist {
id++;
}
PMT.calcCRC();
INFO_MSG("stringsize: %d %s", PMT.getStrBuf().size(), PMT.toPrettyString(0).c_str());
return PMT.getStrBuf();
}