From fcb89da80b0f2cff4181e9098c941a8864c72e7d Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Tue, 8 Oct 2013 14:19:21 +0200 Subject: [PATCH] Various fixes for HTTP Smooth Streaming --- src/connectors/conn_http_smooth.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/connectors/conn_http_smooth.cpp b/src/connectors/conn_http_smooth.cpp index 14ca2bcd..a5cba7d5 100644 --- a/src/connectors/conn_http_smooth.cpp +++ b/src/connectors/conn_http_smooth.cpp @@ -96,8 +96,7 @@ namespace Connector_HTTP { for (JSON::ArrIter keyIt = allAudio.ObjBegin()->second["keys"].ArrBegin(); keyIt != allAudio.ObjBegin()->second["keys"].ArrEnd(); keyIt++){ Result << "second["keys"].ArrBegin()){ - // ensure proper audio start time (yes, this is video :D) - Result << "t=\"" << allVideo.ObjBegin()->second["firstms"].asInt() * 10000 << "\" "; + Result << "t=\"" << allAudio.ObjBegin()->second["firstms"].asInt() * 10000 << "\" "; } Result << "d=\"" << (*keyIt)["len"].asInt() * 10000 << "\" />\n"; } @@ -358,12 +357,17 @@ namespace Connector_HTTP { MP4::TFHD tfhd_box; tfhd_box.setFlags(MP4::tfhdSampleFlag); tfhd_box.setTrackID(1); - tfhd_box.setDefaultSampleFlags(0x000000C0 | MP4::noIPicture | MP4::noDisposable | MP4::noKeySample); + tfhd_box.setDefaultSampleFlags(0x000000C0 | MP4::isKeySample); MP4::TRUN trun_box; - trun_box.setFlags(MP4::trundataOffset | MP4::trunfirstSampleFlags | MP4::trunsampleDuration | MP4::trunsampleSize); trun_box.setDataOffset(42); - trun_box.setFirstSampleFlags(0x00000040 | MP4::isIPicture | MP4::noDisposable | MP4::isKeySample); + if (trackRef["type"].asString() == "video"){ + trun_box.setFlags(MP4::trundataOffset | MP4::trunfirstSampleFlags | MP4::trunsampleDuration | MP4::trunsampleSize); + trun_box.setFirstSampleFlags(0x00000040 | MP4::noKeySample); + }else{ + trun_box.setFlags(MP4::trundataOffset | MP4::trunsampleDuration | MP4::trunsampleSize); + trun_box.setFirstSampleFlags(0x00000040 | MP4::isKeySample); + } std::deque tmpParts; JSON::decodeVector(keyObj["parts"].asString(), tmpParts); for (int i = 0; i < tmpParts.size(); i++){ @@ -376,9 +380,16 @@ namespace Connector_HTTP { MP4::SDTP sdtp_box; sdtp_box.setVersion(0); - sdtp_box.setValue(0x24, 4); - for (int i = 1; i < keyObj["partsize"].asInt(); i++){ - sdtp_box.setValue(0x14, 4 + i); + if (trackRef["type"].asString() == "video"){ + sdtp_box.setValue(36, 4); + for (int i = 1; i < keyObj["partsize"].asInt(); i++){ + sdtp_box.setValue(20, 4 + i); + } + }else{ + sdtp_box.setValue(40, 4); + for (int i = 1; i < keyObj["partsize"].asInt(); i++){ + sdtp_box.setValue(40, 4 + i); + } } MP4::TRAF traf_box;