fijkplayer icon indicating copy to clipboard operation
fijkplayer copied to clipboard

http网络视频重播不了

Open WeaponChan opened this issue 3 years ago • 0 comments

请问一下有遇到过http的视频不能重复播放吗?

http视频第一次播放是可以的,重复播不行,点击播放按钮,下面是状态变化

V[/AudioManager]()(22679): querySoundEffectsEnabled...
I[/flutter]() (22679): [inf] 2022-04-06 13:08:41.742531 [fijk] FijkPlayer{id:2} invoke start
D[/IJKMEDIA]()(22679): IjkMediaPlayer_start
D[/IJKMEDIA]()(22679): ijkmp_start()
D[/IJKMEDIA]()(22679): ijkmp_start()=0
D[/IJKMEDIA]()(22679): ijkmp_get_msg: FFP_REQ_START
D[/IJKMEDIA]()(22679): FFP_MSG_BUFFERING_START:
E[/IJKMEDIA]()(22679): stream 0, offset 0xfed: partial file
D[/IJKMEDIA]()(22679): ijkmp_get_msg: FFP_MSG_SEEK_COMPLETE
D[/IJKMEDIA]()(22679): FFP_MSG_SEEK_COMPLETE:
D[/IJKMEDIA]()(22679): FFP_MSG_BUFFERING_END:
I[/flutter]() (22679): [inf] 2022-04-06 13:08:41.750844 [fijk] FijkPlayer{id:2} state changed to FijkState.started <= FijkState.completed
I[/flutter]() (22679): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I[/flutter]() (22679): ++++++++ 是否开始播放 => true ++++++++
I[/flutter]() (22679): +++++++++++++++++++ 播放器状态 => FijkState.started ++++++++++++++++++++
I[/flutter]() (22679): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
W[/IJKMEDIA]()(22679): msg complete, duration 3233. position 0
I[/IJKMEDIA]()(22679): ffp_toggle_buffering: completed: OK
E[/IJKMEDIA]()(22679): stream 1, offset 0xb69a: partial file
D[/IJKMEDIA]()(22679): ijkmp_get_msg: FFP_MSG_COMPLETED
D[/IJKMEDIA]()(22679): FFP_MSG_COMPLETED:
I[/flutter]() (22679): [inf] 2022-04-06 13:08:41.860067 [fijk] FijkPlayer{id:2} state changed to FijkState.completed <= FijkState.started
I[/flutter]() (22679): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I[/flutter]() (22679): ++++++++ 是否开始播放 => false ++++++++
I[/flutter]() (22679): +++++++++++++++++++ 播放器状态 => FijkState.completed ++++++++++++++++++++
I[/flutter]() (22679): ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
I[/IJKMEDIA]()(22679): ffp_toggle_buffering: eof

但是使用https的网络视频和本地的视频是可以重复播放的。

播放器widget代码

import 'package:fijkplayer/fijkplayer.dart';
import 'package:fijkplayer_skin/schema.dart';
import 'package:flutter/material.dart';
import 'package:fijkplayer_skin/fijkplayer_skin.dart';

class VideoPlayerWidget extends StatefulWidget {
  final videoPath;
  VideoPlayerWidget({Key key, this.videoPath}) : super(key: key);
  @override
  _VideoPlayerWidgetState createState() => _VideoPlayerWidgetState();
}

class _VideoPlayerWidgetState extends State<VideoPlayerWidget>
    with TickerProviderStateMixin {
  final FijkPlayer player = FijkPlayer();
  VideoSourceFormat _videoSourceTabs;
  Map<String, List<Map<String, dynamic>>> _videoList;

  ShowConfigAbs vCfg = PlayerShowConfig();

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

  @override
  void initState() {
    super.initState();
    _videoList = {
      "video": [
        {
          "name": "",
          "list": [
            {
              "url": widget.videoPath,
              "name": "",
            },
          ]
        },
      ]
    };

    // 格式化json转对象
    _videoSourceTabs = VideoSourceFormat.fromJson(_videoList);
    // 这句不能省,必须有
    speed = 1.0;

    player.addListener(_playerValueChanged);
  }

  _playerValueChanged() {
    if (player.value.state == FijkState.completed) {
      // resetDataSource();
      // player.start();
    }
  }

  ///重新加载数据源
  resetDataSource() async {
    await player.reset();
    await player.setDataSource(widget.videoPath,
        autoPlay: false, showCover: true);
  }

  @override
  Widget build(BuildContext context) {
    return _videoSourceTabs == null || _videoList == null
        ? Container()
        : Container(
            child: FijkView(
              height: 200,
              color: Colors.black,
              fit: FijkFit.cover,
              player: player,
              panelBuilder: (
                FijkPlayer player,
                FijkData data,
                BuildContext context,
                Size viewSize,
                Rect texturePos,
              ) {
                /// 使用自定义的布局
                return CustomFijkPanel(
                  player: player,
                  viewSize: viewSize,
                  texturePos: texturePos,
                  pageContent: context,
                  // 标题 当前页面顶部的标题部分
                  playerTitle: "",
                  // 当前视频源tabIndex
                  curTabIdx: 0,
                  // 当前视频源activeIndex
                  curActiveIdx: 0,
                  // 显示的配置
                  showConfig: vCfg,
                  // json格式化后的视频数据
                  videoFormat: _videoSourceTabs,
                );
              },
            ),
          );
  }
}

class PlayerShowConfig implements ShowConfigAbs {
  @override
  bool drawerBtn = false;
  @override
  bool nextBtn = false;
  @override
  bool speedBtn = false;
  @override
  bool topBar = false;
  @override
  bool lockBtn = false;
  @override
  bool autoNext = false;
  @override
  bool bottomPro = true;
  @override
  bool stateAuto = true;
  @override
  bool isAutoPlay = false;
}

麻烦大佬给我支出一下哪边有问题

fijkplayer: ^0.10.1

WeaponChan avatar Apr 06 '22 05:04 WeaponChan