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

Check the output of mediacapabilities with MediaSource #3897

Merged
merged 4 commits into from Jan 25, 2022
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
37 changes: 37 additions & 0 deletions lib/util/stream_utils.js
Expand Up @@ -425,7 +425,44 @@ shaka.util.StreamUtils = class {
await shaka.util.StreamUtils.getDecodingInfosForVariants(
manifest.variants, usePersistentLicenses, /* srcEquals= */ false);
manifest.variants = manifest.variants.filter((variant) => {
// See: https://github.com/google/shaka-player/issues/3860
const video = variant.video;
const ContentType = shaka.util.ManifestParserUtils.ContentType;
if (video) {
let videoCodecs = video.codecs;
// For multiplexed streams.
if (video.codecs.includes(',')) {
const allCodecs = video.codecs.split(',');
videoCodecs = shaka.util.ManifestParserUtils.guessCodecs(
ContentType.VIDEO, allCodecs);
videoCodecs = shaka.util.StreamUtils.patchVp9(videoCodecs);
const audioCodecs = shaka.util.ManifestParserUtils.guessCodecs(
ContentType.AUDIO, allCodecs);
const audioFullType = shaka.util.MimeUtils.getFullOrConvertedType(
video.mimeType, audioCodecs, ContentType.AUDIO);
if (!MediaSource.isTypeSupported(audioFullType)) {
return false;
}
}
videoCodecs = shaka.util.StreamUtils.patchVp9(videoCodecs);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For multiplexed streams, this was already done in the branch above. Should this section be in an "else" branch for non-multiplexed only?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The If only applies to audio content, the else is not necessary because it is always needed for video, anyway I have seen that something was being done wrong and duplicated.

const fullType = shaka.util.MimeUtils.getFullOrConvertedType(
video.mimeType, videoCodecs, ContentType.VIDEO);
if (!MediaSource.isTypeSupported(fullType)) {
return false;
}
}
const audio = variant.audio;
if (audio) {
const codecs =
(audio.codecs.toLowerCase() == 'ac-3' &&
shaka.util.Platform.isTizen()) ? 'ec-3' : audio.codecs;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume this Tizen-specific logic must already exist in another location, so I think it would be best to encapsulate it in a method somewhere.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

const fullType = shaka.util.MimeUtils.getFullOrConvertedType(
audio.mimeType, codecs, ContentType.AUDIO);
if (!MediaSource.isTypeSupported(fullType)) {
return false;
}
}

// See: https://github.com/google/shaka-player/issues/3380
if (shaka.util.Platform.isXboxOne() && video &&
((video.width && video.width > 1920) ||
Expand Down