Cómo conseguir los metadatos en el Audio Stream para la aplicación de arranque
Estoy construyendo una aplicación que utiliza activos de plugin de arranque_audio_player, Y actualmente, estoy recibiendo la corriente de audio pero no puedo conseguir los metadatos de la corriente (TimedMetaData). ¿Hay alguna manera de que pueda obtener los metadatos de la corriente usando cualquier plugin? todos los plugins que he buscado proporciona metadatos de archivos locales, pero ninguno de ellos puede obtener metadatos de la URL. ¿Hay alguna manera de lograr esto?
Pregunta hecha hace 3 años, 4 meses, 29 días - Por javagiant
3 Respuestas:
-
Puedes usar el flutter_ffmpeg paquete para obtener los metadatos de un archivo por su URI (o ruta local):
import 'package:flutter_ffmpeg/flutter_ffmpeg.dart'; final FlutterFFprobe _probe = new FlutterFFprobe(); _probe.getMediaInformation(fileURI).then((i) => print(i));
Respondida el Dec 17, 2020 a las 14:26 - por codecraftsman32c9
Votos positivos: 0 | Votos negativos: 0 -
Para obtener los metadatos de la corriente de audio en tiempo real, puedes utilizar un paquete Flutter llamado
audio_service
. Este paquete te permite controlar la reproducción de audio en segundo plano y obtener los metadatos en tiempo real a través de streams.Aquí te dejo un ejemplo de cómo puedes usar
audio_service
para obtener metadatos de la corriente de audio en tu aplicación de arranque:- Asegúrate de agregar `audio_service` a tu archivo `pubspec.yaml`:
yaml dependencies: audio_service: ^0.18.0
- En tu archivo `main.dart`, configura `audio_service` y suscribirte a los metadatos en tiempo real:
dart import 'package:flutter/material.dart'; import 'package:audio_service/audio_service.dart'; void main() { AudioService.start( backgroundTaskEntrypoint: audioPlayerTaskEntryPoint, ); } void audioPlayerTaskEntryPoint() async { AudioServiceBackground.run(() => AudioPlayerTask()); } class AudioPlayerTask extends BackgroundAudioTask { @override Future
onStart(Map ? params) async { await AudioService.updateQueue([...]); // Configura la cola de reproducción aquí AudioService.playbackStateStream.listen((state) { // Escucha el estado de la reproducción y actualiza la interfaz de usuario }); AudioService.currentMediaItemStream.listen((mediaItem) { // Escucha los metadatos del elemento multimedia actual y actualiza la interfaz de usuario if (mediaItem != null) { // Aquí puedes acceder a los metadatos: mediaItem.title, mediaItem.artist, mediaItem.album, etc. } }); } } Al utilizar
audio_service
, podrás controlar la reproducción de audio en segundo plano y recibir los metadatos de la corriente de audio en tiempo real. Asegúrate de configurar adecuadamente la cola de reproducción y de hacer las suscripciones necesarias para obtener y mostrar los metadatos en tu aplicación.Espero que esta solución te ayude a obtener los metadatos de la corriente de audio en tu aplicación de arranque. ¡Déjame saber si tienes alguna otra pregunta!
Respondida el Dec 18, 2020 a las 14:24 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Obtener metadatos de transmisiones de audio en aplicaciones Flutter
Para obtener metadatos de transmisiones de audio en aplicaciones Flutter, puedes utilizar el plugin
audio_service
. Aquí tienes cómo hacerlo:1. Agrega el plugin
audio_service
a tu proyecto:dependencies: audio_service: ^0.16.0
2. Importa el plugin:
import 'package:audio_service/audio_service.dart';
3. Crea un
AudioPlayerHandler
:class AudioPlayerHandler extends BaseAudioHandler { @override Future
play() async { // Código para reproducir el audio } @override Future pause() async { // Código para pausar el audio } @override Future stop() async { // Código para detener el audio } @override Future addQueueItem(MediaItem mediaItem) async { // Código para agregar un elemento a la cola } @override Future removeQueueItem(MediaItem mediaItem) async { // Código para eliminar un elemento de la cola } @override Future skipToNextQueueItem() async { // Código para saltar al siguiente elemento de la cola } @override Future skipToPreviousQueueItem() async { // Código para saltar al elemento anterior de la cola } @override Future seek(Duration position) async { // Código para buscar en el audio } @override Future setRepeatMode(AudioServiceRepeatMode repeatMode) async { // Código para establecer el modo de repetición } @override Future setShuffleMode(AudioServiceShuffleMode shuffleMode) async { // Código para establecer el modo de aleatorización } @override Future setRating(Rating rating) async { // Código para establecer la calificación } @override Future setBookmark(Bookmark bookmark) async { // Código para establecer el marcador } @override Future seekTo(Duration position) async { // Código para buscar en el audio } @override Future setSpeed(double speed) async { // Código para establecer la velocidad } @override Future onTaskRemoved() async { // Código para manejar la eliminación de tareas } @override Future onNotificationDeleted(String notificationId) async { // Código para manejar notificaciones eliminadas } @override Future onNotificationClicked(String notificationId) async { // Código para manejar notificaciones pulsadas } @override Future onPlayerStateChanged(AudioPlayerState state) async { // Código para manejar cambios de estado del reproductor } @override Future onPlayerEvent(PlayerEvent event) async { // Código para manejar eventos del reproductor } @override Future onAudioSessionId(int audioSessionId) async { // Código para manejar el ID de sesión de audio } @override Future onBufferingStarted() async { // Código para manejar el inicio del almacenamiento en búfer } @override Future onBufferingCompleted() async { // Código para manejar el almacenamiento en búfer completado } @override Future onSeekCompleted() async { // Código para manejar la búsqueda completada } @override Future onMediaItemChanged() async { // Código para manejar cambios de elementos multimedia } @override Future onQueueChanged() async { // Código para manejar cambios en la cola } @override Future onRepeatModeChanged(AudioServiceRepeatMode repeatMode) async { // Código para manejar cambios en el modo de repetición } @override Future onShuffleModeChanged(AudioServiceShuffleMode shuffleMode) async { // Código para manejar cambios en el modo de aleatorización } @override Future onNotificationAttributeChanged(List attributes) async { // Código para manejar cambios en los atributos de notificación } } 4. Registra el handler con el servicio de audio:
AudioService.init( builder: () => AudioPlayerHandler(), config: AudioServiceConfig( androidNotificationChannelName: 'Audio Service', androidNotificationChannelDescription: 'Audio playback service', ), );
5. Envía un mensaje al handler para obtener los metadatos:
AudioService.sendCustomEvent('getMetadata');
6. Implementa el método
onCustomEvent
en el handler para manejar el mensaje:@override Future
onCustomEvent(String event) async { switch (event) { case 'getMetadata': // Obtiene los metadatos de la transmisión actual final mediaItem = await audioPlayer.currentMediaItem; // Envía los metadatos al cliente AudioService.sendCustomEvent('metadata', mediaItem.metadata); break; } } 7. Escucha el evento
metadata
en el cliente:AudioService.customEventStream.listen((event) { if (event.event == 'metadata') { // Procesa los metadatos } });
Nota: El plugin
audio_service
solo admite metadatos básicos como título, artista y álbum. Si necesitas metadatos más avanzados, puedes utilizar un plugin específico para transmitir metadatos, comoaudio_metadata_fetcher
.Respondida el Dec 18, 2020 a las 14:37 - por Gemini
Votos positivos: 0 | Votos negativos: 0