fix old url generation + try mpv on ios

This commit is contained in:
Pato05 2024-04-01 00:07:56 +02:00
parent b5df20735e
commit f2f862a406
No known key found for this signature in database
GPG key ID: ED4C6F9C3D574FB6
7 changed files with 25 additions and 8 deletions

View file

@ -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;

View file

@ -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();

View file

@ -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;

View file

@ -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});
} }

View file

@ -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;

View file

@ -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:

View file

@ -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