Conflic fixage
This commit is contained in:
commit
5e507a076e
7 changed files with 269 additions and 9 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -10,3 +10,4 @@ bin/*
|
||||||
gearbox/plugins/001_putserversup.sh
|
gearbox/plugins/001_putserversup.sh
|
||||||
AMF_Tester/AMFtest
|
AMF_Tester/AMFtest
|
||||||
AMF_Creator/AMFtest
|
AMF_Creator/AMFtest
|
||||||
|
ABST_Parser/Box_Parser
|
||||||
|
|
|
@ -3,6 +3,225 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "../util/MP4/box_includes.h"
|
#include "../util/MP4/box_includes.h"
|
||||||
|
|
||||||
|
void Parse( Box * source ,std::string PrintOffset ) {
|
||||||
|
if( source->header.BoxType == 0x61627374 ) {
|
||||||
|
uint8_t Version = source->Payload[0];
|
||||||
|
uint32_t Flags = (source->Payload[1] << 16) + (source->Payload[2] << 8) + (source->Payload[3]); //uint24_t
|
||||||
|
uint32_t BootstrapInfoVersion = (source->Payload[4] << 24) + (source->Payload[5] << 16) +(source->Payload[6] << 8) + (source->Payload[7]);
|
||||||
|
uint8_t Profile = (source->Payload[8] >> 6); //uint2_t
|
||||||
|
uint8_t Live = ((source->Payload[8] >> 5 ) & 0x1); //uint1_t
|
||||||
|
uint8_t Update = ((source->Payload[8] >> 4 ) & 0x1); //uint1_t
|
||||||
|
uint8_t Reserved = (source->Payload[8] & 0x4); //uint4_t
|
||||||
|
uint32_t Timescale = (source->Payload[9] << 24) + (source->Payload[10] << 16) +(source->Payload[11] << 8) + (source->Payload[12]);
|
||||||
|
uint32_t CurrentMediaTime_Upperhalf = (source->Payload[13] << 24) + (source->Payload[14] << 16) +(source->Payload[15] << 8) + (source->Payload[16]);
|
||||||
|
uint32_t CurrentMediaTime_Lowerhalf = (source->Payload[17] << 24) + (source->Payload[18] << 16) +(source->Payload[19] << 8) + (source->Payload[20]);
|
||||||
|
uint32_t SmpteTimeCodeOffset_Upperhalf = (source->Payload[21] << 24) + (source->Payload[22] << 16) +(source->Payload[23] << 8) + (source->Payload[24]);
|
||||||
|
uint32_t SmpteTimeCodeOffset_Lowerhalf = (source->Payload[25] << 24) + (source->Payload[26] << 16) +(source->Payload[27] << 8) + (source->Payload[28]);
|
||||||
|
|
||||||
|
std::string MovieIdentifier;
|
||||||
|
uint8_t ServerEntryCount = -1;
|
||||||
|
std::vector<std::string> ServerEntryTable;
|
||||||
|
uint8_t QualityEntryCount = -1;
|
||||||
|
std::vector<std::string> QualityEntryTable;
|
||||||
|
std::string DrmData;
|
||||||
|
std::string MetaData;
|
||||||
|
uint8_t SegmentRunTableCount = -1;
|
||||||
|
std::vector<Box*> SegmentRunTableEntries;
|
||||||
|
uint8_t FragmentRunTableCount = -1;
|
||||||
|
std::vector<Box*> FragmentRunTableEntries;
|
||||||
|
|
||||||
|
uint32_t CurrentOffset = 29;
|
||||||
|
uint32_t TempSize;
|
||||||
|
Box* TempBox;
|
||||||
|
std::string temp;
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { MovieIdentifier += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
CurrentOffset ++;
|
||||||
|
ServerEntryCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < ServerEntryCount; i++ ) {
|
||||||
|
temp = "";
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { temp += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
ServerEntryTable.push_back(temp);
|
||||||
|
CurrentOffset++;
|
||||||
|
}
|
||||||
|
QualityEntryCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < QualityEntryCount; i++ ) {
|
||||||
|
temp = "";
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { temp += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
QualityEntryTable.push_back(temp);
|
||||||
|
CurrentOffset++;
|
||||||
|
}
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { DrmData += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
CurrentOffset ++;
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { MetaData += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
CurrentOffset ++;
|
||||||
|
SegmentRunTableCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < SegmentRunTableCount; i++ ) {
|
||||||
|
TempSize = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1]<< 16) + (source->Payload[CurrentOffset+2]<< 8) + (source->Payload[CurrentOffset+3]);
|
||||||
|
TempBox = new Box( &source->Payload[CurrentOffset], TempSize );
|
||||||
|
SegmentRunTableEntries.push_back(TempBox);
|
||||||
|
CurrentOffset += TempSize;
|
||||||
|
}
|
||||||
|
FragmentRunTableCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < FragmentRunTableCount; i++ ) {
|
||||||
|
TempSize = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1]<< 16) + (source->Payload[CurrentOffset+2]<< 8) + (source->Payload[CurrentOffset+3]);
|
||||||
|
TempBox = new Box( &source->Payload[CurrentOffset], TempSize );
|
||||||
|
FragmentRunTableEntries.push_back(TempBox);
|
||||||
|
CurrentOffset += TempSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "Box_ABST:\n";
|
||||||
|
std::cerr << PrintOffset << " Version: " << (int)Version << "\n";
|
||||||
|
std::cerr << PrintOffset << " Flags: " << (int)Flags << "\n";
|
||||||
|
std::cerr << PrintOffset << " BootstrapInfoVersion: " << (int)BootstrapInfoVersion << "\n";
|
||||||
|
std::cerr << PrintOffset << " Profile: " << (int)Profile << "\n";
|
||||||
|
std::cerr << PrintOffset << " Live: " << (int)Live << "\n";
|
||||||
|
std::cerr << PrintOffset << " Update: " << (int)Update << "\n";
|
||||||
|
std::cerr << PrintOffset << " Reserved: " << (int)Reserved << "\n";
|
||||||
|
std::cerr << PrintOffset << " Timescale: " << (int)Timescale << "\n";
|
||||||
|
std::cerr << PrintOffset << " CurrentMediaTime: " << (int)CurrentMediaTime_Upperhalf << " " << CurrentMediaTime_Lowerhalf << "\n";
|
||||||
|
std::cerr << PrintOffset << " SmpteTimeCodeOffset: " << (int)SmpteTimeCodeOffset_Upperhalf << " " << SmpteTimeCodeOffset_Lowerhalf << "\n";
|
||||||
|
std::cerr << PrintOffset << " MovieIdentifier: " << MovieIdentifier << "\n";
|
||||||
|
std::cerr << PrintOffset << " ServerEntryCount: " << (int)ServerEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " ServerEntryTable:\n";
|
||||||
|
for( uint32_t i = 0; i < ServerEntryTable.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": " << ServerEntryTable[i] << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << PrintOffset << " QualityEntryCount: " << (int)QualityEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " QualityEntryTable:\n";
|
||||||
|
for( uint32_t i = 0; i < QualityEntryTable.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": " << QualityEntryTable[i] << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << PrintOffset << " DrmData: " << DrmData << "\n";
|
||||||
|
std::cerr << PrintOffset << " MetaData: " << MetaData << "\n";
|
||||||
|
std::cerr << PrintOffset << " SegmentRunTableCount: " << (int)SegmentRunTableCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " SegmentRunTableEntries:\n";
|
||||||
|
for( uint32_t i = 0; i < SegmentRunTableEntries.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": ";
|
||||||
|
Parse( SegmentRunTableEntries[i], PrintOffset+" " );
|
||||||
|
}
|
||||||
|
std::cerr << PrintOffset << " FragmentRunTableCount: " << (int)FragmentRunTableCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " FragmentRunTableEntries:\n";
|
||||||
|
for( uint32_t i = 0; i < FragmentRunTableEntries.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": ";
|
||||||
|
Parse( FragmentRunTableEntries[i], PrintOffset+" " );
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if ( source->header.BoxType == 0x61737274 ) {
|
||||||
|
uint8_t Version = source->Payload[0];
|
||||||
|
uint32_t Flags = (source->Payload[1] << 16) + (source->Payload[2] << 8) + (source->Payload[3]); //uint24_t
|
||||||
|
uint8_t QualityEntryCount;
|
||||||
|
std::vector<std::string> QualitySegmentUrlModifiers;
|
||||||
|
uint32_t SegmentRunEntryCount;
|
||||||
|
std::vector< std::pair<uint32_t,uint32_t> > SegmentRunEntryTable;
|
||||||
|
|
||||||
|
uint32_t CurrentOffset = 4;
|
||||||
|
std::string temp;
|
||||||
|
std::pair<uint32_t,uint32_t> TempPair;
|
||||||
|
QualityEntryCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < QualityEntryCount; i++ ) {
|
||||||
|
temp = "";
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { temp += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
QualitySegmentUrlModifiers.push_back(temp);
|
||||||
|
CurrentOffset++;
|
||||||
|
}
|
||||||
|
SegmentRunEntryCount = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
for( uint8_t i = 0; i < SegmentRunEntryCount; i++ ) {
|
||||||
|
TempPair.first = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2] << 8) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset+=4;
|
||||||
|
TempPair.second = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2] << 8) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset+=4;
|
||||||
|
SegmentRunEntryTable.push_back(TempPair);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "Box_ASRT:\n";
|
||||||
|
std::cerr << PrintOffset << " Version: " << (int)Version << "\n";
|
||||||
|
std::cerr << PrintOffset << " Flags: " << (int)Flags << "\n";
|
||||||
|
std::cerr << PrintOffset << " QualityEntryCount: " << (int)QualityEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " QualitySegmentUrlModifiers:\n";
|
||||||
|
for( uint32_t i = 0; i < QualitySegmentUrlModifiers.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": " << QualitySegmentUrlModifiers[i] << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << PrintOffset << " SegmentRunEntryCount: " << (int)SegmentRunEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " SegmentRunEntryTable:\n";
|
||||||
|
for( uint32_t i = 0; i < SegmentRunEntryTable.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ":\n";
|
||||||
|
std::cerr << PrintOffset << " FirstSegment: " << SegmentRunEntryTable[i].first << "\n";
|
||||||
|
std::cerr << PrintOffset << " FragmentsPerSegment: " << SegmentRunEntryTable[i].second << "\n";
|
||||||
|
}
|
||||||
|
} else if ( source->header.BoxType == 0x61667274 ) {
|
||||||
|
uint8_t Version = source->Payload[0];
|
||||||
|
uint32_t Flags = (source->Payload[1] << 16) + (source->Payload[2] << 8) + (source->Payload[3]); //uint24_t
|
||||||
|
uint32_t TimeScale = (source->Payload[4] << 24) + (source->Payload[5] << 16) + (source->Payload[6] << 8) + (source->Payload[7]);
|
||||||
|
uint8_t QualityEntryCount;
|
||||||
|
std::vector<std::string> QualitySegmentUrlModifiers;
|
||||||
|
uint32_t FragmentRunEntryCount;
|
||||||
|
std::vector<afrt_fragmentrunentry> FragmentRunEntryTable;
|
||||||
|
|
||||||
|
uint32_t CurrentOffset = 8;
|
||||||
|
std::string temp;
|
||||||
|
afrt_fragmentrunentry TempEntry;
|
||||||
|
QualityEntryCount = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset ++;
|
||||||
|
for( uint8_t i = 0; i < QualityEntryCount; i++ ) {
|
||||||
|
temp = "";
|
||||||
|
while( source->Payload[CurrentOffset] != '\0' ) { temp += source->Payload[CurrentOffset]; CurrentOffset ++; }
|
||||||
|
QualitySegmentUrlModifiers.push_back(temp);
|
||||||
|
CurrentOffset++;
|
||||||
|
}
|
||||||
|
FragmentRunEntryCount = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
for( uint8_t i = 0; i < FragmentRunEntryCount; i ++ ) {
|
||||||
|
TempEntry.FirstFragment = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
TempEntry.FirstFragmentTimestamp_Upperhalf = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
TempEntry.FirstFragmentTimestamp = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
TempEntry.FragmentDuration = (source->Payload[CurrentOffset] << 24) + (source->Payload[CurrentOffset+1] << 16) + (source->Payload[CurrentOffset+2]) + (source->Payload[CurrentOffset+3]);
|
||||||
|
CurrentOffset +=4;
|
||||||
|
if( TempEntry.FragmentDuration == 0 ) {
|
||||||
|
TempEntry.DiscontinuityIndicator = source->Payload[CurrentOffset];
|
||||||
|
CurrentOffset++;
|
||||||
|
}
|
||||||
|
FragmentRunEntryTable.push_back(TempEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cerr << "Box_AFRT:\n";
|
||||||
|
std::cerr << PrintOffset << " Version: " << (int)Version << "\n";
|
||||||
|
std::cerr << PrintOffset << " Flags: " << (int)Flags << "\n";
|
||||||
|
std::cerr << PrintOffset << " Timescale: " << (int)TimeScale << "\n";
|
||||||
|
std::cerr << PrintOffset << " QualityEntryCount: " << (int)QualityEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " QualitySegmentUrlModifiers:\n";
|
||||||
|
for( uint32_t i = 0; i < QualitySegmentUrlModifiers.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ": " << QualitySegmentUrlModifiers[i] << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << PrintOffset << " FragmentRunEntryCount: " << (int)FragmentRunEntryCount << "\n";
|
||||||
|
std::cerr << PrintOffset << " FragmentRunEntryTable:\n";
|
||||||
|
for( uint32_t i = 0; i < FragmentRunEntryTable.size( ); i++ ) {
|
||||||
|
std::cerr << PrintOffset << " " << i+1 << ":\n";
|
||||||
|
std::cerr << PrintOffset << " FirstFragment: " << FragmentRunEntryTable[i].FirstFragment << "\n";
|
||||||
|
std::cerr << PrintOffset << " FirstFragmentTimestamp: " << FragmentRunEntryTable[i].FirstFragmentTimestamp_Upperhalf << FragmentRunEntryTable[i].FirstFragmentTimestamp << "\n";
|
||||||
|
std::cerr << PrintOffset << " FragmentDuration: " << FragmentRunEntryTable[i].FragmentDuration << "\n";
|
||||||
|
if( FragmentRunEntryTable[i].FragmentDuration == 0 ) {
|
||||||
|
std::cerr << PrintOffset << " DiscontinuityIndicator: " << (int)FragmentRunEntryTable[i].DiscontinuityIndicator << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
std::cerr << "BoxType '"
|
||||||
|
<< (char)(source->header.BoxType >> 24)
|
||||||
|
<< (char)((source->header.BoxType << 8) >> 24)
|
||||||
|
<< (char)((source->header.BoxType << 16) >> 24)
|
||||||
|
<< (char)((source->header.BoxType << 24) >> 24)
|
||||||
|
<< "' not yet implemented!\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main( ) {
|
int main( ) {
|
||||||
std::string temp;
|
std::string temp;
|
||||||
bool validinp = true;
|
bool validinp = true;
|
||||||
|
@ -16,6 +235,6 @@ int main( ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Box * TestBox = new Box((uint8_t*)temp.c_str( ), temp.size( ));
|
Box * TestBox = new Box((uint8_t*)temp.c_str( ), temp.size( ));
|
||||||
TestBox->Parse( );
|
Parse( TestBox, "" );
|
||||||
delete TestBox;
|
delete TestBox;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/epoll.h>
|
#include <sys/epoll.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
enum {HANDLER_NONE, HANDLER_PROGRESSIVE, HANDLER_FLASH, HANDLER_APPLE, HANDLER_MICRO};
|
enum {HANDLER_NONE, HANDLER_PROGRESSIVE, HANDLER_FLASH, HANDLER_APPLE, HANDLER_MICRO};
|
||||||
|
|
||||||
|
@ -101,8 +102,8 @@ std::string BuildManifest( std::string MetaData, std::string MovieId, int Curren
|
||||||
Result += "<streamType>live</streamType>\n";
|
Result += "<streamType>live</streamType>\n";
|
||||||
Result += "<deliveryType>streaming</deliveryType>\n";
|
Result += "<deliveryType>streaming</deliveryType>\n";
|
||||||
Result += "<bootstrapInfo profile=\"named\" id=\"bootstrap1\">";
|
Result += "<bootstrapInfo profile=\"named\" id=\"bootstrap1\">";
|
||||||
// Result += base64_encode(temp->GenerateLiveBootstrap(1));
|
Result += base64_encode(temp->GenerateLiveBootstrap(1));
|
||||||
Result += "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";
|
// Result += "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";
|
||||||
Result += "</bootstrapInfo>\n";
|
Result += "</bootstrapInfo>\n";
|
||||||
Result += "<media streamId=\"1\" bootstrapInfoId=\"bootstrap1\" url=\"";
|
Result += "<media streamId=\"1\" bootstrapInfoId=\"bootstrap1\" url=\"";
|
||||||
Result += MovieId;
|
Result += MovieId;
|
||||||
|
@ -181,6 +182,14 @@ int mainHandler(int CONN_fd){
|
||||||
temp = HTTP_R.url.find("Frag") + 4;
|
temp = HTTP_R.url.find("Frag") + 4;
|
||||||
ReqFragment = atoi( HTTP_R.url.substr(temp).c_str() );
|
ReqFragment = atoi( HTTP_R.url.substr(temp).c_str() );
|
||||||
#if DEBUG >= 4
|
#if DEBUG >= 4
|
||||||
|
/* strftime example */
|
||||||
|
time_t rawtime;
|
||||||
|
struct tm * timeinfo;
|
||||||
|
char timebuffer [80];
|
||||||
|
time ( &rawtime );
|
||||||
|
timeinfo = localtime ( &rawtime );
|
||||||
|
strftime (timebuffer,80,"%H:%M.%S.",timeinfo);
|
||||||
|
fprintf(stderr, "< %s >\t", timebuffer );
|
||||||
printf( "URL: %s\n", HTTP_R.url.c_str());
|
printf( "URL: %s\n", HTTP_R.url.c_str());
|
||||||
printf( "Movie: %s, Quality: %s, Seg %d Frag %d\n", Movie.c_str(), Quality.c_str(), Segment, ReqFragment);
|
printf( "Movie: %s, Quality: %s, Seg %d Frag %d\n", Movie.c_str(), Quality.c_str(), Segment, ReqFragment);
|
||||||
#endif
|
#endif
|
||||||
|
@ -241,6 +250,14 @@ int mainHandler(int CONN_fd){
|
||||||
HTTP_S.SendResponse(CONN_fd, "200", "OK");//schrijf de HTTP response header
|
HTTP_S.SendResponse(CONN_fd, "200", "OK");//schrijf de HTTP response header
|
||||||
Flash_RequestPending--;
|
Flash_RequestPending--;
|
||||||
#if DEBUG >= 3
|
#if DEBUG >= 3
|
||||||
|
/* strftime example */
|
||||||
|
time_t rawtime;
|
||||||
|
struct tm * timeinfo;
|
||||||
|
char timebuffer [80];
|
||||||
|
time ( &rawtime );
|
||||||
|
timeinfo = localtime ( &rawtime );
|
||||||
|
strftime (timebuffer,80,"%H:%M.%S.",timeinfo);
|
||||||
|
fprintf(stderr, "< %s >\t", timebuffer );
|
||||||
fprintf(stderr, "Sending a video fragment. %i left in buffer, %i requested\n", (int)Flash_FragBuffer.size(), Flash_RequestPending);
|
fprintf(stderr, "Sending a video fragment. %i left in buffer, %i requested\n", (int)Flash_FragBuffer.size(), Flash_RequestPending);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -281,7 +298,18 @@ int mainHandler(int CONN_fd){
|
||||||
if (FlashBuf != ""){
|
if (FlashBuf != ""){
|
||||||
Flash_FragBuffer.push(FlashBuf);
|
Flash_FragBuffer.push(FlashBuf);
|
||||||
#if DEBUG >= 4
|
#if DEBUG >= 4
|
||||||
|
<<<<<<< HEAD
|
||||||
fprintf(stderr, "Received a fragment. Now %i in buffer.\n", (int)Flash_FragBuffer.size());
|
fprintf(stderr, "Received a fragment. Now %i in buffer.\n", (int)Flash_FragBuffer.size());
|
||||||
|
=======
|
||||||
|
time_t rawtime;
|
||||||
|
struct tm * timeinfo;
|
||||||
|
char timebuffer [80];
|
||||||
|
time ( &rawtime );
|
||||||
|
timeinfo = localtime ( &rawtime );
|
||||||
|
strftime (timebuffer,80,"%H:%M.%S.",timeinfo);
|
||||||
|
fprintf(stderr, "< %s >\t", timebuffer );
|
||||||
|
fprintf(stderr, "Received a fragment. Now %i in buffer.\n", (int)Flash_FragBuffer.size());
|
||||||
|
>>>>>>> 7520f5799f3da3c1a89a28fd4d62358b0028d8d2
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
FlashBuf.clear();
|
FlashBuf.clear();
|
||||||
|
|
|
@ -41,8 +41,10 @@ class Box {
|
||||||
static uint8_t * uint8_to_uint8( uint8_t data );
|
static uint8_t * uint8_to_uint8( uint8_t data );
|
||||||
BoxHeader GetHeader( );
|
BoxHeader GetHeader( );
|
||||||
void ResetPayload( );
|
void ResetPayload( );
|
||||||
void Parse( std::string PrintOffset = "" );
|
void Parse( std::string PrintOffset );
|
||||||
|
void * Parse( );
|
||||||
uint8_t * Payload;
|
uint8_t * Payload;
|
||||||
|
BoxHeader header;
|
||||||
uint32_t PayloadSize;
|
uint32_t PayloadSize;
|
||||||
private:
|
private:
|
||||||
BoxHeader header;
|
BoxHeader header;
|
||||||
|
@ -175,6 +177,7 @@ void Box::ResetPayload( ) {
|
||||||
Payload = NULL;
|
Payload = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
void Box::Parse( std::string PrintOffset ) {
|
void Box::Parse( std::string PrintOffset ) {
|
||||||
if( header.BoxType == 0x61627374 ) {
|
if( header.BoxType == 0x61627374 ) {
|
||||||
|
@ -396,3 +399,5 @@ void Box::Parse( std::string PrintOffset ) {
|
||||||
<< "' not yet implemented!\n";
|
<< "' not yet implemented!\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
=======
|
||||||
|
>>>>>>> 7520f5799f3da3c1a89a28fd4d62358b0028d8d2
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
#pragma once
|
||||||
#include "box.cpp"
|
#include "box.cpp"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
struct abst_serverentry {
|
struct abst_serverentry {
|
||||||
std::string ServerBaseUrl;
|
std::string ServerBaseUrl;
|
||||||
};//abst_serverentry
|
};//abst_serverentry
|
||||||
|
@ -156,7 +158,6 @@ void Box_abst::SetVersion( bool NewVersion) {
|
||||||
Version = NewVersion;
|
Version = NewVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Box_abst::SetReserved( ) {
|
void Box_abst::SetReserved( ) {
|
||||||
Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0));
|
Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0));
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,11 @@ class Box_asrt {
|
||||||
void AddQualityEntry( std::string Quality = "", uint32_t Offset = 0 );
|
void AddQualityEntry( std::string Quality = "", uint32_t Offset = 0 );
|
||||||
void AddSegmentRunEntry( uint32_t FirstSegment = 0, uint32_t FragmentsPerSegment = 100, uint32_t Offset = 0 );
|
void AddSegmentRunEntry( uint32_t FirstSegment = 0, uint32_t FragmentsPerSegment = 100, uint32_t Offset = 0 );
|
||||||
void WriteContent( );
|
void WriteContent( );
|
||||||
|
void SetVersion( bool NewVersion = 0 );
|
||||||
private:
|
private:
|
||||||
void SetDefaults( );
|
void SetDefaults( );
|
||||||
bool isUpdate;
|
bool isUpdate;
|
||||||
|
bool Version;
|
||||||
std::vector<std::string> QualitySegmentUrlModifiers;
|
std::vector<std::string> QualitySegmentUrlModifiers;
|
||||||
std::vector<asrt_segmentrunentry> SegmentRunEntryTable;
|
std::vector<asrt_segmentrunentry> SegmentRunEntryTable;
|
||||||
Box * Container;
|
Box * Container;
|
||||||
|
@ -55,6 +57,10 @@ void Box_asrt::AddSegmentRunEntry( uint32_t FirstSegment, uint32_t FragmentsPerS
|
||||||
SegmentRunEntryTable[Offset].FragmentsPerSegment = FragmentsPerSegment;
|
SegmentRunEntryTable[Offset].FragmentsPerSegment = FragmentsPerSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Box_asrt::SetVersion( bool NewVersion ) {
|
||||||
|
Version = NewVersion;
|
||||||
|
}
|
||||||
|
|
||||||
void Box_asrt::SetDefaults( ) {
|
void Box_asrt::SetDefaults( ) {
|
||||||
SetUpdate( );
|
SetUpdate( );
|
||||||
}
|
}
|
||||||
|
|
|
@ -547,22 +547,22 @@ std::string Interface::GenerateLiveBootstrap( uint32_t CurMediaTime ) {
|
||||||
afrt->SetUpdate(false);
|
afrt->SetUpdate(false);
|
||||||
afrt->SetTimeScale( 1000 );
|
afrt->SetTimeScale( 1000 );
|
||||||
afrt->AddQualityEntry( "" );
|
afrt->AddQualityEntry( "" );
|
||||||
afrt->AddFragmentRunEntry( 1, CurMediaTime, 4000 );
|
afrt->AddFragmentRunEntry( 1, 596458 , 4000 );
|
||||||
afrt->WriteContent( );
|
afrt->WriteContent( );
|
||||||
|
|
||||||
//SetUpASRT
|
//SetUpASRT
|
||||||
asrt->SetUpdate(false);
|
asrt->SetUpdate(false);
|
||||||
asrt->AddQualityEntry( "" );
|
asrt->AddQualityEntry( "" );
|
||||||
asrt->AddSegmentRunEntry( 1, 0xFFFFFFFF );
|
asrt->AddSegmentRunEntry( 1, 199 );
|
||||||
asrt->WriteContent( );
|
asrt->WriteContent( );
|
||||||
|
|
||||||
//SetUpABST
|
//SetUpABST
|
||||||
abst->SetBootstrapVersion( 1 );
|
abst->SetBootstrapVersion( 1 );
|
||||||
abst->SetProfile( 0 );
|
abst->SetProfile( 0 );
|
||||||
// abst->SetLive( true );
|
abst->SetLive( true );
|
||||||
abst->SetUpdate( false );
|
abst->SetUpdate( false );
|
||||||
abst->SetTimeScale( 1000 );
|
abst->SetTimeScale( 1000 );
|
||||||
abst->SetMediaTime( CurMediaTime );
|
abst->SetMediaTime( 596458 );
|
||||||
abst->SetSMPTE( 0 );
|
abst->SetSMPTE( 0 );
|
||||||
abst->SetMovieIdentifier( "" );
|
abst->SetMovieIdentifier( "" );
|
||||||
abst->SetDRM( "" );
|
abst->SetDRM( "" );
|
||||||
|
|
Loading…
Add table
Reference in a new issue