From 3693b9bd040c98ea3476c1042cca8c653183c1f5 Mon Sep 17 00:00:00 2001
From: uvjustin <46082645+uvjustin@users.noreply.github.com>
Date: Sat, 6 Nov 2021 09:54:51 +0800
Subject: [PATCH] Adjust frag_duration setting in stream (#59135)
---
homeassistant/components/stream/worker.py | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/homeassistant/components/stream/worker.py b/homeassistant/components/stream/worker.py
index 881614b04a3..e4be3168393 100644
--- a/homeassistant/components/stream/worker.py
+++ b/homeassistant/components/stream/worker.py
@@ -102,18 +102,18 @@ class SegmentBuffer:
# The LL-HLS spec allows for a fragment's duration to be within the range [0.85x,1.0x]
# of the part target duration. We use the frag_duration option to tell ffmpeg to try to
# cut the fragments when they reach frag_duration. However, the resulting fragments can
- # have variability in their durations and can end up being too short or too long. If
- # there are two tracks, as in the case of a video feed with audio, the fragment cut seems
- # to be done on the first track that crosses the desired threshold, and cutting on the
- # audio track may result in a shorter video fragment than desired. Conversely, with a
+ # have variability in their durations and can end up being too short or too long. With a
# video track with no audio, the discrete nature of frames means that the frame at the
# end of a fragment will sometimes extend slightly beyond the desired frag_duration.
- # Given this, our approach is to use a frag_duration near the upper end of the range for
- # outputs with audio using a frag_duration at the lower end of the range for outputs with
- # only video.
+ # If there are two tracks, as in the case of a video feed with audio, there is an added
+ # wrinkle as the fragment cut seems to be done on the first track that crosses the desired
+ # threshold, and cutting on the audio track may also result in a shorter video fragment
+ # than desired.
+ # Given this, our approach is to give ffmpeg a frag_duration somewhere in the middle
+ # of the range, hoping that the parts stay pretty well bounded, and we adjust the part
+ # durations a bit in the hls metadata so that everything "looks" ok.
"frag_duration": str(
- self._stream_settings.part_target_duration
- * (98e4 if add_audio else 9e5)
+ self._stream_settings.part_target_duration * 9e5
),
}
if self._stream_settings.ll_hls