From a6b04273aa4876ae0073aa9d3a595e8304542aef Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sat, 19 Mar 2011 16:03:47 +0100 Subject: [PATCH] FIFO buffer for fragments --- Connector_HTTP/main.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Connector_HTTP/main.cpp b/Connector_HTTP/main.cpp index 0c26241d..1432604e 100644 --- a/Connector_HTTP/main.cpp +++ b/Connector_HTTP/main.cpp @@ -6,6 +6,7 @@ #define DEBUG 4 #include +#include #include #include #include @@ -127,6 +128,7 @@ int mainHandler(int CONN_fd){ std::string FlashMeta; bool Flash_ManifestSent = false; bool Flash_RequestPending = false; + std::queue Flash_FragBuffer; FLV_Pack * tag = 0; HTTPReader HTTP_R, HTTP_S;//HTTP Receiver en HTTP Sender. @@ -244,12 +246,17 @@ int mainHandler(int CONN_fd){ if (handler == HANDLER_FLASH){ if(tag->data[0] != 0x12 ) { if (tag->isKeyframe){ + Flash_FragBuffer.push(FlashBuf); + FlashBuf = ""; if (Flash_RequestPending){ HTTP_S.Clean(); HTTP_S.SetHeader("Content-Type","video/mp4"); - HTTP_S.SetBody(Interface::mdatFold(FlashBuf)); - FlashBuf = ""; + HTTP_S.SetBody(Interface::mdatFold(Flash_FragBuffer.front())); + Flash_FragBuffer.pop(); HTTP_S.SendResponse(CONN_fd, "200", "OK");//schrijf de HTTP response header + #if DEBUG >= 4 + fprintf(stderr, "Sending a video fragment. %i left in buffer.\n", (int)Flash_FragBuffer.size()); + #endif } } FlashBuf.append(tag->data,tag->len);