Use audioplayer instead of kplayer. Very long UI freeze to play song...

This commit is contained in:
poka 2022-05-06 17:15:41 +02:00
parent 05f1d702e3
commit ebb8806c2b
9 changed files with 60 additions and 170 deletions

View File

@ -1,7 +1,6 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
late String token;
TextStyle globalTextStyle = TextStyle(color: Colors.grey[350]); TextStyle globalTextStyle = TextStyle(color: Colors.grey[350]);
const proxyHeader = const proxyHeader =
kDebugMode || !kIsWeb ? 'https://' : 'http://127.0.0.1:8080/'; kDebugMode || !kIsWeb ? 'https://' : 'http://127.0.0.1:8080/';

View File

@ -3,13 +3,9 @@ import 'package:fipy/providers/player.dart';
import 'package:fipy/screens/home.dart'; import 'package:fipy/screens/home.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:kplayer/kplayer.dart';
import 'package:kplayer_with_audioplayers/kplayer_with_audioplayers.dart' as kp;
Future<void> main() async { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
Player.boot();
kp.Player.boot();
runApp(const FipyApp()); runApp(const FipyApp());
} }

View File

@ -8,6 +8,7 @@ class Track {
String? image; String? image;
String? imageUrl; String? imageUrl;
String? id; String? id;
Duration? position;
Duration? duration; Duration? duration;
File? file; File? file;
@ -18,6 +19,7 @@ class Track {
this.album, this.album,
this.id, this.id,
this.duration, this.duration,
this.position,
this.file, this.file,
this.image, this.image,
this.imageUrl}); this.imageUrl});

View File

@ -6,23 +6,21 @@ import 'package:flutter/foundation.dart';
import 'package:universal_io/io.dart'; import 'package:universal_io/io.dart';
import 'package:fipy/models/track.dart'; import 'package:fipy/models/track.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kplayer/kplayer.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:youtube_explode_dart/youtube_explode_dart.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart';
import 'package:fipy/providers/player.dart'; import 'package:fipy/providers/player.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:audioplayers/audioplayers.dart'; import 'package:audioplayers/audioplayers.dart';
import 'package:kplayer_with_audioplayers/kplayer_with_audioplayers.dart' as kp;
class HomeProvider with ChangeNotifier { class HomeProvider with ChangeNotifier {
Track? currentTrack; Track? currentTrack;
PlayerController? player; AudioPlayer player = AudioPlayer(playerId: 'fipyPlayerID');
AudioPlayer audioPlayer = AudioPlayer();
List<Track> trackList = []; List<Track> trackList = [];
int trackNbr = 0; int trackNbr = 0;
int userPageNbr = 3; int userPageNbr = 3;
double currentVolume = 1;
Future<List<Track>> getTracks(String radio, {String cursor = ''}) async { Future<List<Track>> getTracks(String radio, {String cursor = ''}) async {
int pageNbr = 0; int pageNbr = 0;
@ -82,10 +80,6 @@ class HomeProvider with ChangeNotifier {
// track = trackList[track.number - 1]; // track = trackList[track.number - 1];
currentTrack = track; currentTrack = track;
final currentVolume = player?.volume ?? 1;
if (player?.playing ?? false) player?.stop();
Future.delayed(const Duration(milliseconds: 5));
if (track.id == null) { if (track.id == null) {
final secondMatch = track.artiste == '' ? track.album : track.artiste; final secondMatch = track.artiste == '' ? track.album : track.artiste;
final resultUrl = await yt.search final resultUrl = await yt.search
@ -99,45 +93,35 @@ class HomeProvider with ChangeNotifier {
'invidious.fdn.fr', 'invidious.fdn.fr',
]; ];
// audioPlayer.stop(); player.stop();
// Future.delayed(const Duration(milliseconds: 5)); Future.delayed(const Duration(milliseconds: 5));
// await audioPlayer.play(DeviceFileSource(
// "https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1"));
final media = PlayerMedia(
type: PlayerMediaType.network,
resource:
"https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1");
player = kp.Player(media: media);
// player = Player.network(
// "https://${invidiousUrl[0]}/latest_version?id=${track.id}&itag=140&local=true&listen=1"); // https://${invidiousUrl[0]}/embed/${track.id}?listen=1&raw=1&local=true
player!.init();
print(player!.media.resource);
player!.volume = currentVolume;
try { try {
player!.play(); final source = UrlSource(
"https://${invidiousUrl[1]}/latest_version?id=${track.id}&itag=140&local=true&listen=1");
print('playyy');
await player.play(source);
} catch (e) { } catch (e) {
print('Play error: ' + e.toString()); print('Play error: ' + e.toString());
} }
Future.delayed(const Duration(milliseconds: 500)); Future.delayed(const Duration(milliseconds: 50));
player!.callback = (PlayerEvent event) {
print(event.name); player.onDurationChanged.listen((event) async {
if (event.name == 'position') { currentTrack!.duration = await player.getDuration();
currentTrack!.duration = player!.duration; playerProvider.reload();
playerProvider.reload(); });
}
if (event.name == 'end' && player.onPositionChanged.listen((position) async {
currentTrack == track && currentTrack!.position = position;
(currentTrack!.duration!.inSeconds - player!.position.inSeconds <= playerProvider.reload();
1)) { });
var nextTrack = trackList
.firstWhere((element) => element.number == track.number + 1); player.onPlayerComplete.listen((event) {
currentTrack = nextTrack; var nextTrack =
playTrack(context, nextTrack); trackList.firstWhere((element) => element.number == track.number + 1);
} currentTrack = nextTrack;
}; playTrack(context, nextTrack);
});
playerProvider.reload(); playerProvider.reload();
homeProvider.reload(); homeProvider.reload();

View File

@ -34,8 +34,9 @@ class _HomeScreenState extends State<HomeScreen> {
if (event.runtimeType == RawKeyDownEvent && if (event.runtimeType == RawKeyDownEvent &&
event.data.logicalKey.keyId == 32) //Enter Key ID from keyboard event.data.logicalKey.keyId == 32) //Enter Key ID from keyboard
{ {
print('tata'); hp.player.state.name == 'playing'
hp.player?.playing ?? false ? hp.player?.pause() : hp.player?.play(); ? hp.player.pause()
: hp.player.resume();
} }
}, },
child: Stack( child: Stack(
@ -256,13 +257,14 @@ class _HomeScreenState extends State<HomeScreen> {
const SizedBox(width: 1), const SizedBox(width: 1),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
hp.player?.playing ?? false hp.player.state.name == 'playing'
? hp.player?.pause() ? hp.player.pause()
: hp.player?.play(); : hp.player.resume();
// playerProvider.reload(); // playerProvider.reload();
}, },
child: Icon( child: Icon(
hp.player?.playing ?? false hp.player.state.name == 'playing'
? Icons.pause ? Icons.pause
: Icons.play_arrow, : Icons.play_arrow,
color: Colors.grey[900], color: Colors.grey[900],
@ -297,7 +299,7 @@ class _HomeScreenState extends State<HomeScreen> {
Row(children: [ Row(children: [
const SizedBox(width: 70), const SizedBox(width: 70),
Text( Text(
timeFormat(hp.player?.position ?? timeFormat(hp.currentTrack?.position ??
const Duration(seconds: 0)), const Duration(seconds: 0)),
style: style:
TextStyle(color: Colors.grey[500], fontSize: 12), TextStyle(color: Colors.grey[500], fontSize: 12),
@ -314,16 +316,19 @@ class _HomeScreenState extends State<HomeScreen> {
child: SizedBox( child: SizedBox(
width: 300, width: 300,
child: Slider( child: Slider(
value: double.parse( value: double.parse(hp
hp.player?.position.inSeconds.toString() ?? .currentTrack?.position?.inSeconds
'0'), .toString() ??
max: double.parse( '0'),
hp.player?.duration.inSeconds.toString() ?? max: double.parse(hp
'2000'), .currentTrack?.duration?.inSeconds
.toString() ??
'2000'),
onChanged: (double value) { onChanged: (double value) {
if (hp.player?.position != null) { if (hp.currentTrack?.position != null) {
hp.player!.position = hp.player.seek(
Duration(seconds: value.toInt()); Duration(seconds: value.toInt()),
);
playerProvider.reload(); playerProvider.reload();
} }
}, },
@ -334,7 +339,7 @@ class _HomeScreenState extends State<HomeScreen> {
), ),
const SizedBox(width: 3), const SizedBox(width: 3),
Text( Text(
timeFormat(hp.player?.duration ?? timeFormat(hp.currentTrack?.duration ??
const Duration(seconds: 0)), const Duration(seconds: 0)),
style: style:
TextStyle(color: Colors.grey[500], fontSize: 12), TextStyle(color: Colors.grey[500], fontSize: 12),
@ -354,13 +359,12 @@ class _HomeScreenState extends State<HomeScreen> {
child: SizedBox( child: SizedBox(
width: 130, width: 130,
child: Slider( child: Slider(
value: hp.player?.volume ?? 1, value: hp.currentVolume,
max: 1, max: 1,
onChanged: (double value) { onChanged: (double value) async {
if (hp.player?.volume != null) { hp.currentVolume = value;
hp.player!.volume = value; await hp.player.setVolume(value);
playerProvider.reload(); playerProvider.reload();
}
}, },
activeColor: Colors.grey[400], activeColor: Colors.grey[400],
inactiveColor: Colors.grey[700], inactiveColor: Colors.grey[700],

View File

@ -22,22 +22,8 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.8.2" version: "2.8.2"
audio_session:
dependency: transitive
description:
name: audio_session
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.6+1"
audio_video_progress_bar:
dependency: transitive
description:
name: audio_video_progress_bar
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.0"
audioplayers: audioplayers:
dependency: transitive dependency: "direct main"
description: description:
name: audioplayers name: audioplayers
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
@ -134,20 +120,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "1.0.4"
dart_vlc:
dependency: transitive
description:
name: dart_vlc
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.9"
dart_vlc_ffi:
dependency: transitive
description:
name: dart_vlc_ffi
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.5+1"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
@ -247,62 +219,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.5.0" version: "4.5.0"
just_audio:
dependency: transitive
description:
name: just_audio
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.20"
just_audio_platform_interface:
dependency: transitive
description:
name: just_audio_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "4.1.0"
just_audio_web:
dependency: transitive
description:
name: just_audio_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.7"
kplayer:
dependency: "direct main"
description:
name: kplayer
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.18"
kplayer_platform_interface:
dependency: transitive
description:
name: kplayer_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.12"
kplayer_with_audioplayers:
dependency: "direct main"
description:
name: kplayer_with_audioplayers
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.10"
kplayer_with_dart_vlc:
dependency: transitive
description:
name: kplayer_with_dart_vlc
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.10"
kplayer_with_just_audio:
dependency: transitive
description:
name: kplayer_with_just_audio
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.10"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -438,13 +354,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.2" version: "6.0.2"
rxdart:
dependency: transitive
description:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.3"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -556,5 +465,5 @@ packages:
source: hosted source: hosted
version: "1.11.0" version: "1.11.0"
sdks: sdks:
dart: ">=2.17.0-266.5.beta <3.0.0" dart: ">=2.17.0-0 <3.0.0"
flutter: ">=2.8.1" flutter: ">=2.8.1"

View File

@ -16,8 +16,8 @@ dependencies:
# url: https://git.p2p.legal/poka/youtube_explode.git # url: https://git.p2p.legal/poka/youtube_explode.git
# ref: master # ref: master
http: ^0.13.4 http: ^0.13.4
kplayer: ^0.1.18 # kplayer: ^0.1.18
kplayer_with_audioplayers: ^0.0.10 # kplayer_with_audioplayers: ^0.0.10
miniplayer: #^1.0.1 miniplayer: #^1.0.1
git: git:
url: https://git.p2p.legal/poka/flutter_miniplayer.git url: https://git.p2p.legal/poka/flutter_miniplayer.git
@ -26,7 +26,7 @@ dependencies:
path_provider: ^2.0.9 path_provider: ^2.0.9
universal_io: ^2.0.4 universal_io: ^2.0.4
# ffmpeg_cli: ^0.1.0 # ffmpeg_cli: ^0.1.0
# audioplayers: ^1.0.0-rc.2 audioplayers: ^1.0.0-rc.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View File

@ -7,11 +7,8 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <audioplayers_windows/audioplayers_windows_plugin.h> #include <audioplayers_windows/audioplayers_windows_plugin.h>
#include <dart_vlc/dart_vlc_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
AudioplayersWindowsPluginRegisterWithRegistrar( AudioplayersWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
DartVlcPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("DartVlcPlugin"));
} }

View File

@ -4,7 +4,6 @@
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
audioplayers_windows audioplayers_windows
dart_vlc
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST