fix old url generation + try mpv on ios
This commit is contained in:
parent
b5df20735e
commit
f2f862a406
|
|
@ -157,8 +157,7 @@ class DeezerAudioSource extends StreamAudioSource {
|
||||||
int dropBytes = start % DeezerAudio.chunkSize;
|
int dropBytes = start % DeezerAudio.chunkSize;
|
||||||
_logger.finest(
|
_logger.finest(
|
||||||
"deezerStart: $deezerStart (actual start: $start), end: $end, dropBytes: $dropBytes");
|
"deezerStart: $deezerStart (actual start: $start), end: $end, dropBytes: $dropBytes");
|
||||||
final stream = DeezerAudio.decryptionStream(res.stream,
|
final stream = _deezerAudio.stream(res.stream, start: start);
|
||||||
start: start, trackId: trackId);
|
|
||||||
|
|
||||||
final cl = res.contentLength! - dropBytes;
|
final cl = res.contentLength! - dropBytes;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -325,15 +325,17 @@ class DeezerAPI {
|
||||||
}),
|
}),
|
||||||
headers: headers,
|
headers: headers,
|
||||||
);
|
);
|
||||||
|
print('getTracksUrl($trackTokens, $format)');
|
||||||
|
print(response.body);
|
||||||
final data = (jsonDecode(response.body) as Map)['data'] as List;
|
final data = (jsonDecode(response.body) as Map)['data'] as List;
|
||||||
return data.map((data) {
|
return data.map((data) {
|
||||||
if (data['errors'] != null) {
|
if (data['errors'] != null) {
|
||||||
if (data['errors'][0]['code'] == 2002) {
|
if (data['errors'][0]['code'] == 2002) {
|
||||||
return GetTrackUrlResponse(error: 'Wrong geolocation');
|
return GetTrackUrlResponse(
|
||||||
|
error: {'code': 2002, 'message': 'Wrong geolocation'});
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetTrackUrlResponse(
|
return GetTrackUrlResponse(error: data['errors'][0] as Map);
|
||||||
error: (data['errors'][0] as Map).toString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data['media'] == null) return GetTrackUrlResponse();
|
if (data['media'] == null) return GetTrackUrlResponse();
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ class DeezerAudio {
|
||||||
trackId: trackId,
|
trackId: trackId,
|
||||||
mediaVersion: mediaVersion);
|
mediaVersion: mediaVersion);
|
||||||
quality = res.quality;
|
quality = res.quality;
|
||||||
|
print('PREVIOUS TRACKID: $trackId, NEW TRACKID: ${res.trackId}');
|
||||||
trackId = res.trackId;
|
trackId = res.trackId;
|
||||||
return (
|
return (
|
||||||
uri: res.uri,
|
uri: res.uri,
|
||||||
|
|
@ -205,6 +206,9 @@ class DeezerAudio {
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Stream<List<int>> stream(Stream<List<int>> source, {required int start}) =>
|
||||||
|
decryptionStream(source, start: start, trackId: trackId);
|
||||||
|
|
||||||
static List<int> getKey(String id) {
|
static List<int> getKey(String id) {
|
||||||
final secret = utf8.encode('g4el58wc0zvf9na1');
|
final secret = utf8.encode('g4el58wc0zvf9na1');
|
||||||
final idmd5 =
|
final idmd5 =
|
||||||
|
|
@ -235,6 +239,7 @@ class DeezerAudio {
|
||||||
final deezerStart = start - dropBytes;
|
final deezerStart = start - dropBytes;
|
||||||
int counter = deezerStart ~/ chunkSize;
|
int counter = deezerStart ~/ chunkSize;
|
||||||
final buffer = List<int>.empty(growable: true);
|
final buffer = List<int>.empty(growable: true);
|
||||||
|
print('GETTING KEY FOR $trackId');
|
||||||
final key = getKey(trackId);
|
final key = getKey(trackId);
|
||||||
|
|
||||||
await for (var bytes in source) {
|
await for (var bytes in source) {
|
||||||
|
|
@ -309,12 +314,14 @@ class DeezerAudio {
|
||||||
trackToken, quality.toDeezerQualityString());
|
trackToken, quality.toDeezerQualityString());
|
||||||
if (res.error != null) {
|
if (res.error != null) {
|
||||||
try {
|
try {
|
||||||
final json = jsonDecode(res.error!);
|
final json = res.error!;
|
||||||
if (json['code'] == 2001) {
|
if (json['code'] == 2001) {
|
||||||
// token expired.
|
// token expired.
|
||||||
return getTrackUrl(deezerAPI, trackId, trackToken, 0,
|
return getTrackUrl(deezerAPI, trackId, trackToken, 0,
|
||||||
quality: quality);
|
quality: quality);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw Exception(res.error!);
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
_logger.warning('Error while getting track url: ${res.error!}');
|
_logger.warning('Error while getting track url: ${res.error!}');
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -1626,6 +1626,6 @@ class TrackUrlSource {
|
||||||
|
|
||||||
class GetTrackUrlResponse {
|
class GetTrackUrlResponse {
|
||||||
final List<TrackUrlSource>? sources;
|
final List<TrackUrlSource>? sources;
|
||||||
final String? error;
|
final Map? error;
|
||||||
GetTrackUrlResponse({this.sources, this.error});
|
GetTrackUrlResponse({this.sources, this.error});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ class AudioPlayerTask extends BaseAudioHandler {
|
||||||
|
|
||||||
Future<void> _start(AudioPlayerTaskInitArguments initArgs) async {
|
Future<void> _start(AudioPlayerTaskInitArguments initArgs) async {
|
||||||
// Linux and Windows support
|
// Linux and Windows support
|
||||||
JustAudioMediaKit.ensureInitialized();
|
JustAudioMediaKit.ensureInitialized(iOS: true);
|
||||||
JustAudioMediaKit.title = 'Freezer';
|
JustAudioMediaKit.title = 'Freezer';
|
||||||
JustAudioMediaKit.protocolWhitelist = const ['http'];
|
JustAudioMediaKit.protocolWhitelist = const ['http'];
|
||||||
//JustAudioMediaKit.bufferSize = 128;
|
//JustAudioMediaKit.bufferSize = 128;
|
||||||
|
|
|
||||||
|
|
@ -879,6 +879,14 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.10+1"
|
version: "1.1.10+1"
|
||||||
|
media_kit_libs_ios_audio:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: media_kit_libs_ios_audio
|
||||||
|
sha256: "78ccf04e27d6b4ba00a355578ccb39b772f00d48269a6ac3db076edf2d51934f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.4"
|
||||||
media_kit_libs_linux:
|
media_kit_libs_linux:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ dependencies:
|
||||||
# Player libs for Linux and windows
|
# Player libs for Linux and windows
|
||||||
media_kit_libs_linux: any
|
media_kit_libs_linux: any
|
||||||
media_kit_libs_windows_audio: any
|
media_kit_libs_windows_audio: any
|
||||||
|
media_kit_libs_ios_audio: any
|
||||||
|
|
||||||
# Audio service plugin for Linux (MPRIS)
|
# Audio service plugin for Linux (MPRIS)
|
||||||
audio_service_mpris: ^0.1.3
|
audio_service_mpris: ^0.1.3
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue