Android TV: Adaptive bitrates does not work properly for higher qualities

Adaptive bitrate streaming is not working properly (not adapting to varying user bandwidth) in our android TV app using Bitmovin Player (com.bitmovin.player) version 3.9.0 while playing 4k streaming content(.mpd), which uses HEVC video codec.

Problem Details:

  1. A lot of re-buffering was observed visually when some 4k content was played in our android TV application.
    The problem was further investigated using the Bitmovin Analytics and similar results were confirmed.

  2. We can see that video bitrate is stuck at ~15 mbps connection, lots of re-buffering happening on a decent network bandwidth which seems suffice to play a lower video bitrate.

More observations:
2. a) If the video playback is started at a bandwidth >= needed to play 4k video and if the bandwidth drops down subsequently. Result → Video bitrate gets stuck at 15 mbps and re-buffering problem appears.

  1. b) If the video playback is started at a low bandwidth (to play 4k content), then the video playback properly adapts to varying network bandwidths till it gets high enough to request a 15 mbps chunk.

The manifest:
The analysis of several such manifest files(.mpd) suggests that there are representations available for lower bandwidth requests but are not being used effectively by the player.
Sample of 1 such manifest added below:

<?xml version="1.0" encoding="UTF-8"?>
<MPD type="static" xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:dvb:dash:profile:dvb-dash:2014,urn:dvb:dash:profile:dvb-dash:isoff-ext-live:2014" minBufferTime="PT1.033S" mediaPresentationDuration="PT52M40.747S" maxSegmentDuration="PT3.840S">
    <Period duration="PT52M40.747S" start="PT0S">
        <AdaptationSet startWithSAP="2" segmentAlignment="true" par="16:9" id="1" sar="1:1" frameRate="25" contentType="video" scanType="progressive" mimeType="video/mp4" >
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
            <SegmentTemplate startNumber="1" timescale="1000" duration="3840" media="$RepresentationID$/$Number%06d$.m4s" initialization="$RepresentationID$/IS.mp4" />
            <Representation id="706c3192-3e77-b20e-2732-fc7f2af2f3f7/video=18160000/dur=3840" codecs="hev1.2.4.L153.00.00.90" height="2160" width="3840" bandwidth="21245064" />
            <Representation id="3b511ba7-1eec-ba01-4244-651baf1b5c71/video=12640000/dur=3840" codecs="hev1.2.4.L153.00.00.90" height="1800" width="3200" bandwidth="15164760" />
            <Representation id="eb2dbe8f-531f-3775-0137-a7faccb79cb9/video=8080000/dur=3840" codecs="hev1.2.4.L150.00.00.90" height="1440" width="2560" bandwidth="9717584" />
            <Representation id="2d109f33-a12e-0d86-5021-2122b5e3b4a0/video=6300000/dur=3840" codecs="hev1.2.4.L150.00.00.90" height="1080" width="1920" bandwidth="7633424" />
            <Representation id="9a281e1d-4206-3daa-3160-efa2aa4c3fb2/video=4600000/dur=3840" codecs="hev1.2.4.L150.00.00.90" height="900" width="1600" bandwidth="5614352" />
            <Representation id="7f61f4f5-2b6b-ab31-32f0-34fa655227a6/video=3000000/dur=3840" codecs="hev1.2.4.L120.00.00.90" height="720" width="1280" bandwidth="3811992" />
            <Representation id="66ce2a3d-7350-62e4-39e5-be9f377e57d1/video=2000000/dur=3840" codecs="hev1.2.4.L93.00.00.90" height="540" width="960" bandwidth="2634408" />
            <Representation id="479a3345-15bc-4c73-32ab-bcdd0ec6b208/video=1100000/dur=3840" codecs="hev1.2.4.L90.00.00.90" height="432" width="768" bandwidth="1529584" />
        </AdaptationSet>
        <AdaptationSet startWithSAP="2" segmentAlignment="true" id="3" codecs="mp4a.40.2" audioSamplingRate="48000" contentType="audio" lang="eng" mimeType="audio/mp4" >
            <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
            <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
            <SegmentTemplate startNumber="1" timescale="1000" duration="3840" media="$RepresentationID$/$Number%06d$.m4s" initialization="$RepresentationID$/IS.mp4" />
            <Representation id="c3786f6d-fe5a-2e84-e9a9-9a1caf0aba61/audio=192000/dur=3840" bandwidth="190880" />
        </AdaptationSet>
    </Period>
</MPD>

The implementation:
Currently our Android TV app is using Bitmovin Player library “com.bitmovin.player:player” version 3.9.0 and Bitmovin Player Analytics library “com.bitmovin.analytics:collector-bitmovin-player” version 2.4.0.

The current implementation doesn’t have any custom adaptation, so it is working as the default behaviour of the player library.

Thanks a lot for your help.

Hi @milan.moucka ,

Thanks for reporting this behaviour and sharing investigation details, it is really useful.

To begin with, version 3.9.0 of the player SDK is almost 1.5 years old and numerous fixes and improvements have been made since then. Can you please re-test with the latest Bitmovin player SDK version 3.34.0 and verify if the issue can be replicated there as well.

If the issue is present in latest SDK version as well, then please share the test asset to allow us to replicate and investigate the behaviour. Please feel free to send the asset details via a DM.