diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index d01c0ec1d9a..8e9f0a9bbdc 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.11.0 * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. +* Implements background playback functionality using allowBackgroundPlayback option. ## 2.10.0 diff --git a/packages/video_player/video_player/README.md b/packages/video_player/video_player/README.md index 261b68ba5c5..d97148fa8e6 100644 --- a/packages/video_player/video_player/README.md +++ b/packages/video_player/video_player/README.md @@ -22,6 +22,15 @@ in `/ios/Runner/Info.plist`. See [Apple's documentation](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity) to determine the right combination of entries for your use case and supported iOS versions. +If you plan to use background playback, you will also need to add the following permission in your Info.plist file. + +```xml +UIBackgroundModes + + audio + +``` + ### Android If you are using network-based videos, ensure that the following permission is present in your @@ -31,6 +40,12 @@ Android Manifest file, located in `/android/app/src/main/AndroidMa ``` +If you plan to use background playback, you will also need to add the following permission in your Android Manifest file. + +```xml + +``` + ### macOS If you are using network-based videos, you will need to [add the diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart index 8f8ebf5d8dc..f0f63978a0a 100644 --- a/packages/video_player/video_player/lib/video_player.dart +++ b/packages/video_player/video_player/lib/video_player.dart @@ -469,6 +469,12 @@ class VideoPlayerController extends ValueNotifier { ); } + if (videoPlayerOptions?.allowBackgroundPlayback != null) { + await _videoPlayerPlatform.setAllowBackgroundPlayback( + videoPlayerOptions!.allowBackgroundPlayback, + ); + } + _playerId = (await _videoPlayerPlatform.createWithOptions(creationOptions)) ?? kUninitializedPlayerId; diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index c8863f632ff..0a1ef2ca883 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Android, iOS, macOS and web. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.10.0 +version: 2.11.0 environment: sdk: ^3.7.0 @@ -27,7 +27,7 @@ dependencies: html: ^0.15.0 video_player_android: ^2.8.1 video_player_avfoundation: ^2.7.0 - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 video_player_web: ^2.1.0 dev_dependencies: diff --git a/packages/video_player/video_player/test/video_player_test.dart b/packages/video_player/video_player/test/video_player_test.dart index 8ded8dd56e6..e0e15194138 100644 --- a/packages/video_player/video_player/test/video_player_test.dart +++ b/packages/video_player/video_player/test/video_player_test.dart @@ -1572,8 +1572,13 @@ class FakeVideoPlayerPlatform extends VideoPlayerPlatform { } @override - Widget buildView(int playerId) { - return Texture(textureId: playerId); + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + calls.add('setAllowBackgroundPlayback'); + } + + @override + Widget buildView(int textureId) { + return Texture(textureId: textureId); } @override diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index a6decfda03b..3d63b556a48 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 2.8.17 * Moves video event processing logic to Dart, and fixes an issue where buffer diff --git a/packages/video_player/video_player_android/README.md b/packages/video_player/video_player_android/README.md index 8bffc986128..f3ebf6412d0 100644 --- a/packages/video_player/video_player_android/README.md +++ b/packages/video_player/video_player_android/README.md @@ -11,6 +11,12 @@ so you do not need to add it to your `pubspec.yaml`. However, if you `import` this package to use any of its APIs directly, you should add it to your `pubspec.yaml` as usual. +If you plan to use background playback, you will also need to add the following permission in your Android Manifest file. + +```xml + +``` + ## Known issues Using `VideoViewType.platformView` is not currently recommended on Android due to a known [issue][3] affecting platform views on Android. diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index d297dad31cc..8777fff162e 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -56,6 +56,15 @@ public VideoPlayer( exoPlayer.prepare(); exoPlayer.addListener(createExoPlayerEventListener(exoPlayer, surfaceProducer)); setAudioAttributes(exoPlayer, options.mixWithOthers); + + if (options.allowBackgroundPlayback) { + // This flag allows playback to continue when the device is in Doze mode. + // WAKE_MODE_NETWORK is used to allow network streaming to continue. + exoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); + exoPlayer.setAudioAttributes( + new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build(), + /* handleAudioFocus= */ !options.mixWithOthers); + } } public void setDisposeHandler(@Nullable DisposeHandler handler) { diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java index 20f7c5d2dba..386d7ae5324 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java @@ -6,4 +6,5 @@ public class VideoPlayerOptions { public boolean mixWithOthers; + public boolean allowBackgroundPlayback; } diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java index e3a8b4dc1d6..1391e9db201 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java @@ -188,6 +188,11 @@ public void setMixWithOthers(boolean mixWithOthers) { : flutterState.keyForAssetAndPackageName.get(asset, packageName); } + @Override + public void setAllowBackgroundPlayback(boolean allowBackgroundPlayback) { + sharedOptions.allowBackgroundPlayback = allowBackgroundPlayback; + } + private interface KeyForAssetFn { String get(String asset); } diff --git a/packages/video_player/video_player_android/android/src/main/kotlin/io/flutter/plugins/videoplayer/Messages.kt b/packages/video_player/video_player_android/android/src/main/kotlin/io/flutter/plugins/videoplayer/Messages.kt index 800026ab4d8..da58aa3c719 100644 --- a/packages/video_player/video_player_android/android/src/main/kotlin/io/flutter/plugins/videoplayer/Messages.kt +++ b/packages/video_player/video_player_android/android/src/main/kotlin/io/flutter/plugins/videoplayer/Messages.kt @@ -412,6 +412,8 @@ interface AndroidVideoPlayerApi { fun setMixWithOthers(mixWithOthers: Boolean) + fun setAllowBackgroundPlayback(allowBackgroundPlayback: Boolean) + fun getLookupKeyForAsset(asset: String, packageName: String?): String companion object { @@ -540,6 +542,29 @@ interface AndroidVideoPlayerApi { channel.setMessageHandler(null) } } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val allowBackgroundPlaybackArg = args[0] as Boolean + val wrapped: List = + try { + api.setAllowBackgroundPlayback(allowBackgroundPlaybackArg) + listOf(null) + } catch (exception: Throwable) { + MessagesPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } run { val channel = BasicMessageChannel( diff --git a/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/VideoPlayerTest.java b/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/VideoPlayerTest.java index 9876f1245d6..af9eefc84fd 100644 --- a/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/VideoPlayerTest.java +++ b/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/VideoPlayerTest.java @@ -227,4 +227,27 @@ public void disposeReleasesExoPlayer() { verify(mockExoPlayer).release(); } + + @Test + public void loadsAndPreparesProvidedMediaWithoutWakeModeByDefault() { + VideoPlayerOptions options = new VideoPlayerOptions(); + + VideoPlayer videoPlayer = createVideoPlayer(options); + + verify(mockExoPlayer, never()).setWakeMode(anyInt()); + + videoPlayer.dispose(); + } + + @Test + public void loadsAndPreparesProvidedMediaWakeModeWhenAllowBackgroundPlaybackSet() { + VideoPlayerOptions options = new VideoPlayerOptions(); + options.allowBackgroundPlayback = true; + + VideoPlayer videoPlayer = createVideoPlayer(options); + + verify(mockExoPlayer).setWakeMode(C.WAKE_MODE_NETWORK); + + videoPlayer.dispose(); + } } diff --git a/packages/video_player/video_player_android/example/pubspec.yaml b/packages/video_player/video_player_android/example/pubspec.yaml index 4afc63d4990..9b9f8a21cca 100644 --- a/packages/video_player/video_player_android/example/pubspec.yaml +++ b/packages/video_player/video_player_android/example/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 dev_dependencies: espresso: ^0.4.0 diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart b/packages/video_player/video_player_android/lib/src/android_video_player.dart index f65b83b8a84..a8dcf65cfbe 100644 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart @@ -225,6 +225,11 @@ class AndroidVideoPlayer extends VideoPlayerPlatform { return _api.setMixWithOthers(mixWithOthers); } + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); + } + _PlayerInstance _playerWith({required int id}) { final _PlayerInstance? player = _players[id]; return player ?? (throw StateError('No active player with ID $id.')); diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart b/packages/video_player/video_player_android/lib/src/messages.g.dart index 5674729aeb1..633fa10ce36 100644 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart @@ -534,6 +534,33 @@ class AndroidVideoPlayerApi { } } + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send( + [allowBackgroundPlayback], + ); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + Future getLookupKeyForAsset(String asset, String? packageName) async { final String pigeonVar_channelName = 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.getLookupKeyForAsset$pigeonVar_messageChannelSuffix'; diff --git a/packages/video_player/video_player_android/pigeons/messages.dart b/packages/video_player/video_player_android/pigeons/messages.dart index 6fee5973760..aeaeceb157c 100644 --- a/packages/video_player/video_player_android/pigeons/messages.dart +++ b/packages/video_player/video_player_android/pigeons/messages.dart @@ -83,6 +83,7 @@ abstract class AndroidVideoPlayerApi { TexturePlayerIds createForTextureView(CreationOptions options); void dispose(int playerId); void setMixWithOthers(bool mixWithOthers); + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); String getLookupKeyForAsset(String asset, String? packageName); } diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index 8c996569854..8ffffd9c38e 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_android description: Android implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.8.17 +version: 2.9.0 environment: sdk: ^3.9.0 @@ -20,7 +20,7 @@ flutter: dependencies: flutter: sdk: flutter - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 dev_dependencies: build_runner: ^2.3.3 diff --git a/packages/video_player/video_player_android/test/android_video_player_test.dart b/packages/video_player/video_player_android/test/android_video_player_test.dart index 8ce82b0fdfb..b2d87e81487 100644 --- a/packages/video_player/video_player_android/test/android_video_player_test.dart +++ b/packages/video_player/video_player_android/test/android_video_player_test.dart @@ -525,6 +525,24 @@ void main() { }); }); + group('setAllowBackgroundPlayback', () { + test('passes true', () async { + final (AndroidVideoPlayer player, MockAndroidVideoPlayerApi api, _) = + setUpMockPlayer(playerId: 1); + await player.setAllowBackgroundPlayback(true); + + verify(api.setAllowBackgroundPlayback(true)); + }); + + test('passes false', () async { + final (AndroidVideoPlayer player, MockAndroidVideoPlayerApi api, _) = + setUpMockPlayer(playerId: 1); + await player.setAllowBackgroundPlayback(false); + + verify(api.setAllowBackgroundPlayback(false)); + }); + }); + test('setVolume', () async { final ( AndroidVideoPlayer player, diff --git a/packages/video_player/video_player_android/test/android_video_player_test.mocks.dart b/packages/video_player/video_player_android/test/android_video_player_test.mocks.dart index 2b75dc1e66e..ee0a08515aa 100644 --- a/packages/video_player/video_player_android/test/android_video_player_test.mocks.dart +++ b/packages/video_player/video_player_android/test/android_video_player_test.mocks.dart @@ -106,6 +106,17 @@ class MockAndroidVideoPlayerApi extends _i1.Mock ) as _i4.Future); + @override + _i4.Future setAllowBackgroundPlayback(bool? allowBackgroundPlayback) => + (super.noSuchMethod( + Invocation.method(#setAllowBackgroundPlayback, [ + allowBackgroundPlayback, + ]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + @override _i4.Future getLookupKeyForAsset(String? asset, String? packageName) => (super.noSuchMethod( diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 5af78861509..fdf5873b899 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 2.8.5 * Updates minimum supported version to iOS 13 and macOS 10.15. diff --git a/packages/video_player/video_player_avfoundation/example/pubspec.yaml b/packages/video_player/video_player_avfoundation/example/pubspec.yaml index cc176e75c3f..7a0280eed65 100644 --- a/packages/video_player/video_player_avfoundation/example/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/example/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: # The example app is bundled with the plugin so we use a path dependency on # the parent directory to use the current plugin's version. path: ../ - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 dev_dependencies: flutter_test: diff --git a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart index 4c1719578f6..0e176350528 100644 --- a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart +++ b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart @@ -211,6 +211,12 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform { return _api.setMixWithOthers(mixWithOthers); } + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + // No-op on iOS as background playback already works + return Future.value(); + } + @override Widget buildView(int playerId) { return buildViewWithOptions(VideoViewOptions(playerId: playerId)); diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index ee4bd6a25b5..697f00dca48 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.8.5 +version: 2.9.0 environment: sdk: ^3.9.0 @@ -24,7 +24,7 @@ flutter: dependencies: flutter: sdk: flutter - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 dev_dependencies: build_runner: ^2.3.3 diff --git a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart index 11cac97a7dd..d103fe7a757 100644 --- a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart +++ b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart @@ -489,6 +489,15 @@ void main() { }); }); + test('setAllowBackgroundPlayback does nothing', () async { + final (AVFoundationVideoPlayer player, _, _) = setUpMockPlayer( + playerId: 1, + ); + // Should complete without error, even though it's a no-op on iOS + await player.setAllowBackgroundPlayback(true); + await player.setAllowBackgroundPlayback(false); + }); + test('setVolume', () async { final ( AVFoundationVideoPlayer player, diff --git a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.mocks.dart b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.mocks.dart index 8caf6ad8dc4..0af159d6686 100644 --- a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.mocks.dart +++ b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.mocks.dart @@ -97,6 +97,17 @@ class MockAVFoundationVideoPlayerApi extends _i1.Mock ) as _i4.Future); + @override + _i4.Future setAllowBackgroundPlayback(bool? allowBackgroundPlayback) => + (super.noSuchMethod( + Invocation.method(#setAllowBackgroundPlayback, [ + allowBackgroundPlayback, + ]), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) + as _i4.Future); + @override _i4.Future getAssetUrl(String? asset, String? package) => (super.noSuchMethod( diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md index 83c26791acd..ebdcf00e521 100644 --- a/packages/video_player/video_player_web/CHANGELOG.md +++ b/packages/video_player/video_player_web/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.5.0 * Updates minimum supported SDK version to Flutter 3.29/Dart 3.7. +* Implements background playback functionality using allowBackgroundPlayback option. ## 2.4.0 diff --git a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart index dc70f9f35b6..4cc6e408530 100644 --- a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart +++ b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart @@ -203,6 +203,19 @@ void main() { expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes); }); + testWidgets('ignores setting allowBackgroundPlayback', ( + WidgetTester tester, + ) async { + expect( + VideoPlayerPlatform.instance.setAllowBackgroundPlayback(true), + completes, + ); + expect( + VideoPlayerPlatform.instance.setAllowBackgroundPlayback(false), + completes, + ); + }); + testWidgets( 'double call to play will emit a single isPlayingStateUpdate event', (WidgetTester tester) async { diff --git a/packages/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml index e3bce694990..58d6cd09045 100644 --- a/packages/video_player/video_player_web/example/pubspec.yaml +++ b/packages/video_player/video_player_web/example/pubspec.yaml @@ -8,7 +8,7 @@ environment: dependencies: flutter: sdk: flutter - video_player_platform_interface: ^6.3.0 + video_player_platform_interface: ^6.5.0 video_player_web: path: ../ web: ^1.0.0 diff --git a/packages/video_player/video_player_web/lib/video_player_web.dart b/packages/video_player/video_player_web/lib/video_player_web.dart index a7061b6652a..2ec3981120c 100644 --- a/packages/video_player/video_player_web/lib/video_player_web.dart +++ b/packages/video_player/video_player_web/lib/video_player_web.dart @@ -170,4 +170,9 @@ class VideoPlayerPlugin extends VideoPlayerPlatform { /// Sets the audio mode to mix with other sources (ignored). @override Future setMixWithOthers(bool mixWithOthers) => Future.value(); + + /// Sets the audio mode to allow background playback (ignored). + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) => + Future.value(); } diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml index ca36ffe35ee..82a101cd867 100644 --- a/packages/video_player/video_player_web/pubspec.yaml +++ b/packages/video_player/video_player_web/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_web description: Web platform implementation of video_player. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.4.0 +version: 2.5.0 environment: sdk: ^3.7.0 @@ -21,7 +21,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter - video_player_platform_interface: ^6.4.0 + video_player_platform_interface: ^6.5.0 web: ">=0.5.1 <2.0.0" dev_dependencies: