Refactor native player to use better_player
This commit is contained in:
parent
b1d27de3ea
commit
e7cb49da86
5 changed files with 61 additions and 51 deletions
|
|
@ -1,10 +1,10 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:better_player/better_player.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:frosty/screens/channel/video/video_store.dart';
|
||||
import 'package:simple_pip_mode/simple_pip.dart';
|
||||
import 'package:video_player/video_player.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
class Video extends StatefulWidget {
|
||||
|
|
@ -140,7 +140,7 @@ class _NativeVideoState extends State<NativeVideo> {
|
|||
return Center(
|
||||
child: AspectRatio(
|
||||
aspectRatio: 16 / 9,
|
||||
child: VideoPlayer(videoPlayerController),
|
||||
child: BetterPlayer(controller: videoPlayerController),
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:better_player/better_player.dart';
|
||||
import 'package:device_info_plus/device_info_plus.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
|
@ -10,7 +11,6 @@ import 'package:frosty/screens/settings/stores/auth_store.dart';
|
|||
import 'package:frosty/screens/settings/stores/settings_store.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:simple_pip_mode/simple_pip.dart';
|
||||
import 'package:video_player/video_player.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
|
||||
part 'video_store.g.dart';
|
||||
|
|
@ -34,7 +34,7 @@ abstract class VideoStoreBase with Store {
|
|||
WebViewController? controller;
|
||||
|
||||
@readonly
|
||||
VideoPlayerController? _videoPlayerController;
|
||||
BetterPlayerController? _videoPlayerController;
|
||||
|
||||
/// The timer that handles hiding the overlay automatically
|
||||
late Timer _overlayTimer;
|
||||
|
|
@ -126,14 +126,34 @@ abstract class VideoStoreBase with Store {
|
|||
updateStreamInfo();
|
||||
}
|
||||
|
||||
BetterPlayerController _createPlayerController({required String source}) {
|
||||
return BetterPlayerController(
|
||||
const BetterPlayerConfiguration(
|
||||
autoPlay: true,
|
||||
controlsConfiguration: BetterPlayerControlsConfiguration(
|
||||
showControls: false,
|
||||
),
|
||||
),
|
||||
betterPlayerDataSource: BetterPlayerDataSource(
|
||||
BetterPlayerDataSourceType.network,
|
||||
source,
|
||||
liveStream: true,
|
||||
// bufferingConfiguration: const BetterPlayerBufferingConfiguration(
|
||||
// bufferForPlaybackAfterRebufferMs: 500,
|
||||
// bufferForPlaybackMs: 500,
|
||||
// ),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Initializes the video webview.
|
||||
@action
|
||||
Future<void> initVideo() async {
|
||||
if (settingsStore.useNativePlayer) {
|
||||
_streamLinks = await twitchApi.getStreamLinks(userLogin: userLogin, token: authStore.streamLinkToken);
|
||||
_videoPlayerController = VideoPlayerController.network(_streamLinks?[_selectedQuality] ?? '');
|
||||
await _videoPlayerController?.initialize();
|
||||
await _videoPlayerController?.play();
|
||||
|
||||
_videoPlayerController = _createPlayerController(source: _streamLinks?[_selectedQuality] ?? '');
|
||||
|
||||
_paused = false;
|
||||
} else {
|
||||
// Add event listeners to notify the JavaScript channels when the video plays and pauses.
|
||||
|
|
@ -163,10 +183,8 @@ abstract class VideoStoreBase with Store {
|
|||
|
||||
@action
|
||||
Future<void> handleQualityChange(String quality) async {
|
||||
await _videoPlayerController?.dispose();
|
||||
_videoPlayerController = VideoPlayerController.network(_streamLinks?[quality] ?? '');
|
||||
await _videoPlayerController?.initialize();
|
||||
await _videoPlayerController?.play();
|
||||
_videoPlayerController?.dispose();
|
||||
_videoPlayerController = _createPlayerController(source: _streamLinks?[quality] ?? '');
|
||||
_selectedQuality = quality;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,16 +20,16 @@ mixin _$VideoStore on VideoStoreBase, Store {
|
|||
late final _$_videoPlayerControllerAtom =
|
||||
Atom(name: 'VideoStoreBase._videoPlayerController', context: context);
|
||||
|
||||
VideoPlayerController? get videoPlayerController {
|
||||
BetterPlayerController? get videoPlayerController {
|
||||
_$_videoPlayerControllerAtom.reportRead();
|
||||
return super._videoPlayerController;
|
||||
}
|
||||
|
||||
@override
|
||||
VideoPlayerController? get _videoPlayerController => videoPlayerController;
|
||||
BetterPlayerController? get _videoPlayerController => videoPlayerController;
|
||||
|
||||
@override
|
||||
set _videoPlayerController(VideoPlayerController? value) {
|
||||
set _videoPlayerController(BetterPlayerController? value) {
|
||||
_$_videoPlayerControllerAtom
|
||||
.reportWrite(value, super._videoPlayerController, () {
|
||||
super._videoPlayerController = value;
|
||||
|
|
|
|||
64
pubspec.lock
64
pubspec.lock
|
|
@ -41,6 +41,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.10.0"
|
||||
better_player:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: better_player
|
||||
sha256: f2e5d57ea49fb7c4d93838d23846ca5ddf78af6f946e103aeacf2afdd01909b3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.83"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -413,6 +421,14 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_widget_from_html_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_widget_from_html_core
|
||||
sha256: e8f4f8b461a140ffb7c71f938bc76efc758893e7468843d9dbf70cb0b9e900cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.8.5+3"
|
||||
freezed_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -429,6 +445,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.0"
|
||||
fwfh_text_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fwfh_text_style
|
||||
sha256: "37806ee0222f79b6e8d4c698c322c897eae6a817258156f40aeece4e588fac60"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.22.08+1"
|
||||
glob:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1107,46 +1131,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
video_player:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: video_player
|
||||
sha256: de95f0e9405f29b5582573d4166132e71f83b3158aac14e8ee5767a54f4f1fbd
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
video_player_android:
|
||||
visibility_detector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: video_player_android
|
||||
sha256: a592048a711d5739d9cea2255d425779f138d41095b9149bda60ce4bc1af8871
|
||||
name: visibility_detector
|
||||
sha256: "15c54a459ec2c17b4705450483f3d5a2858e733aee893dcee9d75fd04814940d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.4"
|
||||
video_player_avfoundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: video_player_avfoundation
|
||||
sha256: "75c6d68cd479a25f34d635149ba6887bc8f1b2b2921841121fd44ea0c5bc1927"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.4"
|
||||
video_player_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: video_player_platform_interface
|
||||
sha256: a8c4dcae2a7a6e7cc1d7f9808294d968eca1993af34a98e95b9bdfa959bec684
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
video_player_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: video_player_web
|
||||
sha256: "44ce41424d104dfb7cf6982cc6b84af2b007a24d126406025bf40de5d481c74c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.16"
|
||||
version: "0.3.3"
|
||||
wakelock:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ dependencies:
|
|||
simple_pip_mode:
|
||||
git:
|
||||
url: https://github.com/tommyxchow/simple_pip_mode_flutter
|
||||
video_player: ^2.6.1
|
||||
better_player: ^0.0.83
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue