From 5d80f3dd17d469be55f131a0bd3f7f33746fe703 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 1 Feb 2022 17:11:41 -0800 Subject: [PATCH 1/2] [video_player] Wait to initialize m3u8 videos on iOS until size is set --- .../video_player_avfoundation/CHANGELOG.md | 3 ++- .../example/ios/Runner.xcodeproj/project.pbxproj | 4 ++-- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../example/ios/RunnerTests/VideoPlayerTests.m | 16 ++++++++++++++++ .../ios/Classes/FLTVideoPlayerPlugin.m | 6 ++++-- .../video_player_avfoundation/pubspec.yaml | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index cc042ba2bfaa..4b162c3f719c 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.2.18 +* Wait to initialize m3u8 videos until size is set, fixing aspect ratio * Adjusts test timeouts for network-dependent native tests to avoid flake. ## 2.2.17 diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj index d19d578b6fb4..6069bf313e8e 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ @@ -269,7 +269,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1320; ORGANIZATIONNAME = "The Flutter Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 0632b6533bc8..c5858c80e959 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/video_player/video_player_avfoundation/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ *registry = + (NSObject *)[[UIApplication sharedApplication] delegate]; + NSObject *registrar = [registry registrarForPlugin:@"TestHlsControls"]; + + FLTVideoPlayerPlugin *videoPlayerPlugin = + (FLTVideoPlayerPlugin *)[[FLTVideoPlayerPlugin alloc] initWithRegistrar:registrar]; + + NSDictionary *videoInitialization = + [self testPlugin:videoPlayerPlugin + uri:@"https://flutter.github.io/assets-for-api-docs/assets/videos/hls/bee.m3u8"]; + XCTAssertEqualObjects(videoInitialization[@"height"], @720); + XCTAssertEqualObjects(videoInitialization[@"width"], @1280); + XCTAssertEqualWithAccuracy([videoInitialization[@"duration"] intValue], 4000, 200); +} + - (NSDictionary *)testPlugin:(FLTVideoPlayerPlugin *)videoPlayerPlugin uri:(NSString *)uri { FlutterError *error; diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m index 9cc40e388cef..456f4f0d11c6 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -354,9 +354,11 @@ - (void)setupEventSinkIfReadyToPlay { } BOOL hasVideoTracks = [asset tracksWithMediaType:AVMediaTypeVideo].count != 0; + BOOL hasNoTracks = asset.tracks.count == 0; - // The player has not yet initialized when it contains video tracks. - if (hasVideoTracks && height == CGSizeZero.height && width == CGSizeZero.width) { + // 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; } // The player may be initialized but still needs to determine the duration. diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 82ffedec2527..8b00249ee453 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 implementation of the video_player plugin. repository: https://github.com/flutter/plugins/tree/master/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.2.17 +version: 2.2.18 environment: sdk: ">=2.14.0 <3.0.0" From 9707baa521f97aa705183c9e8457441f329e5721 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 3 Feb 2022 10:52:51 -0800 Subject: [PATCH 2/2] Review edits --- .../video_player/video_player_avfoundation/CHANGELOG.md | 2 +- .../example/ios/RunnerTests/VideoPlayerTests.m | 4 ++-- .../ios/Classes/FLTVideoPlayerPlugin.m | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 4b162c3f719c..161e9002902e 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,6 +1,6 @@ ## 2.2.18 -* Wait to initialize m3u8 videos until size is set, fixing aspect ratio +* Wait to initialize m3u8 videos until size is set, fixing aspect ratio. * Adjusts test timeouts for network-dependent native tests to avoid flake. ## 2.2.17 diff --git a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m index 534711e0a664..d7044faf2332 100644 --- a/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m +++ b/packages/video_player/video_player_avfoundation/example/ios/RunnerTests/VideoPlayerTests.m @@ -103,10 +103,10 @@ - (void)testAudioControls { XCTAssertEqualWithAccuracy([audioInitialization[@"duration"] intValue], 5400, 200); } -- (void)testHlsControls { +- (void)testHLSControls { NSObject *registry = (NSObject *)[[UIApplication sharedApplication] delegate]; - NSObject *registrar = [registry registrarForPlugin:@"TestHlsControls"]; + NSObject *registrar = [registry registrarForPlugin:@"TestHLSControls"]; FLTVideoPlayerPlugin *videoPlayerPlugin = (FLTVideoPlayerPlugin *)[[FLTVideoPlayerPlugin alloc] initWithRegistrar:registrar]; diff --git a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m index 456f4f0d11c6..55021cce64f9 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -357,8 +357,10 @@ - (void)setupEventSinkIfReadyToPlay { BOOL hasNoTracks = 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) { + // 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; } // The player may be initialized but still needs to determine the duration.