Several HTTP Dynamic fixes/improvements - though no working live yet...
This commit is contained in:
parent
fc6868fd46
commit
1ad7e29238
1 changed files with 12 additions and 11 deletions
|
@ -30,32 +30,32 @@ namespace Connector_HTTP {
|
||||||
std::string empty;
|
std::string empty;
|
||||||
|
|
||||||
MP4::ASRT asrt;
|
MP4::ASRT asrt;
|
||||||
if (starttime == 0){
|
if (starttime == 0 && !metadata.isMember("keynum")){
|
||||||
asrt.setUpdate(false);
|
asrt.setUpdate(false);
|
||||||
}else{
|
}else{
|
||||||
asrt.setUpdate(true);
|
asrt.setUpdate(true);
|
||||||
}
|
}
|
||||||
asrt.setVersion(0); //1
|
asrt.setVersion(1);
|
||||||
//asrt.setQualityEntry(empty, 0);
|
//asrt.setQualityEntry(empty, 0);
|
||||||
if (metadata.isMember("keynum")){
|
if (metadata.isMember("keynum")){
|
||||||
asrt.setSegmentRun(1, -1, 0);
|
asrt.setSegmentRun(1, 4294967295, 0);
|
||||||
}else{
|
}else{
|
||||||
asrt.setSegmentRun(1, metadata["keytime"].size(), 0);
|
asrt.setSegmentRun(1, metadata["keytime"].size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
MP4::AFRT afrt;
|
MP4::AFRT afrt;
|
||||||
if (starttime == 0){
|
if (starttime == 0 && !metadata.isMember("keynum")){
|
||||||
afrt.setUpdate(false);
|
afrt.setUpdate(false);
|
||||||
}else{
|
}else{
|
||||||
afrt.setUpdate(true);
|
afrt.setUpdate(true);
|
||||||
}
|
}
|
||||||
afrt.setVersion(0); //1
|
afrt.setVersion(1);
|
||||||
afrt.setTimeScale(1000);
|
afrt.setTimeScale(1000);
|
||||||
//afrt.setQualityEntry(empty, 0);
|
//afrt.setQualityEntry(empty, 0);
|
||||||
MP4::afrt_runtable afrtrun;
|
MP4::afrt_runtable afrtrun;
|
||||||
if (metadata.isMember("keynum")){
|
if (metadata.isMember("keynum")){
|
||||||
unsigned long long int firstAvail = metadata["keynum"].size() / 2;
|
unsigned long long int firstAvail = metadata["keynum"].size() / 2;
|
||||||
for (int i = firstAvail; i < metadata["keynum"].size() - 2; i++){
|
for (int i = firstAvail; i < metadata["keynum"].size() - 1; i++){
|
||||||
afrtrun.firstFragment = metadata["keynum"][i].asInt();
|
afrtrun.firstFragment = metadata["keynum"][i].asInt();
|
||||||
afrtrun.firstTimestamp = metadata["keytime"][i].asInt();
|
afrtrun.firstTimestamp = metadata["keytime"][i].asInt();
|
||||||
afrtrun.duration = metadata["keytime"][i + 1].asInt() - metadata["keytime"][i].asInt();
|
afrtrun.duration = metadata["keytime"][i + 1].asInt() - metadata["keytime"][i].asInt();
|
||||||
|
@ -79,9 +79,9 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
|
|
||||||
MP4::ABST abst;
|
MP4::ABST abst;
|
||||||
abst.setVersion(0);
|
abst.setVersion(1);
|
||||||
if (metadata.isMember("keynum")){
|
if (metadata.isMember("keynum")){
|
||||||
abst.setBootstrapinfoVersion(metadata["keynum"][0u].asInt());
|
abst.setBootstrapinfoVersion(metadata["keynum"][metadata["keynum"].size() - 2].asInt());
|
||||||
}else{
|
}else{
|
||||||
abst.setBootstrapinfoVersion(1);
|
abst.setBootstrapinfoVersion(1);
|
||||||
}
|
}
|
||||||
|
@ -100,8 +100,8 @@ namespace Connector_HTTP {
|
||||||
abst.setCurrentMediaTime(1000 * metadata["length"].asInt());
|
abst.setCurrentMediaTime(1000 * metadata["length"].asInt());
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
abst.setLive(true);
|
abst.setLive(false);
|
||||||
abst.setCurrentMediaTime(metadata["lastms"].asInt());
|
abst.setCurrentMediaTime(metadata["keytime"][metadata["keytime"].size() - 2].asInt());
|
||||||
}
|
}
|
||||||
abst.setSmpteTimeCodeOffset(0);
|
abst.setSmpteTimeCodeOffset(0);
|
||||||
abst.setMovieIdentifier(MovieId);
|
abst.setMovieIdentifier(MovieId);
|
||||||
|
@ -202,7 +202,6 @@ namespace Connector_HTTP {
|
||||||
if (HTTP_R.Read(conn.Received().get())){
|
if (HTTP_R.Read(conn.Received().get())){
|
||||||
#if DEBUG >= 4
|
#if DEBUG >= 4
|
||||||
std::cout << "Received request: " << HTTP_R.getUrl() << std::endl;
|
std::cout << "Received request: " << HTTP_R.getUrl() << std::endl;
|
||||||
std::cout << "Received request: " << HTTP_R.BuildRequest() << std::endl;
|
|
||||||
#endif
|
#endif
|
||||||
conn.setHost(HTTP_R.GetHeader("X-Origin"));
|
conn.setHost(HTTP_R.GetHeader("X-Origin"));
|
||||||
streamname = HTTP_R.GetHeader("X-Stream");
|
streamname = HTTP_R.GetHeader("X-Stream");
|
||||||
|
@ -229,6 +228,8 @@ namespace Connector_HTTP {
|
||||||
if (HTTP_R.url.find(".bootstrap") != std::string::npos){
|
if (HTTP_R.url.find(".bootstrap") != std::string::npos){
|
||||||
HTTP_S.Clean();
|
HTTP_S.Clean();
|
||||||
HTTP_S.SetBody(GenerateBootstrap(streamname, Strm.metadata, 1, 0, 0));
|
HTTP_S.SetBody(GenerateBootstrap(streamname, Strm.metadata, 1, 0, 0));
|
||||||
|
HTTP_S.SetHeader("Content-Type", "binary/octet");
|
||||||
|
HTTP_S.SetHeader("Cache-Control", "no-cache");
|
||||||
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
conn.SendNow(HTTP_S.BuildResponse("200", "OK"));
|
||||||
HTTP_R.Clean(); //clean for any possible next requests
|
HTTP_R.Clean(); //clean for any possible next requests
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Add table
Reference in a new issue