gpt4 book ai didi

flutter - 关闭应用程序时保持 VideoPlayerController 播放音频

转载 作者:行者123 更新时间:2023-12-03 02:41:02 42 4
gpt4 key购买 nike

我正在尝试开发一个向用户展示视频的应用程序。我正在使用 VideoPlayerController用于加载视频,以及 ChewieController对于用户界面。
效果很好,但是当用户关闭应用程序时,视频就会停止。我希望视频即使在关闭应用程序/锁定设备时也能继续播放音频。
我在 VideoPlayerController 上找不到任何相关信息并在 ChewieController文件。
这个功能在 Flutter 和 Dart 中可以实现吗?
谢谢!

最佳答案

不幸的是 Flutter 的 video_player包不支持背景视频或音频播放。但是你可以使用 flutter_playout包装 ExoPlayer在 Android 和 AVPlayer 上iOS 上的框架,能够在后台播放视频甚至锁定屏幕。您可以了解更多信息 here .下面是库的 GitHub 存储库提供的示例代码,它播放视频并在后台继续播放

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_playout/multiaudio/HLSManifestLanguage.dart';
import 'package:flutter_playout/multiaudio/MultiAudioSupport.dart';
import 'package:flutter_playout/player_observer.dart';
import 'package:flutter_playout/player_state.dart';
import 'package:flutter_playout/video.dart';
import 'package:flutter_playout_example/hls/getManifestLanguages.dart';

class VideoPlayout extends StatefulWidget {
final PlayerState desiredState;
final bool showPlayerControls;

const VideoPlayout({Key key, this.desiredState, this.showPlayerControls})
: super(key: key);

@override
_VideoPlayoutState createState() => _VideoPlayoutState();
}

class _VideoPlayoutState extends State<VideoPlayout>
with PlayerObserver, MultiAudioSupport {
final String _url = null;
List<HLSManifestLanguage> _hlsLanguages = List<HLSManifestLanguage>();

@override
void initState() {
super.initState();
Future.delayed(Duration.zero, _getHLSManifestLanguages);
}

Future<void> _getHLSManifestLanguages() async {
if (!Platform.isIOS && _url != null && _url.isNotEmpty) {
_hlsLanguages = await getManifestLanguages(_url);
setState(() {});
}
}

@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: <Widget>[
/* player */
AspectRatio(
aspectRatio: 16 / 9,
child: Video(
autoPlay: true,
showControls: widget.showPlayerControls,
title: "MTA International",
subtitle: "Reaching The Corners Of The Earth",
preferredAudioLanguage: "eng",
isLiveStream: true,
position: 0,
url: _url,
onViewCreated: _onViewCreated,
desiredState: widget.desiredState,
),
),
/* multi language menu */
_hlsLanguages.length < 2 && !Platform.isIOS
? Container()
: Container(
child: Row(
children: _hlsLanguages
.map((e) => MaterialButton(
child: Text(
e.name,
style: Theme.of(context)
.textTheme
.button
.copyWith(color: Colors.white),
),
onPressed: () {
setPreferredAudioLanguage(e.code);
},
))
.toList(),
),
),
],
),
);
}

void _onViewCreated(int viewId) {
listenForVideoPlayerEvents(viewId);
enableMultiAudioSupport(viewId);
}

@override
void onPlay() {
// TODO: implement onPlay
super.onPlay();
}

@override
void onPause() {
// TODO: implement onPause
super.onPause();
}

@override
void onComplete() {
// TODO: implement onComplete
super.onComplete();
}

@override
void onTime(int position) {
// TODO: implement onTime
super.onTime(position);
}

@override
void onSeek(int position, double offset) {
// TODO: implement onSeek
super.onSeek(position, offset);
}

@override
void onDuration(int duration) {
// TODO: implement onDuration
super.onDuration(duration);
}

@override
void onError(String error) {
// TODO: implement onError
super.onError(error);
}
}

关于flutter - 关闭应用程序时保持 VideoPlayerController 播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63303539/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com