From 16bb689b7ece7b67dd61fe75eefd6893f4ca862f Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 13 Jul 2020 16:16:40 +0200 Subject: [PATCH] Removed appleCompat mode from TS/HLS outputs, now sends identical segments to all client devices --- src/output/output_hls.cpp | 1 - src/output/output_ts_base.cpp | 17 +++++++++-------- src/output/output_ts_base.h | 1 - 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/output/output_hls.cpp b/src/output/output_hls.cpp index 3ce1fbf9..91526b07 100644 --- a/src/output/output_hls.cpp +++ b/src/output/output_hls.cpp @@ -184,7 +184,6 @@ namespace Mist { } - appleCompat = (H.GetHeader("User-Agent").find("iPad") != std::string::npos) || (H.GetHeader("User-Agent").find("iPod") != std::string::npos)|| (H.GetHeader("User-Agent").find("iPhone") != std::string::npos); bool VLCworkaround = false; if (H.GetHeader("User-Agent").substr(0, 3) == "VLC"){ std::string vlcver = H.GetHeader("User-Agent").substr(4); diff --git a/src/output/output_ts_base.cpp b/src/output/output_ts_base.cpp index 6538a330..1545a990 100644 --- a/src/output/output_ts_base.cpp +++ b/src/output/output_ts_base.cpp @@ -7,7 +7,6 @@ namespace Mist { ts_from = 0; setBlocking(true); sendRepeatingHeaders = 0; - appleCompat=false; lastHeaderTime = 0; } @@ -70,13 +69,6 @@ namespace Mist { size_t tmpDataLen = 0; thisPacket.getString("data", dataPointer, tmpDataLen); //data uint64_t dataLen = tmpDataLen; - //apple compatibility timestamp correction - if (appleCompat){ - packTime -= ts_from; - if (Trk.type == "audio"){ - packTime = 0; - } - } packTime *= 90; std::string bs; //prepare bufferstring @@ -179,6 +171,15 @@ namespace Mist { long unsigned int tempLen = dataLen; if (Trk.codec == "AAC"){ tempLen += 7; + //Make sure TS timestamp is sample-aligned, if possible + uint32_t freq = Trk.rate; + uint64_t aacSamples = (packTime/90) * freq / 1000; + //round to nearest packet, assuming all 1024 samples (probably wrong, but meh) + aacSamples += 512; + aacSamples /= 1024; + aacSamples *= 1024; + //Get closest 90kHz clock time to perfect sample alignment + packTime = aacSamples * 90000 / freq; } bs = TS::Packet::getPESAudioLeadIn(tempLen, packTime, Trk.bps); fillPacket(bs.data(), bs.size(), firstPack, video, keyframe, pkgPid, contPkg); diff --git a/src/output/output_ts_base.h b/src/output/output_ts_base.h index d1b041ef..b1ac2ff3 100644 --- a/src/output/output_ts_base.h +++ b/src/output/output_ts_base.h @@ -25,7 +25,6 @@ namespace Mist { int contSDT; unsigned int packCounter; ///\todo update constructors? TS::Packet packData; - bool appleCompat; uint64_t sendRepeatingHeaders; ///< Amount of ms between PAT/PMT. Zero means do not repeat. uint64_t lastHeaderTime; ///< Timestamp last PAT/PMT were sent. uint64_t ts_from; ///< Starting time to subtract from timestamps