flutter_ijkplayer
flutter_ijkplayer copied to clipboard
[Bug]自定义controllerWidgetBuilder后第一次播放某些视频不正确
描述一下你遇到的 bug
描述一下你的 bug
自定义controllerWidgetBuilder: (ctl) => Container(),这个后,隐藏了播放器的UI界面,并设置autoplay为true,但是这样会导致某些视频先横屏播放,第二次播放又变成竖屏了
重现 bug
通过什么样的步骤可以重现:
// import 'package:flt_video_player/flt_video_player.dart';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
import 'dart:io';
// import 'package:video_player/video_player.dart';
import '../common/model/Source.dart';
class VideoSourceWidget extends StatefulWidget {
Source source;
Function endFun;
Function errFun;
VideoSourceWidget({Key key, this.source, this.endFun, this.errFun})
: super(key: key);
@override
_VideoSourceWidgetState createState() => _VideoSourceWidgetState();
}
class _VideoSourceWidgetState extends State<VideoSourceWidget> {
// VideoPlayerController _controller;
IjkMediaController _controller = IjkMediaController();
StreamSubscription subscription;
final key = GlobalKey<DefaultIJKControllerWidgetState>();
var listener;
bool isErr = false;
String errMsg = "";
@override
void initState() {
// TODO: implement initState
super.initState();
initController();
// _controller.addListener(listener);
}
void initController() async {
_controller.setIjkPlayerOptions(
[
TargetPlatform.android,
],
[
IjkOption(IjkOptionCategory.player, "mediacodec", 0),
IjkOption(IjkOptionCategory.player, "mediacodec-hevc", 1),
],
);
await _controller.setDataSource(DataSource.file(File(widget.source.res)), autoPlay: true);
subscriptPlayFinish();
}
subscriptPlayFinish() {
subscription = _controller.playFinishStream.listen((data) {
_controller.play();
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_controller.dispose();
_controller = null;
subscription..cancel();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return AspectRatio(
aspectRatio: _controller.videoInfo.ratio,
child: IjkPlayer(
mediaController: _controller,
controllerWidgetBuilder: (ctl) => Container(),
statusWidgetBuilder: (BuildContext context, IjkMediaController controller,
IjkStatus status) {
print('status $status');
if (status == IjkStatus.prepared) {
return Container();
}
return IjkStatusWidget.buildStatusWidget(context, controller, status);
},
),
);
}
}
日志
flutter 版本
使用 $ flutter doctor -v 并粘贴详细的信息到这里,如果是特定机型的 bug,请包含设备信息
插件版本 0.3.5+1 截图 如果有,请截图
await _controller.setDataSource(DataSource.file(File(widget.source.res)), autoPlay: true); 改为 await _controller.setDataSource(DataSource.file(File(widget.source.res))); _controller.play(); 这个库,隐藏toolbox等 自动播放初始化的绘制有点问题