Cap AVC profile level at 4.1 in stream master playlist (#41592)

* Cap AVC profile level at 4.1

* Use smaller multiplier in bandwidth calculation
pull/41909/head
uvjustin 2020-10-16 04:37:27 +08:00 committed by Paulus Schoutsen
parent 36a1fe5f54
commit a72dd6b917
2 changed files with 5 additions and 3 deletions

View File

@ -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

View File

@ -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 = [