The two versions of StreamInfoTag
have similarities, but the second version introduces a significant evolution by integrating a new audioTrack
attribute. Below is a detailed comparison of the differences and implications:
1. Main Differences
Addition of audioTrack
in the second version
- In the first version,
StreamInfoTag
only handles video quality (quality
) and potentialextras
. - In the second version, a new
audioTrack
attribute is added, allowing storage of audio track-specific information.
Constructor Modifications
- First version:
private StreamInfoTag(@NonNull final StreamInfo streamInfo, @Nullable final MediaItemTag.Quality quality, @Nullable final Object extras)
- Second version:
→ Addition of theprivate StreamInfoTag(@NonNull final StreamInfo streamInfo, @Nullable final MediaItemTag.Quality quality, @Nullable final MediaItemTag.AudioTrack audioTrack, @Nullable final Object extras)
audioTrack
parameter, enabling the management of both video and audio.
Modification of of()
Methods
In the first version, there are two overloads:
-
With video only
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<VideoStream> sortedVideoStreams, final int selectedVideoStreamIndex)
→ Constructs a
StreamInfoTag
with a specific video quality. -
Without video or audio
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo)
→ Constructs a
StreamInfoTag
without video quality.
In the second version, there are three overloads:
-
With video and audio
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<VideoStream> sortedVideoStreams, final int selectedVideoStreamIndex, @NonNull final List<AudioStream> audioStreams, final int selectedAudioStreamIndex)
→ Constructs a
StreamInfoTag
with a selected video quality and audio track. -
With audio only
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<AudioStream> audioStreams, final int selectedAudioStreamIndex)
→ Constructs a
StreamInfoTag
with a specific audio track but no video quality. -
Without video or audio (same as the first version)
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo)
2. Implications of the Second Version
- More flexibility:
The second version allows the inclusion of an audio track, which is essential for scenarios where audio is as important as video (e.g., streaming with language selection). - Backward compatibility:
The addition of newof()
methods ensures that the old API remains compatible. Calls toof(streamInfo)
orof(streamInfo, videoStreams, index)
still work. - Better multimedia data structuring:
Now, aStreamInfoTag
can represent not only a video stream but also its associated audio stream, improving the modeling of multimedia content.
3. Conclusion
If the goal is to add support for audio tracks while keeping the initial structure, the second version is a natural improvement. It introduces a more complete abstraction and offers greater flexibility to users of this class.
Les deux versions de StreamInfoTag
ont des similarités, mais la seconde apporte une évolution importante en intégrant un nouvel attribut audioTrack
. Voici une comparaison détaillée des différences et des implications :
1. Différences principales
Ajout de audioTrack
dans la seconde version
- Dans la première version,
StreamInfoTag
gère uniquement la qualité vidéo (quality
) et un éventuelextras
. - Dans la seconde version, un nouvel attribut
audioTrack
est ajouté, permettant de stocker des informations spécifiques aux pistes audio.
Modifications du constructeur
- Première version :
private StreamInfoTag(@NonNull final StreamInfo streamInfo, @Nullable final MediaItemTag.Quality quality, @Nullable final Object extras)
- Seconde version :
→ Ajout du paramètreprivate StreamInfoTag(@NonNull final StreamInfo streamInfo, @Nullable final MediaItemTag.Quality quality, @Nullable final MediaItemTag.AudioTrack audioTrack, @Nullable final Object extras)
audioTrack
, ce qui permet de gérer aussi bien la vidéo que l’audio.
Modification des méthodes of()
Dans la première version, il y a deux surcharges :
-
Avec vidéo seulement
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<VideoStream> sortedVideoStreams, final int selectedVideoStreamIndex)
→ Construit un
StreamInfoTag
avec une qualité vidéo spécifique. -
Sans vidéo ni audio
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo)
→ Construit un
StreamInfoTag
sans qualité vidéo.
Dans la seconde version, trois surcharges existent :
-
Avec vidéo et audio
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<VideoStream> sortedVideoStreams, final int selectedVideoStreamIndex, @NonNull final List<AudioStream> audioStreams, final int selectedAudioStreamIndex)
→ Construit un
StreamInfoTag
avec une qualité vidéo et une piste audio sélectionnée. -
Avec audio seulement
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo, @NonNull final List<AudioStream> audioStreams, final int selectedAudioStreamIndex)
→ Construit un
StreamInfoTag
avec une piste audio spécifique mais sans qualité vidéo. -
Sans vidéo ni audio (identique à la première version)
public static StreamInfoTag of(@NonNull final StreamInfo streamInfo)
2. Implications de la seconde version
- Plus de flexibilité :
La deuxième version permet d’inclure une piste audio, ce qui est essentiel pour des scénarios où l’audio est aussi important que la vidéo (ex. streaming avec choix de la langue). - Compatibilité ascendante :
L’ajout de nouvelles méthodesof()
assure que l’ancienne API reste compatible. Les appels àof(streamInfo)
ouof(streamInfo, videoStreams, index)
fonctionnent toujours. - Meilleure structuration des données multimédias :
Désormais, unStreamInfoTag
peut représenter non seulement un flux vidéo mais aussi son flux audio associé, ce qui améliore la modélisation du contenu multimédia.
3. Conclusion
Si le but est d’ajouter la gestion des pistes audio tout en conservant la structure initiale, la seconde version est une amélioration naturelle. Elle introduit une abstraction plus complète et offre davantage de flexibilité aux utilisateurs de cette classe.