Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue in LIVE RESTART playback #4641

Open
shogtapur opened this issue Dec 6, 2024 · 3 comments
Open

Issue in LIVE RESTART playback #4641

shogtapur opened this issue Dec 6, 2024 · 3 comments
Labels

Comments

@shogtapur
Copy link

shogtapur commented Dec 6, 2024

Environment
[] The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/
[] The stream has correct Access-Control-Allow-Origin headers (CORS)
[] There are no network errors such as 404s in the browser console when trying to play the stream
[] The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ
[] The issue occurs in the latest reference client on http://reference.dashif.org/dash.js/ and not just on my page
Link to playable MPD file:
Dash.js version:
4.7.2
Browser name/version:
OS name/version:
LGTV and Samsung V

Steps to reproduce

Restart any linear event

Observed behavior
  • When player starts to playback the restart content, it downloads the manifest at regular intervals, since it is a dynamic manifest - no issues here.
  • After the first manifest is downloaded, the duration of the Period in the manifest (< Period duration="PT4M24S" >) is assigned to the <video> element.
  • video.duration gives us 264 seconds (PT4M24S).
  • This is an issue. Because, the <video> element dispatches an "ended" event after 264 seconds which is wrong. Since it is a growing manifest, "ended" event should never be dispatched until the manifest becomes "static".
    - Looks like the video.duration is not updated on subsequent manifest downloads for restart playback.
  • we are seen this behavior on regular desktop browser as well.
Console output

[668493][Stream] onBufferingCompleted - trigger STREAM_BUFFERING_COMPLETED
Debug.js:169 [668493][StreamController] Stream with id 1729014535 finished buffering
Debug.js:169 [668493][StreamController] [onStreamBufferingCompleted] calls signalEndOfStream of mediaSourceController.
Debug.js:169 [668493][MediaSourceController] call to mediaSource endOfStream
Debug.js:169 [668493][BufferController][video] checkIfBufferingCompleted trigger BUFFERING_COMPLETED for stream id 1729014535 and type video
Debug.js:169 [668494][BufferController][video] Buffered range: 198 - 276, currentTime = 211.63348
Debug.js:169 [668494][StreamProcessor][video] Appended bytes for video and stream id 1729014535
Debug.js:169 [673820][DashParser] Parsing complete: ( xml2json: 1.00ms, objectiron: 0.00ms, total: 0.00100s)
Debug.js:169 [673821][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [673821][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:16 GMT+0530 (India Standard Time)[1733484436.806]
Debug.js:169 [673821][ManifestUpdater] Refresh manifest in 5999 milliseconds.
Debug.js:169 [685154][DashParser] Parsing complete: ( xml2json: 1.40ms, objectiron: 0.00ms, total: 0.00140s)
Debug.js:169 [685154][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [685155][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:28 GMT+0530 (India Standard Time)[1733484448.139]
Debug.js:169 [685155][ManifestUpdater] Refresh manifest in 6000 milliseconds.
Debug.js:169 [685201][TimeSyncController] Increasing timeBetweenSyncAttempts to 240
Debug.js:169 [685201][TimeSyncController] Completed UTC sync. Setting client - server offset to 802.5
Debug.js:169 [691786][DashParser] Parsing complete: ( xml2json: 1.20ms, objectiron: 0.00ms, total: 0.00120s)
Debug.js:169 [691786][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [691787][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:34 GMT+0530 (India Standard Time)[1733484454.771]
Debug.js:169 [691787][ManifestUpdater] Refresh manifest in 6000 milliseconds.
Debug.js:169 [698430][DashParser] Parsing complete: ( xml2json: 1.00ms, objectiron: 0.00ms, total: 0.00100s)
Debug.js:169 [698431][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [698431][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:41 GMT+0530 (India Standard Time)[1733484461.416]
Debug.js:169 [698432][ManifestUpdater] Refresh manifest in 5999 milliseconds.
Debug.js:169 [704984][DashParser] Parsing complete: ( xml2json: 1.20ms, objectiron: 0.00ms, total: 0.00120s)
Debug.js:169 [704985][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [704985][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:47 GMT+0530 (India Standard Time)[1733484467.97]
Debug.js:169 [704985][ManifestUpdater] Refresh manifest in 5999 milliseconds.
Debug.js:169 [711527][DashParser] Parsing complete: ( xml2json: 1.40ms, objectiron: 0.00ms, total: 0.00140s)
Debug.js:169 [711527][StreamController] Manifest updated... updating data system wide.
Debug.js:169 [711528][ManifestUpdater] Manifest has been refreshed at Fri Dec 06 2024 16:57:54 GMT+0530 (India Standard Time)[1733484474.512]

Expected behavior

Restart Playback should continue

Manifest
segments/5093/1729014535/
@shogtapur shogtapur added the Bug label Dec 6, 2024
@dsilhavy
Copy link
Collaborator

dsilhavy commented Dec 6, 2024

I don't understand your problem description.

If your manifest is type dynamic and there are no periods/segments signaled for the live edge then the player will keep refreshing the manifest until new periods/segments are signaled.

@shogtapur shogtapur changed the title Automatically jumps out from RESTART TV to LINEAR TV. Issue in LIVE RESTART playback Dec 6, 2024
@shogtapur
Copy link
Author

@dsilhavy
More info below

  • When player starts to playback the restart content, it downloads the manifest at regular intervals, since it is a dynamic manifest - no issues here.
  • After the first manifest is downloaded, the duration of the Period in the manifest (< Period duration="PT4M24S" >) is assigned to the <video> element.
  • video.duration gives us 264 seconds (PT4M24S).
  • This is an issue. Because, the <video> element dispatches an "ended" event after 264 seconds which is wrong. Since it is a growing manifest, "ended" event should never be dispatched until the manifest becomes "static".
    - Looks like the video.duration is not updated on subsequent manifest downloads for restart playback.
  • we are seen this behavior on regular desktop browser as well.

@dsilhavy
Copy link
Collaborator

dsilhavy commented Dec 6, 2024

@dsilhavy More info below

  • When player starts to playback the restart content, it downloads the manifest at regular intervals, since it is a dynamic manifest - no issues here.
  • After the first manifest is downloaded, the duration of the Period in the manifest (< Period duration="PT4M24S" >) is assigned to the
  • video.duration gives us 264 seconds (PT4M24S).
  • This is an issue. Because, the
  • we are seen this behavior on regular desktop browser as well.

Why does the Period element have a duration if the duration is not yet known? Do you add additional periods? Otherwise, your Period element should only have a @start value and the duration should be added once known.

From the 23009-1:

Live-Edge Period: newest regular Period in a dynamic Media Presentation, for which the Period
duration is unknown, and Segment availability start time of at least one Segment is greater than
the time NOW. For such Periods, the exact duration of Segments that are not yet available, may be
unknown.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants