diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 55d1435a118..eff85341000 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.6.5 + +* Bugfix to allow the audio-only HLS (.m3u8) on iOS. + ## 2.6.4 * Refactors native code structure. diff --git a/packages/video_player/video_player_avfoundation/darwin/RunnerTests/VideoPlayerTests.m b/packages/video_player/video_player_avfoundation/darwin/RunnerTests/VideoPlayerTests.m index 02b9199a74f..f35d38bd989 100644 --- a/packages/video_player/video_player_avfoundation/darwin/RunnerTests/VideoPlayerTests.m +++ b/packages/video_player/video_player_avfoundation/darwin/RunnerTests/VideoPlayerTests.m @@ -530,6 +530,22 @@ - (void)testHLSControls { XCTAssertEqualWithAccuracy([videoInitialization[@"duration"] intValue], 4000, 200); } +- (void)testAudioOnlyHLSControls { + NSObject *registrar = + [GetPluginRegistry() registrarForPlugin:@"TestAudioOnlyHLSControls"]; + + FVPVideoPlayerPlugin *videoPlayerPlugin = + (FVPVideoPlayerPlugin *)[[FVPVideoPlayerPlugin alloc] initWithRegistrar:registrar]; + + NSDictionary *videoInitialization = + [self testPlugin:videoPlayerPlugin + uri:@"https://flutter.github.io/assets-for-api-docs/assets/videos/hls/" + @"bee_audio_only.m3u8"]; + XCTAssertEqualObjects(videoInitialization[@"height"], @0); + XCTAssertEqualObjects(videoInitialization[@"width"], @0); + XCTAssertEqualWithAccuracy([videoInitialization[@"duration"] intValue], 4000, 200); +} + #if TARGET_OS_IOS - (void)testTransformFix { [self validateTransformFixForOrientation:UIImageOrientationUp]; diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayer.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayer.m index 31573da4039..5892274a37d 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayer.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayer.m @@ -383,7 +383,9 @@ - (void)setupEventSinkIfReadyToPlay { } BOOL hasVideoTracks = [asset tracksWithMediaType:AVMediaTypeVideo].count != 0; - BOOL hasNoTracks = asset.tracks.count == 0; + // Audio-only HLS files have no size, so `currentItem.tracks.count` must be used to check for + // track presence, as AVAsset does not always provide track information in HLS streams. + BOOL hasNoTracks = currentItem.tracks.count == 0 && asset.tracks.count == 0; // The player has not yet initialized when it has no size, unless it is an audio-only track. // HLS m3u8 video files never load any tracks, and are also not yet initialized until they have diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 233a9b65e86..632e59f60fd 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avfoundation description: iOS and macOS implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.6.4 +version: 2.6.5 environment: sdk: ^3.3.0