-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Feature: MPEG-5 LCEVC Scalable support #4572
base: development
Are you sure you want to change the base?
Feature: MPEG-5 LCEVC Scalable support #4572
Conversation
Updated references to track to representation
Removed section on shorter buffers for demoing purposes
@v-nova-romas Thank you for your PR. Can you please merge the latest changes from |
Hi @dsilhavy Thank you, I have merged the latest changes |
…vcScalableSupport
src/dash/vo/Representation.js
Outdated
@@ -72,6 +72,7 @@ class Representation { | |||
this.startNumber = 1; | |||
this.timescale = 1; | |||
this.width = NaN; | |||
this.dependentRepresentation = null |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all member attributes in this constructor are sorted alphabetically.
Can you move this new entry?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @stschr Thank you for taking the time to review the PR!
the new entry should now be sorted alphabetically
@@ -332,6 +339,9 @@ export default { | |||
ID3_SCHEME_ID_URI: 'https://aomedia.org/emsg/ID3', | |||
COMMON_ACCESS_TOKEN_HEADER: 'common-access-token', | |||
DASH_ROLE_SCHEME_ID : 'urn:mpeg:dash:role:2011', | |||
|
|||
ENHANCEMENT_CODECS: ['lvc1'], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With this code, 'lvc1' gets always considered as supported by src/streaming/utils/Capabilities.js#L141
However, shouldn't we reject this 4CC if lcevc_dec.js is not registered as extension?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you, agreed! I would like to modify Capabilities.js#L141 to also check if lcevc_dec.js is loaded, and reject otherwise.
May I ask for clarification regarding registered as extension
- is there a way in dash.js to register lcevc_dec.js as a loaded extension? I could check if window.LCEVCdec
is defined but I am wondering if there is a more idiomatic way.
@@ -387,6 +387,9 @@ function CmcdModel() { | |||
if (mediaType === Constants.AUDIO) { | |||
ot = CmcdObjectType.AUDIO; | |||
} | |||
if (request.mediaType === Constants.ENHANCEMENT) { | |||
ot = 'e'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe not an issue, but where does this magic constant string come from? Is it allowed by Cmcd-spec? (@dsilhavy )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Originally we have considered that the enhancement doesn't quite fit under existing Cmcd Object Types. However, after looking at the Cmcd-spec it seems that tokens not defined in the spec (eg. e
) would be discarded by a Cmcd server.
I would like to assign the enhancement ot
to CmcdObjectType.OTHER
. Do you think this would be a good approach?
@@ -646,6 +646,10 @@ function DashManifestModel() { | |||
voRepresentation.codecs = realRepresentation.codecs; | |||
voRepresentation.codecFamily = Utils.getCodecFamily(voRepresentation.codecs); | |||
} | |||
if (realRepresentation.hasOwnProperty(DashConstants.DEPENDENCY_ID)) { | |||
voRepresentation.dependentRepresentation = new Representation(); | |||
voRepresentation.dependentRepresentation.id = realRepresentation[DashConstants.DEPENDENCY_ID].toString(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should handle the case when @dependencyId
contains multiple @id
valeus (as whitespace separated list):
@dsilhavy : What about added this to the capability checks, i.e. rejecting any Representation with more than one entry in this attribute?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you, great idea! We would like to reject the representation and log it in the console when @dependencyId
contains multiple @id
values as it would most likely indicate an error with the packager. Do you think this would be a good way to approach it?
@v-nova-romas Thank you for keeping this PR up to date. As this PR requires design changes in dash.js and I would like to carefully evaluate them, I need to move this PR to the milestone of v5.1. For v5 we have a working sample for LCEVC (https://reference.dashif.org/dash.js/nightly/samples/index.html#MPEG5Part2LCEVC). My apologies for the delay. |
Adds MPEG-5 LCEVC scalable support into dash.js to enable playback of ABR profiles generated by LCEVC enhancement via a separate adaptation set.
This approach creates LCEVC representations which are dependent upon native codec representations (by using dependencyId). LCEVC enhancement representations are contained in a 2nd Adaptation Set and linked to the base representations in the 1st Adaptation Set. The outcome is the ability to play adaptive streaming content where one or more higher resolution profiles are generated by applying LCEVC enhancement to existing conventional profiles saving up to 70% bitrate compared to using conventional standalone native profiles.
There is a new section in dash.js samples for MPEG-5 Part 2 LCEVC where the scalable implementation is demonstrated.