flutter_ijkplayer icon indicating copy to clipboard operation
flutter_ijkplayer copied to clipboard

[Bug]自定义controllerWidgetBuilder后第一次播放某些视频不正确

Open atheist1 opened this issue 5 years ago • 1 comments

描述一下你遇到的 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 截图 如果有,请截图

atheist1 avatar Apr 11 '20 09:04 atheist1

await _controller.setDataSource(DataSource.file(File(widget.source.res)), autoPlay: true); 改为 await _controller.setDataSource(DataSource.file(File(widget.source.res))); _controller.play(); 这个库,隐藏toolbox等 自动播放初始化的绘制有点问题

philos3 avatar Jul 29 '20 09:07 philos3