From 274ca4edb065477adbe50d76a7dab62823db0a6d Mon Sep 17 00:00:00 2001 From: Undefined Date: Wed, 26 Apr 2023 23:11:47 +0900 Subject: [PATCH 01/11] [video_player] Fix: add missing isPlaybackLikelyToKeepUp check. When watching a live stream, if the playback buffers but the AVPlayerItem is likely to keep up, it is necessary to recheck AVPlayerItem.isPlaybackLikelyToKeepUp. If isPlaybackLikelyToKeepUp, a bufferingEnd event should be immediately triggered. --- .../ios/Classes/FLTVideoPlayerPlugin.m | 3 +++ 1 file changed, 3 insertions(+) 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 ccece112769..1a394cc855c 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -339,6 +339,9 @@ - (void)observeValueForKeyPath:(NSString *)path } else if (context == playbackBufferEmptyContext) { if (_eventSink != nil) { _eventSink(@{@"event" : @"bufferingStart"}); + if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { + _eventSink(@{@"event" : @"bufferingEnd"}); + } } } else if (context == playbackBufferFullContext) { if (_eventSink != nil) { From dc0e4be15bc6e428831c0ae2972551127104f8d0 Mon Sep 17 00:00:00 2001 From: Undefined Date: Thu, 27 Apr 2023 15:53:38 +0900 Subject: [PATCH 02/11] [video_player] Fixes missing `isPlaybackLikelyToKeepUp` check for iOS video player `bufferingEnd` event and `bufferingStart` event --- .../ios/Classes/FLTVideoPlayerPlugin.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 1a394cc855c..e44ec8432ad 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -338,14 +338,17 @@ - (void)observeValueForKeyPath:(NSString *)path } } else if (context == playbackBufferEmptyContext) { if (_eventSink != nil) { - _eventSink(@{@"event" : @"bufferingStart"}); if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { _eventSink(@{@"event" : @"bufferingEnd"}); + } else { + _eventSink(@{@"event" : @"bufferingStart"}); } } } else if (context == playbackBufferFullContext) { if (_eventSink != nil) { - _eventSink(@{@"event" : @"bufferingEnd"}); + if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { + _eventSink(@{@"event" : @"bufferingEnd"}); + } } } else if (context == rateContext) { // Important: Make sure to cast the object to AVPlayer when observing the rate property, From 0273fbe1f209b6b4d49ed516680c6fbcb36b735b Mon Sep 17 00:00:00 2001 From: Undefined Date: Thu, 27 Apr 2023 15:54:59 +0900 Subject: [PATCH 03/11] [video_player] Add testBufferingStateFromPlayer test case and update CHANGELOG.md formatting. --- .../ios/RunnerTests/VideoPlayerTests.m | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) 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 a9d7eac073d..17c46ad6f57 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 @@ -207,6 +207,52 @@ - (void)testDeregistersFromPlayer { [self waitForExpectationsWithTimeout:30.0 handler:nil]; } +- (void)testBufferingStateFromPlayer { + NSObject *registry = + (NSObject *)[[UIApplication sharedApplication] delegate]; + NSObject *registrar = + [registry registrarForPlugin:@"testLiveStreamBufferEndFromPlayer"]; + FLTVideoPlayerPlugin *videoPlayerPlugin = + (FLTVideoPlayerPlugin *)[[FLTVideoPlayerPlugin alloc] initWithRegistrar:registrar]; + + FlutterError *error; + [videoPlayerPlugin initialize:&error]; + XCTAssertNil(error); + + FLTCreateMessage *create = [FLTCreateMessage + makeWithAsset:nil + uri:@"https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4" + packageName:nil + formatHint:nil + httpHeaders:@{}]; + FLTTextureMessage *textureMessage = [videoPlayerPlugin create:create error:&error]; + XCTAssertNil(error); + XCTAssertNotNil(textureMessage); + FLTVideoPlayer *player = videoPlayerPlugin.playersByTextureId[textureMessage.textureId]; + XCTAssertNotNil(player); + AVPlayer *avPlayer = player.player; + [avPlayer play]; + + [player onListenWithArguments:nil + eventSink:^(NSDictionary *event) { + if ([event[@"event"] isEqualToString:@"bufferingEnd"]) { + XCTAssertTrue(avPlayer.currentItem.isPlaybackLikelyToKeepUp); + } + + if ([event[@"event"] isEqualToString:@"bufferingStart"]) { + XCTAssertFalse(avPlayer.currentItem.isPlaybackLikelyToKeepUp); + } + }]; + XCTestExpectation *bufferingStateExpectation = + [self expectationWithDescription:@"bufferingState"]; + NSTimeInterval timeout = 10; + dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, timeout * NSEC_PER_SEC); + dispatch_after(delay, dispatch_get_main_queue(), ^{ + [bufferingStateExpectation fulfill]; + }); + [self waitForExpectationsWithTimeout:timeout + 1 handler:nil]; +} + - (void)testVideoControls { NSObject *registry = (NSObject *)[[UIApplication sharedApplication] delegate]; From 00b0671b97b034f6dac34432f058a20381c97312 Mon Sep 17 00:00:00 2001 From: Undefined Date: Tue, 23 May 2023 13:29:27 +0900 Subject: [PATCH 04/11] [video_player] Fix: add missing isPlaybackLikelyToKeepUp check --- .../ios/Classes/FLTVideoPlayerPlugin.m | 2 ++ 1 file changed, 2 insertions(+) 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 e44ec8432ad..b415b459995 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -348,6 +348,8 @@ - (void)observeValueForKeyPath:(NSString *)path if (_eventSink != nil) { if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { _eventSink(@{@"event" : @"bufferingEnd"}); + } else { + _eventSink(@{@"event" : @"bufferingStart"}); } } } else if (context == rateContext) { From ef0e78ebf3074285578c2e71fb4d59f8a22ab978 Mon Sep 17 00:00:00 2001 From: Undefined Date: Tue, 23 May 2023 14:00:36 +0900 Subject: [PATCH 05/11] [video_player] Bump video_player_avfoundation version to 2.4.7 and add update CHANGELOG.md --- packages/video_player/video_player_avfoundation/CHANGELOG.md | 4 ++++ packages/video_player/video_player_avfoundation/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index a54aef55877..b47ead2d172 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -2,6 +2,10 @@ * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. +## 2.4.7 + +* Fixes missing `isPlaybackLikelyToKeepUp` check for iOS video player `bufferingEnd` event and `bufferingStart` event. + ## 2.4.6 * Fixes hang when seeking to end of video. diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 093f5ebbb51..a0c2f4ebae8 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/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.4.6 +version: 2.4.7 environment: sdk: ">=2.18.0 <4.0.0" From 899f0f1e7d58a9e7663a4d51a735f800b20909ab Mon Sep 17 00:00:00 2001 From: Undefined Date: Wed, 14 Jun 2023 16:04:56 +0900 Subject: [PATCH 06/11] [video_player] Add doc for iOS `playbackBufferEmpty` KVO bug. Refer: https://github.com/flutter/packages/pull/3826#discussion_r1204985454 --- .../ios/Classes/FLTVideoPlayerPlugin.m | 6 ++++++ 1 file changed, 6 insertions(+) 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 b415b459995..f817d377b38 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -337,6 +337,12 @@ - (void)observeValueForKeyPath:(NSString *)path } } } else if (context == playbackBufferEmptyContext) { + // There's a bug in AVFoundation, KVO for `playbackBufferEmpty` when playing HLS content. The + // expected behavior of the value change for `playbackBufferEmpty` is not triggered. This + // issue has been confirmed in iOS 16.5. Refer: + // https://github.com/flutter/packages/pull/3826#discussion_r1204985454 Fortunately, the KVO + // for `playbackBufferFull` is working correctly, so the bug won't affect the event passing + // responsible for `bufferingEnd` or `bufferingStart` events. if (_eventSink != nil) { if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { _eventSink(@{@"event" : @"bufferingEnd"}); From 39b3e5c240aa8d00b7c4eeca4113b02705b4f00e Mon Sep 17 00:00:00 2001 From: Undefined Date: Tue, 27 Jun 2023 15:06:36 +0900 Subject: [PATCH 07/11] [video_player] Add documentation explaining the use of `isPlaybackLikelyToKeepUp` over `isPlaybackBufferFull` or `isPlaybackLikelyToKeepUp` for determining playback stall status --- .../ios/Classes/FLTVideoPlayerPlugin.m | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) 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 f817d377b38..00237c905fe 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -337,13 +337,24 @@ - (void)observeValueForKeyPath:(NSString *)path } } } else if (context == playbackBufferEmptyContext) { - // There's a bug in AVFoundation, KVO for `playbackBufferEmpty` when playing HLS content. The - // expected behavior of the value change for `playbackBufferEmpty` is not triggered. This - // issue has been confirmed in iOS 16.5. Refer: - // https://github.com/flutter/packages/pull/3826#discussion_r1204985454 Fortunately, the KVO - // for `playbackBufferFull` is working correctly, so the bug won't affect the event passing - // responsible for `bufferingEnd` or `bufferingStart` events. if (_eventSink != nil) { + // There's a bug in AVFoundation, KVO for `playbackBufferEmpty` when playing HLS content. The + // expected behavior of the value change for `playbackBufferEmpty` is not triggered. This + // issue has been confirmed in iOS 16.5. Refer: + // https://github.com/flutter/packages/pull/3826#discussion_r1204985454 Fortunately, the KVO + // for `playbackBufferFull` is working correctly, so the bug won't affect the event passing + // responsible for `bufferingEnd` or `bufferingStart` events. + + // Here we check `isPlaybackLikelyToKeepUp` instead of `isPlaybackBufferEmpty` to determine if + // the playback is stalled or not. According to the Apple documentation for + // [`AVPlayerItem`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1390348-playbacklikelytokeepup?language=objc), + // `isPlaybackLikelyToKeepUp` effectively indicates the likelihood of uninterrupted playback. + // When `isPlaybackBufferEmpty` is true, it indicates a possible stall or end of playback, as + // explained in the + // [documentation](https://developer.apple.com/documentation/avfoundation/avplayeritem/1386960-playbackbufferempty?language=objc). + // However, when `isPlaybackBufferEmpty` is false, we cannot determine if the playback is + // actively playing, stalled, or reaching the end. Therefore, we rely on + // `isPlaybackLikelyToKeepUp` to make this determination. if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { _eventSink(@{@"event" : @"bufferingEnd"}); } else { @@ -352,6 +363,17 @@ - (void)observeValueForKeyPath:(NSString *)path } } else if (context == playbackBufferFullContext) { if (_eventSink != nil) { + // Here we check `isPlaybackLikelyToKeepUp` instead of `isPlaybackBufferFull` to determine if + // the playback is stalled or not. The + // [`isPlaybackLikelyToKeepUp`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1390348-playbacklikelytokeepup?language=objc) + // property effectively indicates the likelihood of uninterrupted playback. It's important to + // note that + // [`isPlaybackBufferFull`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1388852-playbackbufferfull?language=objc) + // is not suitable for predicting playback stalling. Its purpose is to determine whether the + // internal media buffer is full and if further I/O is suspended, rather than indicating the + // playback status. Since `isPlaybackBufferFull` does not provide information about playback + // stall or end, we rely on `isPlaybackLikelyToKeepUp` to make a more accurate determination + // about the playback status. if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { _eventSink(@{@"event" : @"bufferingEnd"}); } else { From 45c4c65ff3498b2c18e874c79f636d791e5c79a8 Mon Sep 17 00:00:00 2001 From: Undefined Date: Wed, 28 Jun 2023 20:54:55 +0900 Subject: [PATCH 08/11] [video_player] Remove unneeded KVO to `isPlaybackBufferFull` or `isPlaybackLikelyToKeepUp` for determining `isBuffering` status. `isBuffering` servea a singular purpose, indicating whether the playback is likely to proceed without stalling. Relying solely on `isPlaybackLikelyToKeepUp` is sufficient, as [discussion](https://github.com/flutter/packages/pull/3826#issuecomment-1573095221). Therefore, the code listening to `isPlaybackBufferEmpty` or `isPlaybackBufferFull` should be removed. --- .../ios/Classes/FLTVideoPlayerPlugin.m | 58 +------------------ 1 file changed, 3 insertions(+), 55 deletions(-) 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 00237c905fe..da3929a713b 100644 --- a/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/ios/Classes/FLTVideoPlayerPlugin.m @@ -72,8 +72,6 @@ - (instancetype)initWithURL:(NSURL *)url static void *presentationSizeContext = &presentationSizeContext; static void *durationContext = &durationContext; static void *playbackLikelyToKeepUpContext = &playbackLikelyToKeepUpContext; -static void *playbackBufferEmptyContext = &playbackBufferEmptyContext; -static void *playbackBufferFullContext = &playbackBufferFullContext; static void *rateContext = &rateContext; @implementation FLTVideoPlayer @@ -108,14 +106,6 @@ - (void)addObserversForItem:(AVPlayerItem *)item player:(AVPlayer *)player { forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:playbackLikelyToKeepUpContext]; - [item addObserver:self - forKeyPath:@"playbackBufferEmpty" - options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew - context:playbackBufferEmptyContext]; - [item addObserver:self - forKeyPath:@"playbackBufferFull" - options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew - context:playbackBufferFullContext]; // Add observer to AVPlayer instead of AVPlayerItem since the AVPlayerItem does not have a "rate" // property @@ -330,53 +320,13 @@ - (void)observeValueForKeyPath:(NSString *)path [self updatePlayingState]; } } else if (context == playbackLikelyToKeepUpContext) { + [self updatePlayingState]; if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { - [self updatePlayingState]; if (_eventSink != nil) { _eventSink(@{@"event" : @"bufferingEnd"}); } - } - } else if (context == playbackBufferEmptyContext) { - if (_eventSink != nil) { - // There's a bug in AVFoundation, KVO for `playbackBufferEmpty` when playing HLS content. The - // expected behavior of the value change for `playbackBufferEmpty` is not triggered. This - // issue has been confirmed in iOS 16.5. Refer: - // https://github.com/flutter/packages/pull/3826#discussion_r1204985454 Fortunately, the KVO - // for `playbackBufferFull` is working correctly, so the bug won't affect the event passing - // responsible for `bufferingEnd` or `bufferingStart` events. - - // Here we check `isPlaybackLikelyToKeepUp` instead of `isPlaybackBufferEmpty` to determine if - // the playback is stalled or not. According to the Apple documentation for - // [`AVPlayerItem`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1390348-playbacklikelytokeepup?language=objc), - // `isPlaybackLikelyToKeepUp` effectively indicates the likelihood of uninterrupted playback. - // When `isPlaybackBufferEmpty` is true, it indicates a possible stall or end of playback, as - // explained in the - // [documentation](https://developer.apple.com/documentation/avfoundation/avplayeritem/1386960-playbackbufferempty?language=objc). - // However, when `isPlaybackBufferEmpty` is false, we cannot determine if the playback is - // actively playing, stalled, or reaching the end. Therefore, we rely on - // `isPlaybackLikelyToKeepUp` to make this determination. - if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { - _eventSink(@{@"event" : @"bufferingEnd"}); - } else { - _eventSink(@{@"event" : @"bufferingStart"}); - } - } - } else if (context == playbackBufferFullContext) { - if (_eventSink != nil) { - // Here we check `isPlaybackLikelyToKeepUp` instead of `isPlaybackBufferFull` to determine if - // the playback is stalled or not. The - // [`isPlaybackLikelyToKeepUp`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1390348-playbacklikelytokeepup?language=objc) - // property effectively indicates the likelihood of uninterrupted playback. It's important to - // note that - // [`isPlaybackBufferFull`](https://developer.apple.com/documentation/avfoundation/avplayeritem/1388852-playbackbufferfull?language=objc) - // is not suitable for predicting playback stalling. Its purpose is to determine whether the - // internal media buffer is full and if further I/O is suspended, rather than indicating the - // playback status. Since `isPlaybackBufferFull` does not provide information about playback - // stall or end, we rely on `isPlaybackLikelyToKeepUp` to make a more accurate determination - // about the playback status. - if ([[_player currentItem] isPlaybackLikelyToKeepUp]) { - _eventSink(@{@"event" : @"bufferingEnd"}); - } else { + } else { + if (_eventSink != nil) { _eventSink(@{@"event" : @"bufferingStart"}); } } @@ -564,8 +514,6 @@ - (void)disposeSansEventChannel { [currentItem removeObserver:self forKeyPath:@"presentationSize"]; [currentItem removeObserver:self forKeyPath:@"duration"]; [currentItem removeObserver:self forKeyPath:@"playbackLikelyToKeepUp"]; - [currentItem removeObserver:self forKeyPath:@"playbackBufferEmpty"]; - [currentItem removeObserver:self forKeyPath:@"playbackBufferFull"]; [self.player replaceCurrentItemWithPlayerItem:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; From c0ab67862cc2aac8bba646dd564167b4efdd6ab9 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Thu, 13 Jul 2023 15:13:57 -0400 Subject: [PATCH 09/11] Merge NEXT into current version. --- packages/video_player/video_player_avfoundation/CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index b47ead2d172..ec10f4dee5c 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,10 +1,7 @@ -## NEXT - -* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. - ## 2.4.7 * Fixes missing `isPlaybackLikelyToKeepUp` check for iOS video player `bufferingEnd` event and `bufferingStart` event. +* Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. ## 2.4.6 From 6006c787defc6beb662140887b0d44dcaa682613 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Mon, 17 Jul 2023 15:57:25 -0400 Subject: [PATCH 10/11] Fix CHANGELOG merge --- packages/video_player/video_player_avfoundation/CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index aa421a6fc1b..5e7d48ef4a0 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,6 +1,9 @@ -## 2.4.7 +## 2.4.8 * Fixes missing `isPlaybackLikelyToKeepUp` check for iOS video player `bufferingEnd` event and `bufferingStart` event. + +## 2.4.7 + * Updates minimum supported SDK version to Flutter 3.3/Dart 2.18. * Adds iOS exception on incorrect asset path From b3e538a898497629f53d8014ce6337088c019824 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Mon, 17 Jul 2023 15:57:59 -0400 Subject: [PATCH 11/11] Re-bump version --- packages/video_player/video_player_avfoundation/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index a0c2f4ebae8..5c833930572 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/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.4.7 +version: 2.4.8 environment: sdk: ">=2.18.0 <4.0.0"