F.S*_*SO7 7 dart flutter flutter-dependencies
我正在尝试开发一个向用户展示视频的应用程序。我VideoPlayerController用于加载视频和ChewieControllerUI。
效果很好,但是当用户关闭应用程序时,视频就会停止。我希望视频即使在关闭应用程序/锁定设备时也能继续播放音频。
我在VideoPlayerController和ChewieController文档中找不到任何关于它的信息。
这个功能在 Flutter 和 Dart 中可以实现吗?
谢谢!
不幸的是 Flutter 的video_player包不支持背景视频或音频播放。但是您可以在 Android上使用flutter_playoutwhich wrapsExoPlayer在AVPlayeriOS 上使用具有在后台播放视频甚至锁定屏幕的能力的框架。您可以在此处了解更多信息。下面是库的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |