From 7a5d7db40bf0914bbf7907d086f1d074fb5aeeb8 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 18 Sep 2020 16:22:52 +0200 Subject: [PATCH 1/5] Fixed HLS streams on iOS (#48760) --- packages/video_player/video_player/CHANGELOG.md | 5 +++++ packages/video_player/video_player/example/lib/main.dart | 4 ++-- .../video_player/ios/Classes/FLTVideoPlayerPlugin.m | 7 ++++++- packages/video_player/video_player/lib/video_player.dart | 4 ++-- packages/video_player/video_player/pubspec.yaml | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 4e2df4ebaef3..de249eec427a 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.10.12+5 + +* Added isDurationIndefinite to support indefinite streams +* Raised video_player_platform_interface in video_player to 2.1.1. + ## 0.10.12+4 * Keep handling deprecated Android v1 classes for backward compatibility. diff --git a/packages/video_player/video_player/example/lib/main.dart b/packages/video_player/video_player/example/lib/main.dart index ee2fcbdc9632..40d0d0d0d2b5 100644 --- a/packages/video_player/video_player/example/lib/main.dart +++ b/packages/video_player/video_player/example/lib/main.dart @@ -218,7 +218,7 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { void initState() { super.initState(); _controller = VideoPlayerController.network( - 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4', + 'https://rtmp.api.rt.com/hls/rtdru.m3u8', closedCaptionFile: _loadCaptions(), videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), ); @@ -253,7 +253,7 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { VideoPlayer(_controller), ClosedCaption(text: _controller.value.caption.text), _PlayPauseOverlay(controller: _controller), - VideoProgressIndicator(_controller, allowScrubbing: true), + VideoProgressIndicator(_controller, allowScrubbing: false), ], ), ), diff --git a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m index a834fe32b87b..be0c7d3d84f6 100644 --- a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m @@ -302,6 +302,10 @@ - (void)updatePlayingState { _displayLink.paused = !_isPlaying; } +- (bool)isDurationIndefinite { + return CMTIME_IS_INDEFINITE([[_player currentItem] duration]); +} + - (void)sendInitialized { if (_eventSink && !_isInitialized) { CGSize size = [self.player currentItem].presentationSize; @@ -312,8 +316,9 @@ - (void)sendInitialized { if (height == CGSizeZero.height && width == CGSizeZero.width) { return; } + // The player may be initialized but still needs to determine the duration. - if ([self duration] == 0) { + if ([self duration] == 0 && ![self isDurationIndefinite]) { return; } diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart index 8cd05615cc43..16dc1fcb7bc8 100644 --- a/packages/video_player/video_player/lib/video_player.dart +++ b/packages/video_player/video_player/lib/video_player.dart @@ -757,12 +757,12 @@ class _VideoProgressIndicatorState extends State { fit: StackFit.passthrough, children: [ LinearProgressIndicator( - value: maxBuffering / duration, + value: duration > 0 ? maxBuffering / duration : 0, valueColor: AlwaysStoppedAnimation(colors.bufferedColor), backgroundColor: colors.backgroundColor, ), LinearProgressIndicator( - value: position / duration, + value: duration > 0 ? position / duration : 0, valueColor: AlwaysStoppedAnimation(colors.playedColor), backgroundColor: Colors.transparent, ), diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 6eac285006a9..f3ade7608aef 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -20,7 +20,7 @@ flutter: dependencies: meta: ^1.0.5 - video_player_platform_interface: ^2.1.0 + video_player_platform_interface: ^2.1.1 # 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. From 584d8223ed475b94d82d817fbd0049cad2bc4c0c Mon Sep 17 00:00:00 2001 From: daniel Date: Thu, 24 Sep 2020 09:31:47 +0200 Subject: [PATCH 2/5] Fixed HLS streams on iOS (#48760) --- packages/video_player/video_player/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index f3ade7608aef..82d01f6098ef 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -4,7 +4,7 @@ description: Flutter plugin for displaying inline video with other Flutter # 0.10.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.10.12+4 +version: 0.10.12+5 homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player flutter: From b93ad25e49e94d6a4eceb95e50a78fb814121631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl?= <32639467+danielroek@users.noreply.github.com> Date: Thu, 24 Sep 2020 09:39:22 +0200 Subject: [PATCH 3/5] Reverted video url --- packages/video_player/video_player/example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/example/lib/main.dart b/packages/video_player/video_player/example/lib/main.dart index 40d0d0d0d2b5..955faf82f329 100644 --- a/packages/video_player/video_player/example/lib/main.dart +++ b/packages/video_player/video_player/example/lib/main.dart @@ -218,7 +218,7 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { void initState() { super.initState(); _controller = VideoPlayerController.network( - 'https://rtmp.api.rt.com/hls/rtdru.m3u8', + 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4', closedCaptionFile: _loadCaptions(), videoPlayerOptions: VideoPlayerOptions(mixWithOthers: true), ); From 8d329293c36fdc120e08c6f4bb33841be0a2b601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl?= <32639467+danielroek@users.noreply.github.com> Date: Fri, 25 Sep 2020 11:27:37 +0200 Subject: [PATCH 4/5] Reverted allowScrubbing change --- packages/video_player/video_player/example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/example/lib/main.dart b/packages/video_player/video_player/example/lib/main.dart index 955faf82f329..ee2fcbdc9632 100644 --- a/packages/video_player/video_player/example/lib/main.dart +++ b/packages/video_player/video_player/example/lib/main.dart @@ -253,7 +253,7 @@ class _BumbleBeeRemoteVideoState extends State<_BumbleBeeRemoteVideo> { VideoPlayer(_controller), ClosedCaption(text: _controller.value.caption.text), _PlayPauseOverlay(controller: _controller), - VideoProgressIndicator(_controller, allowScrubbing: false), + VideoProgressIndicator(_controller, allowScrubbing: true), ], ), ), From 4858df98cb95d5c328bff8fbaccfa8e67e10a28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl?= <32639467+danielroek@users.noreply.github.com> Date: Fri, 25 Sep 2020 11:28:47 +0200 Subject: [PATCH 5/5] Update pubspec.yaml --- packages/video_player/video_player/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 82d01f6098ef..1e9c1dfac281 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -20,7 +20,7 @@ flutter: dependencies: meta: ^1.0.5 - video_player_platform_interface: ^2.1.1 + video_player_platform_interface: ^2.1.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.