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

Feature: MPEG-5 LCEVC Scalable support #4572

Open
wants to merge 10 commits into
base: development
Choose a base branch
from

Conversation

v-nova-romas
Copy link

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.

v-nova-romas and others added 3 commits September 13, 2024 11:17
Updated references to track to representation
Removed section on shorter buffers for demoing purposes
@dsilhavy dsilhavy added this to the 5.0.0 milestone Sep 23, 2024
@dsilhavy
Copy link
Collaborator

@v-nova-romas Thank you for your PR. Can you please merge the latest changes from development into your PR. Thanks

@v-nova-romas
Copy link
Author

Hi @dsilhavy Thank you, I have merged the latest changes

@dsilhavy dsilhavy requested review from stschr and dsilhavy September 25, 2024 05:17
@@ -72,6 +72,7 @@ class Representation {
this.startNumber = 1;
this.timescale = 1;
this.width = NaN;
this.dependentRepresentation = null
Copy link
Contributor

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?

Copy link
Author

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'],
Copy link
Contributor

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?

Copy link
Author

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';
Copy link
Contributor

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 )

Copy link
Author

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();
Copy link
Contributor

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?

Copy link
Author

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?

@dsilhavy
Copy link
Collaborator

dsilhavy commented Nov 4, 2024

@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.

@dsilhavy dsilhavy modified the milestones: 5.0.0, 5.1.0 Nov 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

4 participants