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 potential extras.
  • 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:
    private StreamInfoTag(@NonNull final StreamInfo streamInfo,
                          @Nullable final MediaItemTag.Quality quality,
                          @Nullable final MediaItemTag.AudioTrack audioTrack,
                          @Nullable final Object extras)
    
    → Addition of the audioTrack parameter, enabling the management of both video and audio.

Modification of of() Methods

In the first version, there are two overloads:

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

  2. 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:

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

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

  3. 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 new of() methods ensures that the old API remains compatible. Calls to of(streamInfo) or of(streamInfo, videoStreams, index) still work.
  • Better multimedia data structuring:
    Now, a StreamInfoTag 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 éventuel extras.
  • 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 :
    private StreamInfoTag(@NonNull final StreamInfo streamInfo,
                          @Nullable final MediaItemTag.Quality quality,
                          @Nullable final MediaItemTag.AudioTrack audioTrack,
                          @Nullable final Object extras)
    
    → Ajout du paramètre 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 :

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

  2. 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 :

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

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

  3. 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éthodes of() assure que l’ancienne API reste compatible. Les appels à of(streamInfo) ou of(streamInfo, videoStreams, index) fonctionnent toujours.
  • Meilleure structuration des données multimédias :
    Désormais, un StreamInfoTag 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.