diff --git a/packages/video_player/CHANGELOG.md b/packages/video_player/CHANGELOG.md index b1fa6fde6..3554cc004 100644 --- a/packages/video_player/CHANGELOG.md +++ b/packages/video_player/CHANGELOG.md @@ -4,21 +4,28 @@ ## 2.0.0 -* Appaly new common texture APIs +* Appaly new common texture APIs. ## 2.0.1 -* Update integration_test +* Update integration_test. ## 2.2.0 -* Update video_player to 2.2.3 -* Update platform interface to 4.2.0 +* Update video_player to 2.2.3. +* Update platform interface to 4.2.0. ## 2.2.1 -* Update README +* Update README. ## 2.2.2 * Fix `seekTo` so that it returns when seeking is completed. + +## 2.3.0 + +* Fix a freezing issue on Flutter 2.5 or above. +* Never return empty error messages to avoid null reference exceptions. +* Update video_player to 2.2.6 and update the example app. +* Minor cleanups. diff --git a/packages/video_player/README.md b/packages/video_player/README.md index bddf245d1..6564bfe01 100644 --- a/packages/video_player/README.md +++ b/packages/video_player/README.md @@ -4,7 +4,7 @@ The Tizen implementation of [`video_player`](https://github.com/flutter/plugins/ ## Required privileges -To use this plugin in a Tizen application, the mediastorage, externalstorage and internet privileges are required. Add below lines under the `` section in your `tizen-manifest.xml` file. +To use this plugin in a Tizen application, you may need to declare the following privileges in your `tizen-manifest.xml` file. ```xml @@ -14,11 +14,11 @@ To use this plugin in a Tizen application, the mediastorage, externalstorage and ``` -- The mediastorage privilege (`http://tizen.org/privilege/mediastorage`) must be added to play video files located in the internal storage. -- The externalstorage privilege (`http://tizen.org/privilege/externalstorage`) must be added to play video files located in the external storage. -- The internet privilege (`http://tizen.org/privilege/internet`) must be added to play any URLs from network. +- The mediastorage privilege (`http://tizen.org/privilege/mediastorage`) is required to play video files located in the internal storage. +- The externalstorage privilege (`http://tizen.org/privilege/externalstorage`) is required to play video files located in the external storage. +- The internet privilege (`http://tizen.org/privilege/internet`) is required to play any URLs from network. -For details, see [Security and API Privileges](https://docs.tizen.org/application/dotnet/tutorials/sec-privileges). +For detailed information on Tizen privileges, see [Tizen Docs: API Privileges](https://docs.tizen.org/application/dotnet/get-started/api-privileges). ## Usage @@ -26,8 +26,8 @@ This package is not an _endorsed_ implementation of `video_player`. Therefore, y ```yaml dependencies: - video_player: ^2.2.3 - video_player_tizen: ^2.2.2 + video_player: ^2.2.6 + video_player_tizen: ^2.3.0 ``` Then you can import `video_player` in your Dart code: @@ -36,14 +36,14 @@ Then you can import `video_player` in your Dart code: import 'package:video_player/video_player.dart'; ``` -For how to use the plugin, see https://github.com/flutter/plugins/tree/master/packages/video_player/video_player#usage. +For how to use the plugin, see https://github.com/flutter/plugins/tree/master/packages/video_player/video_player#example. ## Limitations -The 'httpheaders' option for 'VideoPlayerController.network' and 'mixWithOthers' option of 'VideoPlayerOptions' will be silently ignored in Tizen platform. +The `httpHeaders` option of `VideoPlayerController.network` and the `mixWithOthers` option of `VideoPlayerOptions` will be silently ignored in Tizen platform. -This plugin has some limitations on TV: +This plugin has some limitations on TV devices. -- The 'setPlaybackSpeed' method will fail if triggered within last 3 seconds. +- The `setPlaybackSpeed` method will fail if triggered within last 3 seconds. - The playback speed will reset to 1.0 when video is replayed in loop mode. -- The 'seekTo' method works only when playback speed is 1.0, and it sets video position to the nearest key frame which may differ from the passed argument. +- The `seekTo` method works only when playback speed is 1.0, and it sets video position to the nearest key frame which may differ from the passed argument. diff --git a/packages/video_player/example/assets/bumble_bee_captions.vtt b/packages/video_player/example/assets/bumble_bee_captions.vtt new file mode 100644 index 000000000..1dca2c586 --- /dev/null +++ b/packages/video_player/example/assets/bumble_bee_captions.vtt @@ -0,0 +1,7 @@ +WEBVTT + +00:00:00.200 --> 00:00:01.750 +[ Birds chirping ] + +00:00:02.300 --> 00:00:05.000 +[ Buzzing ] diff --git a/packages/video_player/example/lib/main.dart b/packages/video_player/example/lib/main.dart index eef23197e..f1329e86b 100644 --- a/packages/video_player/example/lib/main.dart +++ b/packages/video_player/example/lib/main.dart @@ -6,7 +6,6 @@ /// An example of using the plugin, controlling lifecycle and playback of the /// video. - import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:video_player/video_player.dart'; @@ -210,8 +209,9 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { Future _loadCaptions() async { final String fileContents = await DefaultAssetBundle.of(context) - .loadString('assets/bumble_bee_captions.srt'); - return SubRipCaptionFile(fileContents); + .loadString('assets/bumble_bee_captions.vtt'); + return WebVTTCaptionFile( + fileContents); // For vtt files, use WebVTTCaptionFile } @override @@ -297,6 +297,7 @@ class _ControlsOverlay extends StatelessWidget { Icons.play_arrow, color: Colors.white, size: 100.0, + semanticLabel: 'Play', ), ), ), diff --git a/packages/video_player/example/pubspec.yaml b/packages/video_player/example/pubspec.yaml index fa0940f91..99be278c5 100644 --- a/packages/video_player/example/pubspec.yaml +++ b/packages/video_player/example/pubspec.yaml @@ -26,6 +26,7 @@ flutter: - assets/flutter-mark-square-64.png - assets/Butterfly-209.mp4 - assets/bumble_bee_captions.srt + - assets/bumble_bee_captions.vtt uses-material-design: true environment: diff --git a/packages/video_player/example/tizen/Runner.csproj b/packages/video_player/example/tizen/Runner.csproj index f8346a628..c3c43aed9 100644 --- a/packages/video_player/example/tizen/Runner.csproj +++ b/packages/video_player/example/tizen/Runner.csproj @@ -1,4 +1,4 @@ - + Exe diff --git a/packages/video_player/example/tizen/tizen-manifest.xml b/packages/video_player/example/tizen/tizen-manifest.xml index ee94adaf0..3b5df127e 100644 --- a/packages/video_player/example/tizen/tizen-manifest.xml +++ b/packages/video_player/example/tizen/tizen-manifest.xml @@ -1,7 +1,7 @@ - + ic_launcher.png diff --git a/packages/video_player/pubspec.yaml b/packages/video_player/pubspec.yaml index 6b909fa07..228c5f368 100644 --- a/packages/video_player/pubspec.yaml +++ b/packages/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Tizen. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/video_player -version: 2.2.2 +version: 2.3.0 flutter: plugin: diff --git a/packages/video_player/tizen/src/message.h b/packages/video_player/tizen/src/message.h index a58b27822..07540adbf 100644 --- a/packages/video_player/tizen/src/message.h +++ b/packages/video_player/tizen/src/message.h @@ -4,6 +4,9 @@ #include #include +#include +#include + #include "video_player_error.h" class TextureMessage { diff --git a/packages/video_player/tizen/src/video_player.cc b/packages/video_player/tizen/src/video_player.cc index 4a3480180..f6b600d94 100644 --- a/packages/video_player/tizen/src/video_player.cc +++ b/packages/video_player/tizen/src/video_player.cc @@ -528,7 +528,8 @@ void VideoPlayer::onInterrupted(player_interrupted_code_e code, void *data) { if (player->event_sink_) { LOG_INFO("[VideoPlayer.onInterrupted] send error event"); - player->event_sink_->Error("Video player is interrupted", ""); + player->event_sink_->Error("Interrupted error", + "Video player has been interrupted."); } } @@ -539,8 +540,7 @@ void VideoPlayer::onErrorOccurred(int code, void *data) { if (player->event_sink_) { LOG_INFO("[VideoPlayer.onErrorOccurred] send error event"); - player->event_sink_->Error("Video player had error", - get_error_message(code)); + player->event_sink_->Error("Player error", get_error_message(code)); } } diff --git a/packages/video_player/tizen/src/video_player.h b/packages/video_player/tizen/src/video_player.h index a1556f121..ddf0ddb76 100644 --- a/packages/video_player/tizen/src/video_player.h +++ b/packages/video_player/tizen/src/video_player.h @@ -6,6 +6,8 @@ #include #include +#include +#include #include #include diff --git a/packages/video_player/tizen/src/video_player_tizen_plugin.cc b/packages/video_player/tizen/src/video_player_tizen_plugin.cc index a144c18ff..745a80dfc 100644 --- a/packages/video_player/tizen/src/video_player_tizen_plugin.cc +++ b/packages/video_player/tizen/src/video_player_tizen_plugin.cc @@ -6,6 +6,10 @@ #include #include +#include +#include +#include + #include "flutter_texture_registrar.h" #include "log.h" #include "message.h" @@ -102,7 +106,7 @@ TextureMessage VideoPlayerTizenPlugin::create(const CreateMessage &createMsg) { LOG_DEBUG( "[VideoPlayerTizenPlugin.create] failed to get resource path " "of package"); - throw VideoPlayerError("failed to get resource path", ""); + throw VideoPlayerError("Internal error", "Failed to get resource path."); } } LOG_DEBUG("[VideoPlayerTizenPlugin.create] uri of video player: %s",