Remove bad quality streaming

This commit is contained in:
poka 2022-05-02 12:01:31 +02:00
parent 7592660c0b
commit 149a5c922f
1 changed files with 29 additions and 36 deletions

View File

@ -1,9 +1,7 @@
// ignore_for_file: avoid_print // ignore_for_file: avoid_print
import 'dart:convert'; import 'dart:convert';
import 'package:fip_parser_ui/globals.dart'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:universal_io/io.dart';
import 'package:fip_parser_ui/models/track.dart'; import 'package:fip_parser_ui/models/track.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kplayer/kplayer.dart'; import 'package:kplayer/kplayer.dart';
@ -27,12 +25,11 @@ class HomeProvider with ChangeNotifier {
bool stop = false; bool stop = false;
while (pageNbr < userPageNbr && !stop) { while (pageNbr < userPageNbr && !stop) {
final req = Uri.parse( final req = Uri.parse(
'${proxyHeader}www.radiofrance.fr:443/api/v1.7/stations/fip/webradios/$radio/songs?pageCursor=$cursor'); 'https://www.radiofrance.fr/api/v1.7/stations/fip/webradios/$radio/songs?pageCursor=$cursor');
final res = await get(req, headers: { final res = await get(req, headers: {
"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, HEAD, POST, OPTIONS", "Access-Control-Allow-Methods": "GET, HEAD, POST, OPTIONS"
'Content-Type': 'text/plain'
}); });
if (res.statusCode == 200) { if (res.statusCode == 200) {
Map body = jsonDecode(res.body); Map body = jsonDecode(res.body);
@ -79,22 +76,22 @@ class HomeProvider with ChangeNotifier {
currentTrack = track; currentTrack = track;
final currentVolume = player?.volume ?? 1; final currentVolume = player?.volume ?? 1;
if (player?.playing ?? false) player?.stop(); player?.dispose();
Future.delayed(const Duration(milliseconds: 5)); Future.delayed(const Duration(milliseconds: 5));
if (track.id == null) { if (track.file == null) {
final secondMatch = track.artiste == '' ? track.album : track.artiste; if (track.id == null) {
final resultUrl = final secondMatch = track.artiste == '' ? track.album : track.artiste;
await yt.search.search(track.title + ' ' + secondMatch!); final resultUrl =
track.id = resultUrl.first.id.value; await yt.search.search(track.title + ' ' + secondMatch!);
track.id = resultUrl.first.id.value;
}
player = Player.network(
"https://invidious.fdn.fr/embed/${track.id}?raw=1&listen=1");
print(track.id);
} else {
player = Player.asset(track.file!.path);
} }
const invidiousUrl =
'yewtu.be'; //yewtu.be vid.puffyan.us invidious.snopyta.org invidious.fdn.fr
player = Player.network(
"https://$invidiousUrl/embed/${track.id}?raw=1&listen=1&quality=dash");
print(track.id);
player!.volume = currentVolume; player!.volume = currentVolume;
try { try {
@ -104,12 +101,11 @@ class HomeProvider with ChangeNotifier {
} }
Future.delayed(const Duration(milliseconds: 500)); Future.delayed(const Duration(milliseconds: 500));
player!.callback = (PlayerEvent event) { player!.callback = (PlayerEvent event) {
print(event.name);
if (event.name == 'position') { if (event.name == 'position') {
currentTrack!.duration = player!.duration; currentTrack!.duration = player!.duration;
playerProvider.reload(); playerProvider.reload();
} }
if (event.name == 'status' && player!.position == player!.duration) { if (event.name == 'status') {
var nextTrack = trackList var nextTrack = trackList
.firstWhere((element) => element.number == track.number + 1); .firstWhere((element) => element.number == track.number + 1);
playTrack(context, nextTrack); playTrack(context, nextTrack);
@ -127,6 +123,8 @@ class HomeProvider with ChangeNotifier {
var streamManifest = StreamManifest(manifest.streams); var streamManifest = StreamManifest(manifest.streams);
var streamInfo = streamManifest.audioOnly.withHighestBitrate(); var streamInfo = streamManifest.audioOnly.withHighestBitrate();
var stream = yt.videos.streamsClient.get(streamInfo); var stream = yt.videos.streamsClient.get(streamInfo);
final filePath = await getDownloadsDirectory();
final fileName = '${track.title} - ${track.artiste}' final fileName = '${track.title} - ${track.artiste}'
.replaceAll('\\', '') .replaceAll('\\', '')
.replaceAll('/', '') .replaceAll('/', '')
@ -137,25 +135,20 @@ class HomeProvider with ChangeNotifier {
.replaceAll('<', '') .replaceAll('<', '')
.replaceAll('>', '') .replaceAll('>', '')
.replaceAll('|', ''); .replaceAll('|', '');
var file = File('${filePath!.path}/$fileName.webm');
var fileStream = file.openWrite();
if (!kIsWeb) { await stream.pipe(fileStream);
final filePath = Platform.isAndroid
? Directory('/storage/emulated/0/Download')
: await getDownloadsDirectory();
var file = File('${filePath!.path}/$fileName.webm'); await fileStream.flush();
var fileStream = file.openWrite(); await fileStream.close();
yt.close();
await stream.pipe(fileStream); // Play it
track.file = file;
// playTrack(context, track);
await fileStream.flush(); print(file.path);
await fileStream.close();
yt.close();
track.file = file;
print(file.path);
}
} }
List<DropdownMenuItem<String>> get radioList { List<DropdownMenuItem<String>> get radioList {