loading streaming url at runtime dynamically

This commit is contained in:
2024-09-23 16:46:29 -04:00
parent 36e13ecb50
commit bc30c9586e
5 changed files with 25 additions and 4 deletions

View File

@@ -1,11 +1,28 @@
import 'package:audio_service/audio_service.dart'; import 'package:audio_service/audio_service.dart';
import 'package:audio_session/audio_session.dart'; import 'package:audio_session/audio_session.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:http/http.dart' as http;
import 'ListenHandler.dart'; import 'ListenHandler.dart';
late final ListenHandler _listenHandler; late final ListenHandler _listenHandler;
late final AudioSession _session; late final AudioSession _session;
final String _fallback =
"https://generic.ything.app/music/separation-185196.mp3";
final _urlSource = Uri.parse("https://generic.ything.app/music/player.url");
late final String _radioUrl;
Future<void> loadCurrentUrl() async {
final resp = await http.get(_urlSource);
if (resp.statusCode == 200) {
_radioUrl = resp.body.trim();
} else {
_radioUrl = _fallback;
print('Request for current streaming url failed');
}
}
Future<void> setupListenHandler() async { Future<void> setupListenHandler() async {
_listenHandler = await AudioService.init( _listenHandler = await AudioService.init(
builder: () => ListenHandler(), builder: () => ListenHandler(),
@@ -51,6 +68,10 @@ Future<void> setupListenHandler() async {
ListenHandler getListenHandlder() => _listenHandler; ListenHandler getListenHandlder() => _listenHandler;
UrlSource getUrlSource() {
return UrlSource(_radioUrl, mimeType: "audio/mpeg");
}
Future<bool> startAudioSession() async { Future<bool> startAudioSession() async {
return await _session.setActive(true); return await _session.setActive(true);
} }

View File

@@ -5,9 +5,7 @@ import 'package:ything_radio/Globals.dart';
class ListenHandler extends BaseAudioHandler { class ListenHandler extends BaseAudioHandler {
final _player = AudioPlayer(); final _player = AudioPlayer();
final UrlSource _radioSource = UrlSource( final UrlSource _radioSource = getUrlSource();
"https://generic.ything.app/music/separation-185196.mp3",
mimeType: "audio/mpeg");
setup_player() { setup_player() {
_player.setReleaseMode(ReleaseMode.release); _player.setReleaseMode(ReleaseMode.release);

View File

@@ -4,6 +4,7 @@ import 'Globals.dart';
import 'YthingRadio.dart'; import 'YthingRadio.dart';
Future<void> main() async { Future<void> main() async {
await loadCurrentUrl();
await setupListenHandler(); await setupListenHandler();
runApp(const YthingRadio()); runApp(const YthingRadio());
} }

View File

@@ -273,7 +273,7 @@ packages:
source: hosted source: hosted
version: "7.7.0" version: "7.7.0"
http: http:
dependency: transitive dependency: "direct main"
description: description:
name: http name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010

View File

@@ -40,6 +40,7 @@ dependencies:
flutter_tabler_icons: ^1.38.0 flutter_tabler_icons: ^1.38.0
audio_service: ^0.18.15 audio_service: ^0.18.15
audio_session: ^0.1.21 audio_session: ^0.1.21
http: ^1.2.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: