Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
c8b0071
feat(video_player): add audio track selection support for iOS and And…
nateshmbhat Aug 29, 2025
4e4dc8c
feat(android): implement audio track selection in video player
nateshmbhat Aug 29, 2025
25de26c
feat(video_player): Format Entire Codebase
nateshmbhat Aug 29, 2025
31f9030
feat(video_player): add audio track selection and retrieval functiona…
nateshmbhat Aug 29, 2025
8f711b5
test(video_player): add tests for audio track selection and management
nateshmbhat Aug 29, 2025
e0f6d65
fix(video): address PR review comments
nateshmbhat Aug 30, 2025
fc30013
Merge branch 'main' into develop
nateshmbhat Aug 30, 2025
8a68e76
fix(video_player): add delay after audio track selection to handle Ex…
nateshmbhat Aug 30, 2025
894f516
test(video_player): update audio tracks test to use ImmutableList and…
nateshmbhat Aug 30, 2025
644e08e
Merge branch 'develop' of github.com:nateshmbhat/flutter_packages int…
nateshmbhat Aug 30, 2025
fdde6f8
refactor(tests): move audio track tests from AudioTracksTests.m to Vi…
nateshmbhat Aug 30, 2025
4291609
fix(ios,android): fixed test failure cases (linting and warnings)
nateshmbhat Aug 31, 2025
8dfd8e3
style(audio_tracks): improve code style and add type safety in audio …
nateshmbhat Aug 31, 2025
a892a5e
chore(android): bump compileSdk from 34 to 35 for video player plugin
nateshmbhat Sep 1, 2025
1537778
Merge branch 'main' into develop
nateshmbhat Sep 4, 2025
c222584
Merge branch 'main' into develop
nateshmbhat Sep 9, 2025
f087fe1
refactor(video): improve video player controller handling and code fo…
nateshmbhat Sep 19, 2025
2e4c9ac
Merge branch 'main' into develop
nateshmbhat Sep 19, 2025
652dd48
refactor(video): improve video player state management and UI components
nateshmbhat Sep 19, 2025
80bda36
refactor(ios): improve audio track format parsing with better mock ob…
nateshmbhat Sep 19, 2025
1495a95
refactor(ios): optimize audio track metadata lookup using AVMetadataI…
nateshmbhat Sep 19, 2025
ad558a7
refactor(video): move ExoPlayer delay from demo to controller impleme…
nateshmbhat Sep 19, 2025
6c7fd2b
Merge pull request #1 from nateshmbhat/19-sept-pr-review-changes
nateshmbhat Sep 19, 2025
85a8f54
Merge branch 'main' into develop
nateshmbhat Sep 20, 2025
ac54143
feat(video_player): add platform check for audio track selection support
nateshmbhat Sep 20, 2025
1775e23
Merge pull request #2 from nateshmbhat/19-sept-pr-review-changes
nateshmbhat Sep 20, 2025
6dafd5f
Merge branch 'develop' of github.com:nateshmbhat/flutter_packages int…
nateshmbhat Sep 20, 2025
9440d1b
style(dart): format code and improve readability with proper line breaks
nateshmbhat Sep 20, 2025
a65ebaf
chore(deps): format dependency overrides and add video_player_web path
nateshmbhat Sep 20, 2025
7798aaa
chore(deps): add video_player_web dependency and update package overr…
nateshmbhat Sep 20, 2025
e912f6d
fix(video_player): add web platform check for audio track selection d…
nateshmbhat Sep 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(video): address PR review comments
  • Loading branch information
nateshmbhat committed Aug 30, 2025
commit e0f6d65548d661f6e1a81851e6f79029dca9db17
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,12 @@ class _AudioTracksDemoState extends State<AudioTracksDemo> {
// Reload tracks to update selection status
await _loadAudioTracks();

if (!mounted) return;
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text('Selected audio track: $trackId')));
} catch (e) {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to select audio track: $e')),
);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,16 @@ public void testGetAudioTracks_withMultipleAudioTracks() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
assertEquals(2, result.size());

// Verify first track
Messages.AudioTrackMessage track1 = result.get(0);
assertEquals("0_0", track1.getId());
Messages.ExoPlayerAudioTrackData track1 = result.get(0);
assertEquals("0_0", track1.getTrackId());
assertEquals("English", track1.getLabel());
assertEquals("en", track1.getLanguage());
assertTrue(track1.getIsSelected());
Expand All @@ -105,8 +106,8 @@ public void testGetAudioTracks_withMultipleAudioTracks() {
assertEquals("mp4a.40.2", track1.getCodec());

// Verify second track
Messages.AudioTrackMessage track2 = result.get(1);
assertEquals("1_0", track2.getId());
Messages.ExoPlayerAudioTrackData track2 = result.get(1);
assertEquals("1_0", track2.getTrackId());
assertEquals("Español", track2.getLabel());
assertEquals("es", track2.getLanguage());
assertFalse(track2.getIsSelected());
Expand All @@ -126,7 +127,8 @@ public void testGetAudioTracks_withNoAudioTracks() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
Expand Down Expand Up @@ -158,14 +160,15 @@ public void testGetAudioTracks_withNullValues() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
assertEquals(1, result.size());

Messages.AudioTrackMessage track = result.get(0);
assertEquals("0_0", track.getId());
Messages.ExoPlayerAudioTrackData track = result.get(0);
assertEquals("0_0", track.getTrackId());
assertEquals("Audio Track 1", track.getLabel()); // Fallback label
assertEquals("und", track.getLanguage()); // Fallback language
assertFalse(track.getIsSelected());
Expand Down Expand Up @@ -207,18 +210,19 @@ public void testGetAudioTracks_withMultipleTracksInSameGroup() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
assertEquals(2, result.size());

// Verify track IDs are unique
Messages.AudioTrackMessage track1 = result.get(0);
Messages.AudioTrackMessage track2 = result.get(1);
assertEquals("0_0", track1.getId());
assertEquals("0_1", track2.getId());
assertNotEquals(track1.getId(), track2.getId());
Messages.ExoPlayerAudioTrackData track1 = result.get(0);
Messages.ExoPlayerAudioTrackData track2 = result.get(1);
assertEquals("0_0", track1.getTrackId());
assertEquals("0_1", track2.getTrackId());
assertNotEquals(track1.getTrackId(), track2.getTrackId());
}

@Test
Expand All @@ -243,7 +247,8 @@ public void testGetAudioTracks_withDifferentCodecs() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
Expand Down Expand Up @@ -276,13 +281,14 @@ public void testGetAudioTracks_withHighBitrateValues() {
when(mockExoPlayer.getCurrentTracks()).thenReturn(mockTracks);

// Test the method
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();

// Verify results
assertNotNull(result);
assertEquals(1, result.size());

Messages.AudioTrackMessage track = result.get(0);
Messages.ExoPlayerAudioTrackData track = result.get(0);
assertEquals(Long.valueOf(1536000), track.getBitrate());
assertEquals(Long.valueOf(96000), track.getSampleRate());
assertEquals(Long.valueOf(8), track.getChannelCount());
Expand Down Expand Up @@ -313,7 +319,8 @@ public void testGetAudioTracks_performanceWithManyTracks() {

// Measure performance
long startTime = System.currentTimeMillis();
List<Messages.AudioTrackMessage> result = videoPlayer.getAudioTracks();
Messages.NativeAudioTrackData nativeData = videoPlayer.getAudioTracks();
List<Messages.ExoPlayerAudioTrackData> result = nativeData.getExoPlayerTracks();
long endTime = System.currentTimeMillis();

// Verify results
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,10 @@ class AndroidVideoPlayer extends VideoPlayerPlatform {
for (final ExoPlayerAudioTrackData track in nativeData.exoPlayerTracks!) {
tracks.add(
VideoAudioTrack(
id: track.trackId!,
label: track.label!,
language: track.language!,
isSelected: track.isSelected!,
id: track.trackId,
label: track.label ?? 'Unknown',
language: track.language ?? 'und',
isSelected: track.isSelected,
bitrate: track.bitrate,
sampleRate: track.sampleRate,
channelCount: track.channelCount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ - (void)testGetAudioTracksWithRegularAssetTracks {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results
XCTAssertNil(error);
Expand Down Expand Up @@ -145,7 +145,7 @@ - (void)testGetAudioTracksWithMediaSelectionOptions {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results
XCTAssertNil(error);
Expand Down Expand Up @@ -176,7 +176,7 @@ - (void)testGetAudioTracksWithNoCurrentItem {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results
XCTAssertNil(error);
Expand All @@ -191,7 +191,7 @@ - (void)testGetAudioTracksWithNoAsset {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results
XCTAssertNil(error);
Expand All @@ -217,7 +217,7 @@ - (void)testGetAudioTracksCodecDetection {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results
XCTAssertNil(error);
Expand All @@ -243,7 +243,7 @@ - (void)testGetAudioTracksWithEmptyMediaSelectionOptions {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results - should fall back to asset tracks
XCTAssertNil(error);
Expand All @@ -266,7 +266,7 @@ - (void)testGetAudioTracksWithNilMediaSelectionOption {

// Test the method
FlutterError *error = nil;
FVPNativeAudioTrackData *result = [self.player getRawAudioTrackData:&error];
FVPNativeAudioTrackData *result = [self.player getAudioTracks:&error];

// Verify results - should handle nil option gracefully
XCTAssertNil(error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,9 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform {
for (final AssetAudioTrackData track in nativeData.assetTracks!) {
tracks.add(
VideoAudioTrack(
id: track.trackId!.toString(),
label: track.label!,
language: track.language!,
id: track.trackId.toString(),
label: track.label ?? 'Unknown',
language: track.language ?? 'und',
isSelected: track.isSelected,
bitrate: track.bitrate,
sampleRate: track.sampleRate,
Expand All @@ -241,12 +241,12 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform {
for (final MediaSelectionAudioTrackData track
in nativeData.mediaSelectionTracks!) {
final String trackId = 'media_selection_${track.index}';
final String label = track.commonMetadataTitle ?? track.displayName!;
final String label = track.commonMetadataTitle ?? track.displayName ?? 'Unknown';
tracks.add(
VideoAudioTrack(
id: trackId,
label: label,
language: track.languageCode!,
language: track.languageCode ?? 'und',
isSelected: track.isSelected,
),
);
Expand Down