diff --git a/homeassistant/components/stream/fmp4utils.py b/homeassistant/components/stream/fmp4utils.py index dc929e531c1..1838b3fc88b 100644 --- a/homeassistant/components/stream/fmp4utils.py +++ b/homeassistant/components/stream/fmp4utils.py @@ -70,7 +70,8 @@ def get_codec_string(segment: io.BytesIO) -> str: ): profile = stsd_box[111:112].hex() compatibility = stsd_box[112:113].hex() - level = stsd_box[113:114].hex() + # Cap level at 4.1 for compatibility with some Google Cast devices + level = hex(min(stsd_box[113], 41))[2:] codec += "." + profile + compatibility + level # Handle H265 diff --git a/homeassistant/components/stream/hls.py b/homeassistant/components/stream/hls.py index 09729f79ada..92801c4807f 100644 --- a/homeassistant/components/stream/hls.py +++ b/homeassistant/components/stream/hls.py @@ -32,10 +32,11 @@ class HlsMasterPlaylistView(StreamView): def render(track): """Render M3U8 file.""" # Need to calculate max bandwidth as input_container.bit_rate doesn't seem to work - # Calculate file size / duration and use a multiplier to account for variation + # Calculate file size / duration and use a small multiplier to account for variation + # hls spec already allows for 25% variation segment = track.get_segment(track.segments[-1]) bandwidth = round( - segment.segment.seek(0, io.SEEK_END) * 8 / segment.duration * 3 + segment.segment.seek(0, io.SEEK_END) * 8 / segment.duration * 1.2 ) codecs = get_codec_string(segment.segment) lines = [