diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md index 6d7fd75aa7a..aae7c20e107 100644 --- a/packages/video_player/video_player_platform_interface/CHANGELOG.md +++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md @@ -1,3 +1,10 @@ +## 7.0.0 + +* **BREAKING CHANGE**: Refactors audio track identification system: + * `VideoAudioTrack.id` (String) replaced with separate `groupIndex` (int) and `trackIndex` (int) properties. + * `selectAudioTrack(int playerId, String trackId)` changed to `selectAudioTrack(int playerId, VideoAudioTrack track)` - now accepts the full track object instead of separate parameters. + * This change provides better type safety and a more intuitive API for audio track selection. + ## 6.6.0 * Adds `VideoAudioTrack` class and `getAudioTracks()`, `selectAudioTrack()`, `isAudioTrackSupportAvailable()` methods for audio track management. diff --git a/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart index 6525d3bab33..7c0352e8381 100644 --- a/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart +++ b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart @@ -134,8 +134,11 @@ abstract class VideoPlayerPlatform extends PlatformInterface { throw UnimplementedError('getAudioTracks() has not been implemented.'); } - /// Selects which audio track is chosen for playback from its [trackId] - Future selectAudioTrack(int playerId, String trackId) { + /// Selects which audio track is chosen for playback. + /// + /// The [track] parameter should be one of the tracks returned by [getAudioTracks]. + /// Platform implementations will extract the necessary indices from the track object. + Future selectAudioTrack(int playerId, VideoAudioTrack track) { throw UnimplementedError('selectAudioTrack() has not been implemented.'); } @@ -567,7 +570,8 @@ class VideoCreationOptions { class VideoAudioTrack { /// Constructs an instance of [VideoAudioTrack]. const VideoAudioTrack({ - required this.id, + required this.groupIndex, + required this.trackIndex, required this.label, required this.language, required this.isSelected, @@ -577,8 +581,11 @@ class VideoAudioTrack { this.codec, }); - /// Unique identifier for the audio track. - final String id; + /// The group index of the audio track. + final int groupIndex; + + /// The track index within the group. + final int trackIndex; /// Human-readable label for the track. /// @@ -618,7 +625,8 @@ class VideoAudioTrack { return identical(this, other) || other is VideoAudioTrack && runtimeType == other.runtimeType && - id == other.id && + groupIndex == other.groupIndex && + trackIndex == other.trackIndex && label == other.label && language == other.language && isSelected == other.isSelected && @@ -630,7 +638,8 @@ class VideoAudioTrack { @override int get hashCode => Object.hash( - id, + groupIndex, + trackIndex, label, language, isSelected, @@ -643,7 +652,8 @@ class VideoAudioTrack { @override String toString() => 'VideoAudioTrack(' - 'id: $id, ' + 'groupIndex: $groupIndex, ' + 'trackIndex: $trackIndex, ' 'label: $label, ' 'language: $language, ' 'isSelected: $isSelected, ' diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml index d310fee9afb..252ec207710 100644 --- a/packages/video_player/video_player_platform_interface/pubspec.yaml +++ b/packages/video_player/video_player_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/video_player/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 6.6.0 +version: 7.0.0 environment: sdk: ^3.7.0 diff --git a/packages/video_player/video_player_platform_interface/test/video_player_platform_interface_test.dart b/packages/video_player/video_player_platform_interface/test/video_player_platform_interface_test.dart index 2d920161ec9..ab792d72079 100644 --- a/packages/video_player/video_player_platform_interface/test/video_player_platform_interface_test.dart +++ b/packages/video_player/video_player_platform_interface/test/video_player_platform_interface_test.dart @@ -30,8 +30,15 @@ void main() { test( 'default implementation selectAudioTrack throws unimplemented', () async { + const VideoAudioTrack track = VideoAudioTrack( + groupIndex: 0, + trackIndex: 0, + label: 'Test', + language: 'en', + isSelected: false, + ); await expectLater( - () => initialInstance.selectAudioTrack(1, 'trackId'), + () => initialInstance.selectAudioTrack(1, track), throwsUnimplementedError, ); },