From d48681628ccc902842d6f12f5851523f2451981b Mon Sep 17 00:00:00 2001 From: Naomi Watanabe Date: Sun, 29 Sep 2024 18:41:44 +0900 Subject: [PATCH 1/2] [video_player_avfoundation] Support the HLS (.m3u8) audio on iOS --- packages/video_player/video_player_avfoundation/CHANGELOG.md | 4 ++++ .../Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m | 4 +--- packages/video_player/video_player_avfoundation/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 84579777521a..884b77ab1428 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.3 + +* Supports the audio-only HLS (.m3u8) on iOS. + ## 2.6.2 * Updates Pigeon for non-nullable collection type support. diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m index 14ee7ccefde2..0ba939c0fb81 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m @@ -431,11 +431,9 @@ - (void)setupEventSinkIfReadyToPlay { } BOOL hasVideoTracks = [asset tracksWithMediaType:AVMediaTypeVideo].count != 0; - BOOL hasNoTracks = asset.tracks.count == 0; + 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 - // a size. if ((hasVideoTracks || hasNoTracks) && height == CGSizeZero.height && width == CGSizeZero.width) { return; diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index d309c02258d1..31d615dd8862 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.2 +version: 2.6.3 environment: sdk: ^3.3.0 From 7818698734576b6b14f89736d1e96390004652c5 Mon Sep 17 00:00:00 2001 From: Naomi Watanabe Date: Tue, 15 Oct 2024 18:43:42 +0900 Subject: [PATCH 2/2] Add a native test for supporting HLS (.m3u8) audio --- .../darwin/RunnerTests/VideoPlayerTests.m | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 3ec96e78538a..30cc0ec7089c 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];