Use audioplayer instead of kplayer. Very long UI freeze to play song...
This commit is contained in:
parent
05f1d702e3
commit
ebb8806c2b
|
@ -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/';
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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});
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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],
|
||||
|
|
95
pubspec.lock
95
pubspec.lock
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
list(APPEND FLUTTER_PLUGIN_LIST
|
||||
audioplayers_windows
|
||||
dart_vlc
|
||||
)
|
||||
|
||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||
|
|
Loading…
Reference in New Issue