Виджет Flutter media_kit Video показывает пустой экран при использовании audio_service (уведомление работает)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Виджет Flutter media_kit Video показывает пустой экран при использовании audio_service (уведомление работает)

Сообщение Anonymous »

Я пытаюсь реализовать фоновое воспроизведение видео во Flutter, используя audio_service и media_kit. Я настроил AndroidManifest.xml с необходимыми разрешениями (FOREGROUND_SERVICE, WAKE_LOCK и т. д.) и записи службы/получателя.
Однако у меня возникли проблемы с реализацией. Ниже приведен мой файл main.dart.
main.dart
import 'package:flutter/material.dart';
import 'package:audio_service/audio_service.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';

late VideoMediaHandler handler;

Future main() async {
WidgetsFlutterBinding.ensureInitialized();
MediaKit.ensureInitialized();

handler = await AudioService.init(
builder: () => VideoMediaHandler(),
config: const AudioServiceConfig(
androidNotificationChannelId: 'com.example.notification',
androidNotificationChannelName: 'Video Playback',
androidNotificationOngoing: true,
),
);

runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: VideoPlayerPage(),
),
);
}
}

class VideoPlayerPage extends StatefulWidget {
const VideoPlayerPage({super.key});

@override
State createState() => _VideoPlayerPageState();
}

class _VideoPlayerPageState extends State {
late final Player player = Player();
late final VideoController controller = VideoController(player);

@override
void initState() {
super.initState();

const videoUrl =
'[https://flutter.github.io/assets-for-ap ... os/bee.mp4](https://flutter.github.io/assets-for-ap ... os/bee.mp4)';

handler.setPlayer(player);

player.open(Media(videoUrl));

handler.playMedia(
videoUrl,
'Bee Video',
'Flutter Demo',
'[Изображение](Изображение)',
);
}

@override
void dispose() {
player.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
return Center(
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.width * 9 / 16,
child: Video(
controller: controller,
),
),
);
}
}

class VideoMediaHandler extends BaseAudioHandler {
Player? _player;

void setPlayer(Player player) {
_player = player;

_player!.stream.playing.listen((_) => _updateState());
_player!.stream.position.listen((_) => _updateState());
_player!.stream.buffer.listen((_) => _updateState());

_player!.stream.duration.listen((duration) {
final item = mediaItem.value;
if (item != null) {
mediaItem.add(item.copyWith(duration: duration));
}
});
}

void _updateState() {
if (_player == null) return;

final playing = _player!.state.playing;

playbackState.add(
PlaybackState(
controls: [
MediaControl.skipToPrevious,
playing ? MediaControl.pause : MediaControl.play,
MediaControl.skipToNext,
],
playing: playing,
processingState: AudioProcessingState.ready,
updatePosition: _player!.state.position,
bufferedPosition: _player!.state.buffer,
speed: 1.0,
systemActions: const {
MediaAction.seek,
MediaAction.seekForward,
MediaAction.seekBackward,
MediaAction.stop,
},
),
);
}

Future playMedia(
String url,
String title,
String artist,
String artUri,
) async {
mediaItem.add(
MediaItem(
id: url,
title: title,
album: artist,
artUri: Uri.parse(artUri),
),
);
}

@override
Future play() async {
await _player?.play();
}

@override
Future pause() async {
await _player?.pause();
}

@override
Future seek(Duration position) async {
await _player?.seek(position);
}

@override
Future stop() async {
await _player?.pause();
}
}

**AndroidManifest.xml**










































Подробнее здесь: https://stackoverflow.com/questions/798 ... rvice-noti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»