[video_player] add support for content-uri based videos (#4330)
diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md
index 9cb642a..a824552 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 b4c4b2b..685563a 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 @@
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 @@
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 7f6f608..86eee3c 100644
--- a/packages/video_player/video_player/pubspec.yaml
+++ b/packages/video_player/video_player/pubspec.yaml
@@ -3,7 +3,7 @@
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 @@
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 ad536f8..5fdc1fb 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 @@
});
});
+ 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 a7a198d..4eb7c9d 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 d3ad80c..2a830c9 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 @@
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 f9e27d1..612d22d 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 @@
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 c5eb57c..b401673 100644
--- a/packages/video_player/video_player_web/pubspec.yaml
+++ b/packages/video_player/video_player_web/pubspec.yaml
@@ -2,7 +2,7 @@
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 @@
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: