-
Notifications
You must be signed in to change notification settings - Fork 6k
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
DASH Player Requirements #8010
Comments
I can not really give you a sufficient answer for your question I'm afraid. I also can not give you any commitments whether we support a feature or how completely/correctly we support something compared to the specs. If you have a DASH stream that you want to play which has a given feature you can test this with ExoPlayer in the demo app. If this does not work as expected, please file a bug or a feature request for that specific feature. We are happy to help you with such specific issues and help you making ExoPlayer as useful as possible for your projects. |
As Marc says, it's generally more efficient for you to try playing some test streams to see if anything doesn't work, rather than going down the path of trying to establish compatibility via a box ticking exercise. To expand on why, note that it's very unlikely that any player fully implements all of the listed requirements, even if they claim to do so. In practice many of the them have a large number of sub-requirements that would all have to be supported to genuinely claim full support, including many that are sufficiently obscure that neither you nor anyone else will ever use them (and players will most likely not support them). I will say that a large number of major streaming providers are successfully using ExoPlayer to play DASH content, so unless you're planning on doing something particularly unusual, you'll probably find that, broadly speaking, it's able to support your content. If upon trying a test stream you find certain specific features are missing that you need, please let us know and we'll endeavour to support them. From your list, there are just a few specific things that seem worth calling out.
|
[REQUIRED] Searched documentation and issues
I've checked the documentation about the supported formats and Dash and the section about customization
[REQUIRED] Question
Hi!
I'm Roberto from Telefonica.
We use Exoplayer inside our service MovistarPlay app in several countries (i.e Chile or Brazil) and we are currently validating some of DASH support requirements to reach new markets.
We already know some of them but since other are technical details, can you help us to know if the following requirements are fulfilled by Exoplayer?
Thank you for your time!
DASH Player Requirements
In terms of media compatibility, the player MUST accept the implementation guidelines of DASH-IF IOP 4.3 document, in particular, those sections that specifies the following parameters:
urn:mpeg:dash:profile:isoff-on-demand:2011
, based on byte-rangesurn:mpeg:dash:profile:isoff-live:2011
, based on templateIn terms of CDN compatibility, the player MUST satisfy the following requirements:
Support of HTTP redirects. The most important thing about HTTP redirections when requesting a content to a TCDN corresponds to the ability of the client to set the base URL of a content after the manifest is redirected. A CDN based in HTTP redirections Request Routing mechanism will send several redirections from the service URL published by the content platform until the client connects to the actual edge streamer that will serve the content. Those redirections take time and effort in CDN to resolve. To avoid doing that for each particular fragment/segment, the client should resolve the Manifest URL to get the actual delivery URL and use that as the Base URL for the rest of fragments/segments and to update the Manifest.
DASH-IF IOP 4.3 document sets the following workflow that should be respected: The client gets a URI to the playlist file from the content provider website. This URI may point directly at a CDN address or be CNAMEd to a CDN node.
The client requests the playlist file from the CDN.
The CDN responds with an HTTP redirect, or a series of redirects that eventually takes the client to the final cache.
The client requests the playlist from this final cache.
The client parses the relative URIs to media segments from the playlist.
The client uses the final cache address to construct the absolute URIs for the media segments that point to the final cache.
The client requests the media segments from the final cache. The redirection should still be temporary in the sense that if a client does a refresh, or repeatedly fails to get the playlist or the media files from the cache address, it can go back to the original playlist URI and request it again.
Refrain from resolving periodically the host name of the absolute URI for the media segments, and so stay connected to the same server requesting the segments during all the streaming session if the server is alive and it’s not failing to get back the requested content.
Follow the HTTP 30x redirection when the server make it for a fragment in the middle of a playback. In such case, the player should connect to the resolved host and stay connected to the corresponding IP during the rest of the streaming session
Support of Persistent HTTP connection
HTTP 1.1 persistent session and chunked encoding. The HTTP session will retain the transport connection according to HTTP Keep-Alive semantics or to transport monitoring metrics when the player runs multiple transport connections with the server. New transport connections MUST be established with the same server as before.
If the hostname resolution provides more than one IP address, the player MUST try to download the playlist/fragment from any other IP address returned by host resolution in case of failure when downloading the playlist/fragment. The player MAY follow the order in which IP addresses are received.
According to chapter 3.4.3 of DASH-IF IOP the client shall support:
MPD Update In case of Dynamic playlists (type=dynamic) client shall respect minimumUpdatePeriod attribute. DASH clients operating based on such an MPD and consuming the service at the live edge typically need to request a new MPD prior to downloading a new segment. However, in order to minimise MPD requests and resulting traffic load, the client may use one or more of the following optimisations (clause 4.4.3):
If the client fetches the MPD using HTTP, the client should use conditional GET methods as specified in RFC 7232 to reduce unnecessary network usage in the downlink.
If the @segmentProfiles contains the 'lmsg' brand clients may also rely on the 'lmsg' message and request a new MPD only in case a segment is received with an 'lmsg' brand. Otherwise the client may use template constructions to continue determining the URL and the segment availability start time of segments
In addition, it is requested the “In-band MPD validity events” support, in particular, the reserved event “MPD_RELOAD_SCHEME”, declared with schemeIdUri =“
urn:mpeg:dash:event:2012
”, which provides an optimization mechanism to allow clients to reduce HTTP traffic caused by fetching new MPD snapshot.UTCTiming support UTCTiming element in DASH MPD for type=dynamic client should support at least one of the following:
urn:mpeg: dash:utc:http-xsdate:2014
urn:mpeg: dash:utc:http-iso:2014
urn:mpeg: dash:utc:http-ntp:2014
urn:mpeg: dash:utc:http-head:2014
Being
urn:mpeg:dash:utc:http-iso:2014
orurn:mpeg:dash:utc:http-head:2014
the preferable configurationsIt is recommended to avoid
urn:mpeg:dash:utc:direct:2014
as it prevents MPD to be cacheCookies support
The text was updated successfully, but these errors were encountered: