From 88715b4a7f299774aadc5a1c0fc4c59eca41ab4b Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Thu, 17 Feb 2011 08:21:14 +0100 Subject: [PATCH] Bugfix abst --- Connector_HTTP/main.cpp | 6 +++++- util/MP4/box_abst.cpp | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Connector_HTTP/main.cpp b/Connector_HTTP/main.cpp index 944640b3..4cf43860 100644 --- a/Connector_HTTP/main.cpp +++ b/Connector_HTTP/main.cpp @@ -48,6 +48,10 @@ int FlvToFragNum( FLV_Pack * tag ) { return (Timestamp / 10000) + 1; } +int FlvGetTimestamp( Flv_Pack * tag ) { + return ( (tag->data[7] << 24 ) + (tag->data[4] << 16 ) + (tag->data[5] << 8 ) + (tag->data[6] ) ); +} + std::string BuildManifest( std::string MetaData, std::string MovieId, int CurrentMediaTime ) { Interface * temp = new Interface; std::string Result="\n\n"; @@ -209,7 +213,7 @@ int mainHandler(int CONN_fd){ HTTP_S.Clean(); HTTP_S.SetHeader("Content-Type","text/xml"); HTTP_S.SetHeader("Cache-Control","no-cache"); - HTTP_S.SetBody(BuildManifest(FlashMeta, Movie, 0)); + HTTP_S.SetBody(BuildManifest(FlashMeta, Movie, FlvGetTimestamp(tag))); HTTP_S.SendResponse(CONN_fd, "200", "OK"); } } diff --git a/util/MP4/box_abst.cpp b/util/MP4/box_abst.cpp index 7043f0f4..e3211ed8 100644 --- a/util/MP4/box_abst.cpp +++ b/util/MP4/box_abst.cpp @@ -189,24 +189,24 @@ void Box_abst::WriteContent( ) { } } uint32_t OffsetServerEntryCount = 29 + curMovieIdentifier.size() + 1; - uint32_t OffsetQualityEntryCount = OffsetServerEntryCount + 4 + serializedServers.size(); - uint32_t OffsetDrmData = OffsetQualityEntryCount + 4 + serializedQualities.size(); + uint32_t OffsetQualityEntryCount = OffsetServerEntryCount + 1 + serializedServers.size(); + uint32_t OffsetDrmData = OffsetQualityEntryCount + 1 + serializedQualities.size(); uint32_t OffsetMetaData = OffsetDrmData + curDRM.size() + 1; uint32_t OffsetSegmentRuntableCount = OffsetMetaData + curMetaData.size() + 1; - uint32_t OffsetFragmentRuntableCount = OffsetSegmentRuntableCount + 4 + serializedSegments.size(); + uint32_t OffsetFragmentRuntableCount = OffsetSegmentRuntableCount + 1 + serializedSegments.size(); temp[0] = 0 + ( curProfile << 6 ) + ( (uint8_t)isLive << 7 ) + ( (uint8_t)isUpdate << 7 ); - Container->SetPayload((uint32_t)serializedFragments.size(),(uint8_t*)serializedFragments.c_str(),OffsetFragmentRuntableCount+4); - Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(FragmentAmount),OffsetFragmentRuntableCount); - Container->SetPayload((uint32_t)serializedSegments.size(),(uint8_t*)serializedSegments.c_str(),OffsetSegmentRuntableCount+4); - Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(SegmentAmount),OffsetSegmentRuntableCount); + Container->SetPayload((uint32_t)serializedFragments.size(),(uint8_t*)serializedFragments.c_str(),OffsetFragmentRuntableCount+1); + Container->SetPayload((uint32_t)1,Box::uint8_to_uint8(FragmentAmount),OffsetFragmentRuntableCount); + Container->SetPayload((uint32_t)serializedSegments.size(),(uint8_t*)serializedSegments.c_str(),OffsetSegmentRuntableCount+1); + Container->SetPayload((uint32_t)1,Box::uint8_to_uint8(SegmentAmount),OffsetSegmentRuntableCount); Container->SetPayload((uint32_t)curMetaData.size()+1,(uint8_t*)curMetaData.c_str(),OffsetMetaData); Container->SetPayload((uint32_t)curDRM.size()+1,(uint8_t*)curDRM.c_str(),OffsetDrmData); - Container->SetPayload((uint32_t)serializedQualities.size(),(uint8_t*)serializedQualities.c_str(),OffsetQualityEntryCount+4); - Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Qualities.size()),OffsetQualityEntryCount); - Container->SetPayload((uint32_t)serializedServers.size(),(uint8_t*)serializedServers.c_str(),OffsetServerEntryCount+4); - Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(Servers.size()),OffsetServerEntryCount); + Container->SetPayload((uint32_t)serializedQualities.size(),(uint8_t*)serializedQualities.c_str(),OffsetQualityEntryCount+1); + Container->SetPayload((uint32_t)1,Box::uint8_to_uint8(Qualities.size()),OffsetQualityEntryCount); + Container->SetPayload((uint32_t)serializedServers.size(),(uint8_t*)serializedServers.c_str(),OffsetServerEntryCount+1); + Container->SetPayload((uint32_t)1,Box::uint8_to_uint8(Servers.size()),OffsetServerEntryCount); Container->SetPayload((uint32_t)curMovieIdentifier.size()+1,(uint8_t*)curMovieIdentifier.c_str(),29);//+1 for \0-terminated string... Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(curSMPTE),25); Container->SetPayload((uint32_t)4,Box::uint32_to_uint8(0),21);