diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 9cb642a4db56..a82455231ecd 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.0 + +* Add `contentUri` based VideoPlayerController. + ## 2.1.15 * Ensured seekTo isn't called before video player is initialized. Fixes [#89259](https://github.com/flutter/flutter/issues/89259). diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart index b4c4b2b2a311..685563ae12c3 100644 --- a/packages/video_player/video_player/lib/video_player.dart +++ b/packages/video_player/video_player/lib/video_player.dart @@ -222,6 +222,21 @@ class VideoPlayerController extends ValueNotifier { httpHeaders = const {}, super(VideoPlayerValue(duration: Duration.zero)); + /// Constructs a [VideoPlayerController] playing a video from a contentUri. + /// + /// This will load the video from the input content-URI. + /// This is supported on Android only. + VideoPlayerController.contentUri(Uri contentUri, + {this.closedCaptionFile, this.videoPlayerOptions}) + : assert(defaultTargetPlatform == TargetPlatform.android, + 'VideoPlayerController.contentUri is only supported on Android.'), + dataSource = contentUri.toString(), + dataSourceType = DataSourceType.contentUri, + package = null, + formatHint = null, + httpHeaders = const {}, + super(VideoPlayerValue(duration: Duration.zero)); + /// The URI to the video file. This will be in different formats depending on /// the [DataSourceType] of the original video. final String dataSource; @@ -298,6 +313,12 @@ class VideoPlayerController extends ValueNotifier { uri: dataSource, ); break; + case DataSourceType.contentUri: + dataSourceDescription = DataSource( + sourceType: DataSourceType.contentUri, + uri: dataSource, + ); + break; } if (videoPlayerOptions?.mixWithOthers != null) { diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 7f6f608687cc..86eee3c9bf42 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, and web. repository: https://github.com/flutter/plugins/tree/master/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.1.15 +version: 2.2.0 environment: sdk: ">=2.12.0 <3.0.0" @@ -24,7 +24,7 @@ dependencies: flutter: sdk: flutter meta: ^1.3.0 - video_player_platform_interface: ^4.1.0 + video_player_platform_interface: ^4.2.0 # The design on https://flutter.dev/go/federated-plugins was to leave # this constraint as "any". We cannot do it right now as it fails pub publish # validation, so we set a ^ constraint. The exact value doesn't matter since 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 ad536f840c1d..5fdc1fbf4574 100644 --- a/packages/video_player/video_player/test/video_player_test.dart +++ b/packages/video_player/video_player/test/video_player_test.dart @@ -284,6 +284,15 @@ void main() { }); }); + test('contentUri', () async { + final VideoPlayerController controller = + VideoPlayerController.contentUri(Uri.parse('content://video')); + await controller.initialize(); + + expect(fakeVideoPlayerPlatform.dataSourceDescriptions[0].uri, + 'content://video'); + }); + test('dispose', () async { final VideoPlayerController controller = VideoPlayerController.network( 'https://127.0.0.1', diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md index a7a198db21e1..4eb7c9d610b5 100644 --- a/packages/video_player/video_player_web/CHANGELOG.md +++ b/packages/video_player/video_player_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.4 + +* Adopt `video_player_platform_interface` 4.2 and opt out of `contentUri` data source. + ## 2.0.3 * Add `implements` to pubspec. 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 d3ad80c890f1..2a830c9c573d 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 @@ -68,6 +68,17 @@ void main() { throwsUnimplementedError); }); + testWidgets('cannot create from content URI', (WidgetTester tester) async { + expect( + VideoPlayerPlatform.instance.create( + DataSource( + sourceType: DataSourceType.contentUri, + uri: 'content://video', + ), + ), + throwsUnimplementedError); + }); + testWidgets('can dispose', (WidgetTester tester) async { expect(VideoPlayerPlatform.instance.dispose(await textureId), completes); }); 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 f9e27d16725a..612d22d2eb3f 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 @@ -88,6 +88,9 @@ class VideoPlayerPlugin extends VideoPlayerPlatform { case DataSourceType.file: return Future.error(UnimplementedError( 'web implementation of video_player cannot play local files')); + case DataSourceType.contentUri: + return Future.error(UnimplementedError( + 'web implementation of video_player cannot play content uri')); } final _VideoPlayer player = _VideoPlayer( diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml index c5eb57c1fc6e..b401673c628d 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/plugins/tree/master/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.0.3 +version: 2.0.4 environment: sdk: ">=2.12.0 <3.0.0" @@ -22,7 +22,7 @@ dependencies: flutter_web_plugins: sdk: flutter meta: ^1.3.0 - video_player_platform_interface: ^4.0.0 + video_player_platform_interface: ^4.2.0 dev_dependencies: flutter_test: