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/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/';
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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});
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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],
|
||||||
|
|
95
pubspec.lock
95
pubspec.lock
|
@ -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"
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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"));
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue