From ab83b7514eb24d5892896e2b835b709d8e43bbdb Mon Sep 17 00:00:00 2001 From: Thulinma Date: Tue, 5 Mar 2013 11:54:59 +0100 Subject: [PATCH] Working HTTP Dynamic live. --- src/conn_http_dynamic.cpp | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/conn_http_dynamic.cpp b/src/conn_http_dynamic.cpp index 64a20c8a..48461629 100644 --- a/src/conn_http_dynamic.cpp +++ b/src/conn_http_dynamic.cpp @@ -55,10 +55,10 @@ namespace Connector_HTTP { MP4::afrt_runtable afrtrun; if (metadata.isMember("keynum")){ unsigned long long int firstAvail = metadata["keynum"].size() / 2; - for (int i = firstAvail; i < metadata["keynum"].size() - 1; i++){ + for (int i = firstAvail; i < metadata["keynum"].size(); i++){ afrtrun.firstFragment = metadata["keynum"][i].asInt(); afrtrun.firstTimestamp = metadata["keytime"][i].asInt(); - afrtrun.duration = metadata["keytime"][i + 1].asInt() - metadata["keytime"][i].asInt(); + afrtrun.duration = metadata["keylen"][i].asInt(); afrt.setFragmentRun(afrtrun, i - firstAvail); } }else{ @@ -101,7 +101,7 @@ namespace Connector_HTTP { } }else{ abst.setLive(false); - abst.setCurrentMediaTime(metadata["keytime"][metadata["keytime"].size() - 2].asInt()); + abst.setCurrentMediaTime(metadata["lastms"].asInt()); } abst.setSmpteTimeCodeOffset(0); abst.setMovieIdentifier(MovieId); @@ -132,28 +132,24 @@ namespace Connector_HTTP { "video/mp4\n" "recorded\n" "streaming\n" - "" + Base64::encode(GenerateBootstrap(MovieId, metadata, 1, 0, 0)) - + "\n" - "\n" - "AgAKb25NZXRhRGF0YQgAAAAAAAl0cmFja2luZm8KAAAAAgMACXRpbWVzY2FsZQBA+GoAAAAAAAAGbGVuZ3RoAEGMcHoQAAAAAAhsYW5ndWFnZQIAA2VuZwARc2FtcGxlZGVzY3JpcHRpb24KAAAAAQMACnNhbXBsZXR5cGUCAARhdmMxAAAJAAAJAwAJdGltZXNjYWxlAEDncAAAAAAAAAZsZW5ndGgAQXtNvTAAAAAACGxhbmd1YWdlAgADZW5nABFzYW1wbGVkZXNjcmlwdGlvbgoAAAABAwAKc2FtcGxldHlwZQIABG1wNGEAAAkAAAkADWF1ZGlvY2hhbm5lbHMAQAAAAAAAAAAAD2F1ZGlvc2FtcGxlcmF0ZQBA53AAAAAAAAAOdmlkZW9mcmFtZXJhdGUAQDf/gi5SciUABmFhY2FvdABAAAAAAAAAAAAIYXZjbGV2ZWwAQD8AAAAAAAAACmF2Y3Byb2ZpbGUAQFNAAAAAAAAADGF1ZGlvY29kZWNpZAIABG1wNGEADHZpZGVvY29kZWNpZAIABGF2YzEABXdpZHRoAECQ4AAAAAAAAAZoZWlnaHQAQIMAAAAAAAAACmZyYW1lV2lkdGgAQJDgAAAAAAAAC2ZyYW1lSGVpZ2h0AECDAAAAAAAAAAxkaXNwbGF5V2lkdGgAQJDgAAAAAAAADWRpc3BsYXlIZWlnaHQAQIMAAAAAAAAADG1vb3Zwb3NpdGlvbgBBmxq2uAAAAAAIZHVyYXRpb24AQIKjqW3oyhIAAAk=\n" - "\n" - "\n"; + "" + Base64::encode(GenerateBootstrap(MovieId, metadata, 1, 0, 0)) + "\n" + "\n" + "AgAKb25NZXRhRGF0YQMAAAk=\n" + "\n" + "\n"; }else{ Result = "\n" "\n" "" + MovieId + "\n" - "0.00\n" "video/mp4\n" "live\n" "streaming\n" - "\n" - "" - "AgAKb25NZXRhRGF0YQgAAAAAAA9tZXRhZGF0YWNyZWF0b3ICABBBbmV2aWEgVmlhTW90aW9uAAhoYXNBdWRpbwEBAAhoYXNWaWRlbwEBAAhkdXJhdGlvbgBBIWWYAAAAAAAPYXVkaW9zYW1wbGVyYXRlAEBIAAAAAAAAAA1hdWRpb2RhdGFyYXRlAEBgAAAAAAAAAAxhdWRpb2NvZGVjaWQCAARtcDRhAAZhYWNhb3QAQAAAAAAAAAAABXdpZHRoAECQAAAAAAAAAAZoZWlnaHQAQIIAAAAAAAAADXZpZGVvZGF0YXJhdGUAQJ9AAAAAAAAADHZpZGVvY29kZWNpZAIABEFWQzEACmF2Y3Byb2ZpbGUAQFNAAAAAAAAACGF2Y2xldmVsAEA/AAAAAAAAAAAJ\n" - "\n" - "\n"; + "\n" + "AgAKb25NZXRhRGF0YQMAAAk=\n" + "\n" + "\n" + "\n"; } #if DEBUG >= 8 std::cerr << "Sending this manifest:" << std::endl << Result << std::endl; @@ -225,7 +221,7 @@ namespace Connector_HTTP { } Strm.parsePacket(ss.Received()); } - if (HTTP_R.url.find(".bootstrap") != std::string::npos){ + if (HTTP_R.url.find(".abst") != std::string::npos){ HTTP_S.Clean(); HTTP_S.SetBody(GenerateBootstrap(streamname, Strm.metadata, 1, 0, 0)); HTTP_S.SetHeader("Content-Type", "binary/octet"); @@ -348,7 +344,8 @@ namespace Connector_HTTP { HTTP_S.Clean(); HTTP_S.SetHeader("Content-Type", "video/mp4"); HTTP_S.SetBody(""); - HTTP_S.SetHeader("Content-Length", FlashBufSize + 8); //32+33+btstrp.size()); + std::string new_strap = GenerateBootstrap(streamname, Strm.metadata, 1, 0, 0); + HTTP_S.SetHeader("Content-Length", FlashBufSize + 8 + new_strap.size()); //32+33+btstrp.size()); conn.SendNow(HTTP_S.BuildResponse("200", "OK")); //conn.SendNow("\x00\x00\x00\x21" "afra\x00\x00\x00\x00\x00\x00\x00\x03\xE8\x00\x00\x00\x01", 21); //unsigned long tmptime = htonl(FlashBufTime << 32); @@ -363,6 +360,7 @@ namespace Connector_HTTP { //conn.SendNow("\x00\x00\x00\x18moof\x00\x00\x00\x10mfhd\x00\x00\x00\x00", 20); //unsigned long fragno = htonl(ReqFragment); //conn.SendNow((char*)&fragno, 4); + conn.SendNow(new_strap); unsigned long size = htonl(FlashBufSize+8); conn.SendNow((char*) &size, 4); conn.SendNow("mdat", 4);