Working HTTP Dynamic VoD

This commit is contained in:
Thulinma 2012-09-03 15:02:01 +02:00
parent d6b4687ab2
commit 0c4d501950

View file

@ -122,6 +122,7 @@ namespace Connector_HTTP{
bool ready4data = false;//Set to true when streaming is to begin. bool ready4data = false;//Set to true when streaming is to begin.
bool pending_manifest = false; bool pending_manifest = false;
bool receive_marks = false;//when set to true, this stream will ignore keyframes and instead use pause marks
bool inited = false; bool inited = false;
Socket::Connection ss(-1); Socket::Connection ss(-1);
std::string streamname; std::string streamname;
@ -181,6 +182,7 @@ namespace Connector_HTTP{
HTTP_S.Clean(); HTTP_S.Clean();
HTTP_S.SetHeader("Content-Type","text/xml"); HTTP_S.SetHeader("Content-Type","text/xml");
HTTP_S.SetHeader("Cache-Control","no-cache"); HTTP_S.SetHeader("Cache-Control","no-cache");
if (Strm.metadata.isMember("length")){receive_marks = true;}
std::string manifest = BuildManifest(streamname, Strm.metadata); std::string manifest = BuildManifest(streamname, Strm.metadata);
HTTP_S.SetBody(manifest); HTTP_S.SetBody(manifest);
conn.Send(HTTP_S.BuildResponse("200", "OK")); conn.Send(HTTP_S.BuildResponse("200", "OK"));
@ -257,6 +259,7 @@ namespace Connector_HTTP{
HTTP_S.Clean(); HTTP_S.Clean();
HTTP_S.SetHeader("Content-Type","text/xml"); HTTP_S.SetHeader("Content-Type","text/xml");
HTTP_S.SetHeader("Cache-Control","no-cache"); HTTP_S.SetHeader("Cache-Control","no-cache");
if (Strm.metadata.isMember("length")){receive_marks = true;}
std::string manifest = BuildManifest(streamname, Strm.metadata); std::string manifest = BuildManifest(streamname, Strm.metadata);
HTTP_S.SetBody(manifest); HTTP_S.SetBody(manifest);
conn.Send(HTTP_S.BuildResponse("200", "OK")); conn.Send(HTTP_S.BuildResponse("200", "OK"));
@ -265,8 +268,9 @@ namespace Connector_HTTP{
#endif #endif
pending_manifest = false; pending_manifest = false;
} }
if (Strm.getPacket(0).isMember("keyframe") || Strm.getPacket(0)["datatype"].asString() == "pause_marker"){ if (!receive_marks && Strm.metadata.isMember("length")){receive_marks = true;}
if (flashbuf_nonempty){ if ((Strm.getPacket(0).isMember("keyframe") && !receive_marks) || Strm.lastType() == DTSC::PAUSEMARK){
if (flashbuf_nonempty || Strm.lastType() == DTSC::PAUSEMARK){
Flash_FragBuffer.push(FlashBuf); Flash_FragBuffer.push(FlashBuf);
while (Flash_FragBuffer.size() > 2){ while (Flash_FragBuffer.size() > 2){
Flash_FragBuffer.pop(); Flash_FragBuffer.pop();
@ -296,6 +300,7 @@ namespace Connector_HTTP{
HTTP_S.Clean(); HTTP_S.Clean();
HTTP_S.SetHeader("Content-Type","text/xml"); HTTP_S.SetHeader("Content-Type","text/xml");
HTTP_S.SetHeader("Cache-Control","no-cache"); HTTP_S.SetHeader("Cache-Control","no-cache");
if (Strm.metadata.isMember("length")){receive_marks = true;}
std::string manifest = BuildManifest(streamname, Strm.metadata); std::string manifest = BuildManifest(streamname, Strm.metadata);
HTTP_S.SetBody(manifest); HTTP_S.SetBody(manifest);
conn.Send(HTTP_S.BuildResponse("200", "OK")); conn.Send(HTTP_S.BuildResponse("200", "OK"));