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/material.dart';
late String token;
TextStyle globalTextStyle = TextStyle(color: Colors.grey[350]);
const proxyHeader =
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:flutter/material.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 {
WidgetsFlutterBinding.ensureInitialized();
Player.boot();
kp.Player.boot();
runApp(const FipyApp());
}

View File

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

View File

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

View File

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

View File

@ -22,22 +22,8 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
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:
dependency: transitive
dependency: "direct main"
description:
name: audioplayers
url: "https://pub.dartlang.org"
@ -134,20 +120,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
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:
dependency: transitive
description:
@ -247,62 +219,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
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:
dependency: transitive
description:
@ -438,13 +354,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.2"
rxdart:
dependency: transitive
description:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.3"
sky_engine:
dependency: transitive
description: flutter
@ -556,5 +465,5 @@ packages:
source: hosted
version: "1.11.0"
sdks:
dart: ">=2.17.0-266.5.beta <3.0.0"
dart: ">=2.17.0-0 <3.0.0"
flutter: ">=2.8.1"

View File

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

View File

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

View File

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