Retain selectable audio languages and DVB subtitles through live continuity
This commit is contained in:
@@ -26,7 +26,7 @@ public static class TransportStreamClock
|
||||
}
|
||||
private static bool Pes(byte[] data, int start, int p) => p >= 0 && (data[start + 1] & 64) != 0 && p + 14 <= start + 188
|
||||
&& data[p] == 0 && data[p + 1] == 0 && data[p + 2] == 1 && (data[p + 7] & 128) != 0;
|
||||
public static byte[] Rebase(byte[] input, long videoStart90k)
|
||||
public static byte[] Rebase(byte[] input, long videoStart90k, bool alignAudio = true)
|
||||
{
|
||||
if (input.Length % 188 != 0) throw new InvalidDataException("Unaligned MPEG-TS segment");
|
||||
long? firstVideo = null, firstAudio = null;
|
||||
@@ -44,7 +44,7 @@ public static class TransportStreamClock
|
||||
// Independent AAC encoders and HLS boundaries have different priming
|
||||
// offsets. Anchor the first audio PES of each segment as well, so a
|
||||
// switch cannot send an audio timestamp backwards by a few milliseconds.
|
||||
var audioOffset = videoStart90k - (firstAudio ?? firstVideo.Value);
|
||||
var audioOffset = alignAudio ? videoStart90k - (firstAudio ?? firstVideo.Value) : offset;
|
||||
using var output = new MemoryStream(input.Length + 188 * 6); var pids = new HashSet<int>();
|
||||
for (var start = 0; start < input.Length; start += 188)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user