Merge branch 'development' into LTS_development
# Conflicts: # src/output/output_hls.cpp
This commit is contained in:
commit
b7e6cbbf89
3 changed files with 9 additions and 11 deletions
|
@ -383,8 +383,6 @@ namespace Mist {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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;
|
bool VLCworkaround = false;
|
||||||
if (H.GetHeader("User-Agent").substr(0, 3) == "VLC") {
|
if (H.GetHeader("User-Agent").substr(0, 3) == "VLC") {
|
||||||
std::string vlcver = H.GetHeader("User-Agent").substr(4);
|
std::string vlcver = H.GetHeader("User-Agent").substr(4);
|
||||||
|
|
|
@ -7,7 +7,6 @@ namespace Mist {
|
||||||
ts_from = 0;
|
ts_from = 0;
|
||||||
setBlocking(true);
|
setBlocking(true);
|
||||||
sendRepeatingHeaders = 0;
|
sendRepeatingHeaders = 0;
|
||||||
appleCompat=false;
|
|
||||||
lastHeaderTime = 0;
|
lastHeaderTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,13 +69,6 @@ namespace Mist {
|
||||||
size_t tmpDataLen = 0;
|
size_t tmpDataLen = 0;
|
||||||
thisPacket.getString("data", dataPointer, tmpDataLen); //data
|
thisPacket.getString("data", dataPointer, tmpDataLen); //data
|
||||||
uint64_t dataLen = tmpDataLen;
|
uint64_t dataLen = tmpDataLen;
|
||||||
//apple compatibility timestamp correction
|
|
||||||
if (appleCompat){
|
|
||||||
packTime -= ts_from;
|
|
||||||
if (Trk.type == "audio"){
|
|
||||||
packTime = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
packTime *= 90;
|
packTime *= 90;
|
||||||
std::string bs;
|
std::string bs;
|
||||||
//prepare bufferstring
|
//prepare bufferstring
|
||||||
|
@ -196,6 +188,15 @@ namespace Mist {
|
||||||
long unsigned int tempLen = dataLen;
|
long unsigned int tempLen = dataLen;
|
||||||
if (Trk.codec == "AAC"){
|
if (Trk.codec == "AAC"){
|
||||||
tempLen += 7;
|
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);
|
bs = TS::Packet::getPESAudioLeadIn(tempLen, packTime, Trk.bps);
|
||||||
fillPacket(bs.data(), bs.size(), firstPack, video, keyframe, pkgPid, contPkg);
|
fillPacket(bs.data(), bs.size(), firstPack, video, keyframe, pkgPid, contPkg);
|
||||||
|
|
|
@ -30,7 +30,6 @@ namespace Mist {
|
||||||
int contSDT;
|
int contSDT;
|
||||||
unsigned int packCounter;
|
unsigned int packCounter;
|
||||||
TS::Packet packData;
|
TS::Packet packData;
|
||||||
bool appleCompat;
|
|
||||||
uint64_t sendRepeatingHeaders; ///< Amount of ms between PAT/PMT. Zero means do not repeat.
|
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 lastHeaderTime; ///< Timestamp last PAT/PMT were sent.
|
||||||
uint64_t ts_from; ///< Starting time to subtract from timestamps
|
uint64_t ts_from; ///< Starting time to subtract from timestamps
|
||||||
|
|
Loading…
Add table
Reference in a new issue