From 30a0f8c510dde9ab8fde0a7fc64d2a2fea34b3c5 Mon Sep 17 00:00:00 2001 From: AudricV <74829229+AudricV@users.noreply.github.com> Date: Tue, 31 Jan 2023 19:25:58 +0100 Subject: [PATCH] [MediaCCC] Extract audio language property for single language audio tracks --- .../extractors/MediaCCCStreamExtractor.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java index 0a086fcc6..07dfc870f 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java @@ -24,6 +24,7 @@ import org.schabi.newpipe.extractor.stream.StreamExtractor; import org.schabi.newpipe.extractor.stream.StreamType; import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.extractor.utils.JsonUtils; +import org.schabi.newpipe.extractor.utils.LocaleCompat; import java.io.IOException; import java.util.ArrayList; @@ -114,15 +115,24 @@ public class MediaCCCStreamExtractor extends StreamExtractor { mediaFormat = null; } - // Not checking containsSimilarStream here, since MediaCCC does not provide enough - // information to decide whether two streams are similar. Hence that method would - // always return false, e.g. even for different language variations. - audioStreams.add(new AudioStream.Builder() + final AudioStream.Builder builder = new AudioStream.Builder() .setId(recording.getString("filename", ID_UNKNOWN)) .setContent(recording.getString("recording_url"), true) .setMediaFormat(mediaFormat) - .setAverageBitrate(UNKNOWN_BITRATE) - .build()); + .setAverageBitrate(UNKNOWN_BITRATE); + + final String language = recording.getString("language"); + // If the language contains a - symbol, this means that the stream has an audio + // track with multiple languages, so there is no specific language for this stream + // Don't set the audio language in this case + if (language != null && !language.contains("-")) { + builder.setAudioLocale(LocaleCompat.forLanguageTag(language)); + } + + // Not checking containsSimilarStream here, since MediaCCC does not provide enough + // information to decide whether two streams are similar. Hence that method would + // always return false, e.g. even for different language variations. + audioStreams.add(builder.build()); } } return audioStreams;