Dash-Industry-Forum / dash.js

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.
http://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html
Other
5.13k stars 1.68k forks source link

[SmartTVs] frozen frames / rebufferings in live and no playback after a few minutes #4586

Open testeur-990 opened 2 weeks ago

testeur-990 commented 2 weeks ago
Environment
Observed behavior

After a few minutes, the player freezes, and there is no playback for live streaming. We have observed that the player fails to find the necessary segments for audio and video, resulting in 'segment not found' errors in the logs.

Console output

[706794][BufferController][audio] Buffered range: 1727963527.184665 - 1727963549.947332, currentTime = 1727963547.181 " [706798][BufferController][audio] Buffered range: 1727963554.043332 - 1727963558.011332, currentTime = 1727963547.181 " [706801][BufferController][audio] Buffered range: 1727963560.059332 - 1727963993.979332, currentTime = 1727963547.181 " [706805][StreamProcessor][audio] Appended bytes for audio and stream id 8947157786443 " [706835][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [706838][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [707195][StreamProcessor][video] OnFragmentLoadingCompleted for stream id 8947157786443 and media type video - Url: URL
" [707237][BufferController][video] Buffered range: 1727963527.861999 - 1727963549.861999, currentTime = 1727963547.181 " [707242][BufferController][video] Buffered range: 1727963553.861999 - 1727963555.861999, currentTime = 1727963547.181 " [707246][BufferController][video] Buffered range: 1727963577.861999 - 1727963993.861999, currentTime = 1727963547.181 " [707252][StreamProcessor][video] Appended bytes for video and stream id 8947157786443 " [707278][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [707285][DashHandler][video] video No segment found at index: 11. Wait for next loop " [707358][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [707362][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [709396][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [709399][DashHandler][video] video No segment found at index: 11. Wait for next loop " [709411][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [709415][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [709912][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [709916][DashHandler][video] video No segment found at index: 11. Wait for next loop " [709938][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [709941][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [710437][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [710441][DashHandler][video] video No segment found at index: 11. Wait for next loop " [710477][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [710480][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [710977][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [710979][DashHandler][video] video No segment found at index: 11. Wait for next loop " [711004][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [711012][DashHandler][audio] audio No segment found at index: 11. Wait for next loop " [711493][ScheduleController][video] Media segment needed for video and stream id 8947157786443 " [711496][DashHandler][video] video No segment found at index: 11. Wait for next loop " [711521][ScheduleController][audio] Media segment needed for audio and stream id 8947157786443 " [711527][DashHandler][audio] audio No segment found at index: 11. Wait for next loop

Expected behavior

The player should continue to play the stream without freezing, and all necessary audio and video segments should be available for playback at all times.

P.S.: At the moment, we can't share the URL of the stream because it's encrypted, but we will try to find a clear live stream that we can share with you. However, we have observed the following in the MPD: timeShiftBufferDepth="PT22.000S" minBufferTime="PT3.000S" minimumUpdatePeriod="PT6.000S" <SegmentTemplate timescale="90000" initialization="$RepresentationID$-init.m4s" media="$RepresentationID$-0-T-$Time$.m4s" presentationTimeOffset="7698936975817">

        </SegmentTemplate>

(We can share any other parameters that will help you analyze this issue.)

We are unsure if this is an issue with our streams or with the way you retrieve the last segment in the following function: function getSegmentByIndex(representation, index, lastSegmentTime) { checkConfig();

    if (!representation) {
        return null;
    }

    let segment = null;
    let found = false;

    iterateSegments(representation, function (time, base, list, frag, fTimescale, relativeIdx, i) {
        if (found || lastSegmentTime < 0) {
            let media = base.media;
            let mediaRange = frag.mediaRange;

            if (list) {
                media = list[i].media || '';
                mediaRange = list[i].mediaRange;
            }

            segment = getTimeBasedSegment(
                timelineConverter,
                isDynamic,
                representation,
                time,
                frag.d,
                fTimescale,
                media,
                mediaRange,
                relativeIdx,
                frag.tManifest);

            return true;
        } else if (time >= (lastSegmentTime * fTimescale) - (frag.d * 0.5)) { // same logic, if deviation is
            // 50% of segment duration, segment is found if time is greater than or equal to (startTime of previous segment - half of the previous segment duration)
            found = true;
        }

        return false;
    });

    return segment;
} in TimelineSegmentsGetter.js
dsilhavy commented 1 week ago

Thanks for reporting this. We don't have the resources to debug such SmartTV issues at this point. Please try to identify the issue yourself and provide a PR. If a specific workaround is needed, it can be hidden behind a settings flag.