Updated FLV library to use DTSC::Meta instead of JSON::Value

This commit is contained in:
Thulinma 2013-11-28 15:55:40 +01:00
parent 09e4f597a3
commit 3b3630ea77
2 changed files with 34 additions and 82 deletions

View file

@ -923,7 +923,7 @@ bool FLV::Tag::FileLoader(FILE * f){
return false; return false;
} //FLV_GetPacket } //FLV_GetPacket
JSON::Value FLV::Tag::toJSON(JSON::Value & metadata){ JSON::Value FLV::Tag::toJSON(DTSC::Meta & metadata){
JSON::Value pack_out; // Storage for outgoing metadata. JSON::Value pack_out; // Storage for outgoing metadata.
if (data[0] == 0x12){ if (data[0] == 0x12){
@ -937,61 +937,32 @@ JSON::Value FLV::Tag::toJSON(JSON::Value & metadata){
} }
} }
if (tmp){ if (tmp){
if (tmp->getContentP("videocodecid")){
switch ((unsigned int)tmp->getContentP("videocodecid")->NumValue()){
case 2:
metadata["tracks"]["track1"]["codec"] = "H263";
break;
case 4:
metadata["tracks"]["track1"]["codec"] = "VP6";
break;
case 7:
metadata["tracks"]["track1"]["codec"] = "H264";
break;
default:
metadata["tracks"]["track1"]["codec"] = "?";
break;
}
}
if (tmp->getContentP("audiocodecid")){
switch ((unsigned int)tmp->getContentP("audiocodecid")->NumValue()){
case 2:
metadata["tracks"]["track2"]["codec"] = "MP3";
break;
case 10:
metadata["tracks"]["track2"]["codec"] = "AAC";
break;
default:
metadata["tracks"]["track2"]["codec"] = "?";
break;
}
}
if (tmp->getContentP("width")){ if (tmp->getContentP("width")){
metadata["tracks"]["track1"]["width"] = (long long int)tmp->getContentP("width")->NumValue(); metadata.tracks[1].width = (long long int)tmp->getContentP("width")->NumValue();
} }
if (tmp->getContentP("height")){ if (tmp->getContentP("height")){
metadata["tracks"]["track1"]["height"] = (long long int)tmp->getContentP("height")->NumValue(); metadata.tracks[1].height = (long long int)tmp->getContentP("height")->NumValue();
} }
if (tmp->getContentP("framerate")){ if (tmp->getContentP("framerate")){
metadata["tracks"]["track1"]["fpks"] = (long long int)(tmp->getContentP("framerate")->NumValue() * 1000.0); metadata.tracks[1].fpks = (long long int)(tmp->getContentP("framerate")->NumValue() * 1000.0);
} }
if (tmp->getContentP("videodatarate")){ if (tmp->getContentP("videodatarate")){
metadata["tracks"]["track1"]["bps"] = (long long int)(tmp->getContentP("videodatarate")->NumValue() * 1024) / 8; metadata.tracks[1].bps = (long long int)(tmp->getContentP("videodatarate")->NumValue() * 1024) / 8;
} }
if (tmp->getContentP("audiodatarate")){ if (tmp->getContentP("audiodatarate")){
metadata["tracks"]["track2"]["bps"] = (long long int)(tmp->getContentP("audiodatarate")->NumValue() * 1024) / 8; metadata.tracks[2].bps = (long long int)(tmp->getContentP("audiodatarate")->NumValue() * 1024) / 8;
} }
if (tmp->getContentP("audiosamplerate")){ if (tmp->getContentP("audiosamplerate")){
metadata["tracks"]["track2"]["rate"] = (long long int)tmp->getContentP("audiosamplerate")->NumValue(); metadata.tracks[2].rate = (long long int)tmp->getContentP("audiosamplerate")->NumValue();
} }
if (tmp->getContentP("audiosamplesize")){ if (tmp->getContentP("audiosamplesize")){
metadata["tracks"]["track2"]["size"] = (long long int)tmp->getContentP("audiosamplesize")->NumValue(); metadata.tracks[2].size = (long long int)tmp->getContentP("audiosamplesize")->NumValue();
} }
if (tmp->getContentP("stereo")){ if (tmp->getContentP("stereo")){
if (tmp->getContentP("stereo")->NumValue() == 1){ if (tmp->getContentP("stereo")->NumValue() == 1){
metadata["tracks"]["track2"]["channels"] = 2; metadata.tracks[2].channels = 2;
}else{ }else{
metadata["tracks"]["track2"]["channels"] = 1; metadata.tracks[2].channels = 1;
} }
} }
for (int i = 0; i < tmp->hasContent(); ++i){ for (int i = 0; i < tmp->hasContent(); ++i){
@ -1011,78 +982,58 @@ JSON::Value FLV::Tag::toJSON(JSON::Value & metadata){
pack_out["time"] = tagTime(); pack_out["time"] = tagTime();
} }
} }
metadata["tracks"]["track1"]["trackid"] = 1;
metadata["tracks"]["track1"]["type"] = "video";
if ( !metadata["tracks"]["track1"].isMember("length")){
metadata["tracks"]["track1"]["length"] = 0;
}
if (metadata["tracks"].isMember("track1")){
if ( !metadata["tracks"]["track1"].isMember("width")){
metadata["tracks"]["track1"]["width"] = 0;
}
if ( !metadata["tracks"]["track1"].isMember("height")){
metadata["tracks"]["track1"]["height"] = 0;
}
if ( !metadata["tracks"]["track1"].isMember("fpks")){
metadata["tracks"]["track1"]["fpks"] = 0;
}
if ( !metadata["tracks"]["track1"].isMember("bps")){
metadata["tracks"]["track1"]["bps"] = 0;
}
}
return pack_out; //empty return pack_out; //empty
} }
if (data[0] == 0x08){ if (data[0] == 0x08){
char audiodata = data[11]; char audiodata = data[11];
if (needsInitData() && isInitData()){ if (needsInitData() && isInitData()){
if ((audiodata & 0xF0) == 0xA0){ if ((audiodata & 0xF0) == 0xA0){
metadata["tracks"]["track2"]["init"] = std::string((char*)data + 13, (size_t)len - 17); metadata.tracks[2].init = std::string((char*)data + 13, (size_t)len - 17);
}else{ }else{
metadata["tracks"]["track2"]["init"] = std::string((char*)data + 12, (size_t)len - 16); metadata.tracks[2].init = std::string((char*)data + 12, (size_t)len - 16);
} }
return pack_out; //skip rest of parsing, get next tag. return pack_out; //skip rest of parsing, get next tag.
} }
pack_out["datatype"] = "audio";
pack_out["time"] = tagTime(); pack_out["time"] = tagTime();
pack_out["trackid"] = 2; pack_out["trackid"] = 2;
metadata["tracks"]["track2"]["trackid"] = 2; metadata.tracks[2].trackID = 2;
metadata["tracks"]["track2"]["type"] = "audio"; metadata.tracks[2].type = "audio";
if ( !metadata["tracks"]["track2"].isMember("codec") || metadata["tracks"]["track2"]["codec"].asString() == "?" || metadata["tracks"]["track2"]["codec"].asString() == ""){ if (metadata.tracks[2].codec == ""){
metadata["tracks"]["track2"]["codec"] = getAudioCodec(); metadata.tracks[2].codec = getAudioCodec();
} }
if ( !metadata["tracks"]["track2"].isMember("rate") || metadata["tracks"]["track2"]["rate"].asInt() < 1){ if ( !metadata.tracks[2].rate){
switch (audiodata & 0x0C){ switch (audiodata & 0x0C){
case 0x0: case 0x0:
metadata["tracks"]["track2"]["rate"] = 5512; metadata.tracks[2].rate = 5512;
break; break;
case 0x4: case 0x4:
metadata["tracks"]["track2"]["rate"] = 11025; metadata.tracks[2].rate = 11025;
break; break;
case 0x8: case 0x8:
metadata["tracks"]["track2"]["rate"] = 22050; metadata.tracks[2].rate = 22050;
break; break;
case 0xC: case 0xC:
metadata["tracks"]["track2"]["rate"] = 44100; metadata.tracks[2].rate = 44100;
break; break;
} }
} }
if ( !metadata["tracks"]["track2"].isMember("size") || metadata["tracks"]["track2"]["size"].asInt() < 1){ if ( !metadata.tracks[2].size){
switch (audiodata & 0x02){ switch (audiodata & 0x02){
case 0x0: case 0x0:
metadata["tracks"]["track2"]["size"] = 8; metadata.tracks[2].size = 8;
break; break;
case 0x2: case 0x2:
metadata["tracks"]["track2"]["size"] = 16; metadata.tracks[2].size = 16;
break; break;
} }
} }
if ( !metadata["tracks"]["track2"].isMember("channels") || metadata["tracks"]["track2"]["channels"].asInt() < 1){ if ( !metadata.tracks[2].channels){
switch (audiodata & 0x01){ switch (audiodata & 0x01){
case 0x0: case 0x0:
metadata["tracks"]["track2"]["channels"] = 1; metadata.tracks[2].channels = 1;
break; break;
case 0x1: case 0x1:
metadata["tracks"]["track2"]["channels"] = 2; metadata.tracks[2].channels = 2;
break; break;
} }
} }
@ -1106,19 +1057,20 @@ JSON::Value FLV::Tag::toJSON(JSON::Value & metadata){
if (len < 21){ if (len < 21){
return JSON::Value(); return JSON::Value();
} }
metadata["tracks"]["track1"]["init"] = std::string((char*)data + 16, (size_t)len - 20); metadata.tracks[1].init = std::string((char*)data + 16, (size_t)len - 20);
}else{ }else{
if (len < 17){ if (len < 17){
return JSON::Value(); return JSON::Value();
} }
metadata["tracks"]["track1"]["init"] = std::string((char*)data + 12, (size_t)len - 16); metadata.tracks[1].init = std::string((char*)data + 12, (size_t)len - 16);
} }
return pack_out; //skip rest of parsing, get next tag. return pack_out; //skip rest of parsing, get next tag.
} }
if ( !metadata["tracks"]["track1"].isMember("codec") || metadata["tracks"]["track1"]["codec"].asString() == "?" || metadata["tracks"]["track1"]["codec"].asString() == ""){ if (metadata.tracks[1].codec == ""){
metadata["tracks"]["track1"]["codec"] = getVideoCodec(); metadata.tracks[1].codec = getVideoCodec();
} }
pack_out["datatype"] = "video"; metadata.tracks[1].type = "video";
metadata.tracks[1].trackID = 1;
pack_out["trackid"] = 1; pack_out["trackid"] = 1;
switch (videodata & 0xF0){ switch (videodata & 0xF0){
case 0x10: case 0x10:

View file

@ -50,7 +50,7 @@ namespace FLV {
bool DTSCVideoInit(DTSC::Track & video); bool DTSCVideoInit(DTSC::Track & video);
bool DTSCAudioInit(DTSC::Track & audio); bool DTSCAudioInit(DTSC::Track & audio);
bool DTSCMetaInit(DTSC::Stream & S, DTSC::Track & videoRef, DTSC::Track & audioRef); bool DTSCMetaInit(DTSC::Stream & S, DTSC::Track & videoRef, DTSC::Track & audioRef);
JSON::Value toJSON(JSON::Value & metadata); JSON::Value toJSON(DTSC::Meta & metadata);
bool MemLoader(char * D, unsigned int S, unsigned int & P); bool MemLoader(char * D, unsigned int S, unsigned int & P);
bool FileLoader(FILE * f); bool FileLoader(FILE * f);
protected: protected: