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;
_logger.finest(
"deezerStart: $deezerStart (actual start: $start), end: $end, dropBytes: $dropBytes");
final stream = DeezerAudio.decryptionStream(res.stream,
start: start, trackId: trackId);
final stream = _deezerAudio.stream(res.stream, start: start);
final cl = res.contentLength! - dropBytes;

View File

@ -325,15 +325,17 @@ class DeezerAPI {
}),
headers: headers,
);
print('getTracksUrl($trackTokens, $format)');
print(response.body);
final data = (jsonDecode(response.body) as Map)['data'] as List;
return data.map((data) {
if (data['errors'] != null) {
if (data['errors'][0]['code'] == 2002) {
return GetTrackUrlResponse(error: 'Wrong geolocation');
return GetTrackUrlResponse(
error: {'code': 2002, 'message': 'Wrong geolocation'});
}
return GetTrackUrlResponse(
error: (data['errors'][0] as Map).toString());
return GetTrackUrlResponse(error: data['errors'][0] as Map);
}
if (data['media'] == null) return GetTrackUrlResponse();

View File

@ -33,6 +33,7 @@ class DeezerAudio {
trackId: trackId,
mediaVersion: mediaVersion);
quality = res.quality;
print('PREVIOUS TRACKID: $trackId, NEW TRACKID: ${res.trackId}');
trackId = res.trackId;
return (
uri: res.uri,
@ -205,6 +206,9 @@ class DeezerAudio {
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) {
final secret = utf8.encode('g4el58wc0zvf9na1');
final idmd5 =
@ -235,6 +239,7 @@ class DeezerAudio {
final deezerStart = start - dropBytes;
int counter = deezerStart ~/ chunkSize;
final buffer = List<int>.empty(growable: true);
print('GETTING KEY FOR $trackId');
final key = getKey(trackId);
await for (var bytes in source) {
@ -309,12 +314,14 @@ class DeezerAudio {
trackToken, quality.toDeezerQualityString());
if (res.error != null) {
try {
final json = jsonDecode(res.error!);
final json = res.error!;
if (json['code'] == 2001) {
// token expired.
return getTrackUrl(deezerAPI, trackId, trackToken, 0,
quality: quality);
}
throw Exception(res.error!);
} catch (e) {}
_logger.warning('Error while getting track url: ${res.error!}');
return null;

View File

@ -1626,6 +1626,6 @@ class TrackUrlSource {
class GetTrackUrlResponse {
final List<TrackUrlSource>? sources;
final String? error;
final Map? error;
GetTrackUrlResponse({this.sources, this.error});
}

View File

@ -140,7 +140,7 @@ class AudioPlayerTask extends BaseAudioHandler {
Future<void> _start(AudioPlayerTaskInitArguments initArgs) async {
// Linux and Windows support
JustAudioMediaKit.ensureInitialized();
JustAudioMediaKit.ensureInitialized(iOS: true);
JustAudioMediaKit.title = 'Freezer';
JustAudioMediaKit.protocolWhitelist = const ['http'];
//JustAudioMediaKit.bufferSize = 128;

View File

@ -879,6 +879,14 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: "direct main"
description:

View File

@ -88,6 +88,7 @@ dependencies:
# Player libs for Linux and windows
media_kit_libs_linux: any
media_kit_libs_windows_audio: any
media_kit_libs_ios_audio: any
# Audio service plugin for Linux (MPRIS)
audio_service_mpris: ^0.1.3