如何在flutter视频播放器中从特定时间段开始播放视频

发布于 2025-01-13 11:31:14 字数 3596 浏览 6 评论 0原文

我正在使用 flutter 的 Flick Video Player Package 来播放视频。我必须从最后剩下的时间开始播放视频,这样我可以节省存储时间。您能否帮我解决一下如何从该持续时间(例如持续时间(秒:10))开始播放视频。

我已经尝试过: _controller.seekTo(Duration:10) initState 但不起作用。

我的视频播放器代码是

import 'package:education_app/utils/app_images.dart';
import 'package:education_app/utils/shared_preferences_contants.dart';
import 'package:flick_video_player/flick_video_player.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:visibility_detector/visibility_detector.dart';
import 'package:video_player/video_player.dart';

class VideoWidget extends StatefulWidget {
  VideoWidget({Key? key, this.videoUrl, this.chapterId, this.videoPlayTime})
      : super(key: key);
  String? videoUrl;
  int? chapterId;
  Duration? videoPlayTime;
  @override
  _VideoWidgetState createState() => _VideoWidgetState();
}

class _VideoWidgetState extends State<VideoWidget> {
  late VideoPlayerController _controller;
  Duration? videoPlayTime = Duration(hours: 00, minutes: 00, seconds: 15);

  late FlickManager flickManager;
  @override
  void initState() {
    super.initState();
    if (widget.videoUrl != null) {
      // String url =
      //     "http://linuxdevserver.centralindia.cloudapp.azure.com:8080/uploads/1641299601_ec4ce2f9db.mp4";
      print(
          '${widget.videoUrl}00000000000000000000000000000${widget.videoPlayTime}0000000000000');
      _controller = VideoPlayerController.network(
        "https://cdn.videvo.net/videvo_files/video/premium/video0390/large_watermarked/902-1_902-3981-PD2_preview.mp4",/*this will come from widget.url*/
        //"https://drive.google.com/uc?export=download&id=1OZyINvgyppCp-E6Ok-p9Yg7sLmqx1UKt",
        // "https://cdn.videvo.net/videvo_files/video/premium/video0390/large_watermarked/902-1_902-3981-PD2_preview.mp4",
        //'https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4',
        videoPlayerOptions: VideoPlayerOptions(mixWithOthers: false),
      );

      flickManager =
          FlickManager(videoPlayerController: _controller, autoPlay: false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return
        Container(
            child: Column(children: [
      FlickVideoPlayer(
        flickManager: flickManager,
        flickVideoWithControls: FlickVideoWithControls(
          videoFit: BoxFit.contain,
          playerLoadingFallback: Center(child: Image.asset(Images.imgLoading)),
          backgroundColor: Colors.transparent,
          iconThemeData: IconThemeData(color: Colors.white, size: 20),
          //   closedCaptionTextStyle: TextStyle(fontSize: 8),
          controls: FlickPortraitControls(
            iconSize: 25,
          ),
        ),
        flickVideoWithControlsFullscreen: FlickVideoWithControls(
          controls: FlickLandscapeControls(),
        ),
      ),
      //    Text(widget.videoUrl!)
    ])
            // ),
            );
  }

  @override
  void dispose() {
    saveRecentVideoDetails();
    flickManager.dispose();
    _controller.dispose();

    super.dispose();
  }

  saveRecentVideoDetails() async {
    SharedPreferences store = await SharedPreferences.getInstance();
    print("Time${_controller.value.position}.......${_controller.dataSource};");
    print(recentVideoPlaytime + widget.chapterId.toString());
    await store.setString(
        recentVideoPlaytime, _controller.value.position.toString());
    await store.setString(recentVideoUrl, _controller.dataSource);
  }
}

I am using Flick Video Player Package of flutter for playing video. And I have to start Playing video from duration last left for that i have save time in storage. Can you please help me out that how can i start playing video from that time duration(for example Duration(seconds:10).

I have already tried:
_controller.seekTo(Duration:10) initState but not working.

My Code of video player is

import 'package:education_app/utils/app_images.dart';
import 'package:education_app/utils/shared_preferences_contants.dart';
import 'package:flick_video_player/flick_video_player.dart';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:visibility_detector/visibility_detector.dart';
import 'package:video_player/video_player.dart';

class VideoWidget extends StatefulWidget {
  VideoWidget({Key? key, this.videoUrl, this.chapterId, this.videoPlayTime})
      : super(key: key);
  String? videoUrl;
  int? chapterId;
  Duration? videoPlayTime;
  @override
  _VideoWidgetState createState() => _VideoWidgetState();
}

class _VideoWidgetState extends State<VideoWidget> {
  late VideoPlayerController _controller;
  Duration? videoPlayTime = Duration(hours: 00, minutes: 00, seconds: 15);

  late FlickManager flickManager;
  @override
  void initState() {
    super.initState();
    if (widget.videoUrl != null) {
      // String url =
      //     "http://linuxdevserver.centralindia.cloudapp.azure.com:8080/uploads/1641299601_ec4ce2f9db.mp4";
      print(
          '${widget.videoUrl}00000000000000000000000000000${widget.videoPlayTime}0000000000000');
      _controller = VideoPlayerController.network(
        "https://cdn.videvo.net/videvo_files/video/premium/video0390/large_watermarked/902-1_902-3981-PD2_preview.mp4",/*this will come from widget.url*/
        //"https://drive.google.com/uc?export=download&id=1OZyINvgyppCp-E6Ok-p9Yg7sLmqx1UKt",
        // "https://cdn.videvo.net/videvo_files/video/premium/video0390/large_watermarked/902-1_902-3981-PD2_preview.mp4",
        //'https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4',
        videoPlayerOptions: VideoPlayerOptions(mixWithOthers: false),
      );

      flickManager =
          FlickManager(videoPlayerController: _controller, autoPlay: false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return
        Container(
            child: Column(children: [
      FlickVideoPlayer(
        flickManager: flickManager,
        flickVideoWithControls: FlickVideoWithControls(
          videoFit: BoxFit.contain,
          playerLoadingFallback: Center(child: Image.asset(Images.imgLoading)),
          backgroundColor: Colors.transparent,
          iconThemeData: IconThemeData(color: Colors.white, size: 20),
          //   closedCaptionTextStyle: TextStyle(fontSize: 8),
          controls: FlickPortraitControls(
            iconSize: 25,
          ),
        ),
        flickVideoWithControlsFullscreen: FlickVideoWithControls(
          controls: FlickLandscapeControls(),
        ),
      ),
      //    Text(widget.videoUrl!)
    ])
            // ),
            );
  }

  @override
  void dispose() {
    saveRecentVideoDetails();
    flickManager.dispose();
    _controller.dispose();

    super.dispose();
  }

  saveRecentVideoDetails() async {
    SharedPreferences store = await SharedPreferences.getInstance();
    print("Time${_controller.value.position}.......${_controller.dataSource};");
    print(recentVideoPlaytime + widget.chapterId.toString());
    await store.setString(
        recentVideoPlaytime, _controller.value.position.toString());
    await store.setString(recentVideoUrl, _controller.dataSource);
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青春有你 2025-01-20 11:31:14

要仅更改视频的位置,您必须在初始化后播放它,如下所示:

_controller = VideoPlayerController.network(url)
  ..initialize().then((_) {
    setState(() {
      _controller!.seekTo(Duration(seconds: 10));
      _controller!.play();
    });
  });
_controller!.addListener(checkVideo);

seekTo change only the position of the video, you have to play it after initialising it like that :

_controller = VideoPlayerController.network(url)
  ..initialize().then((_) {
    setState(() {
      _controller!.seekTo(Duration(seconds: 10));
      _controller!.play();
    });
  });
_controller!.addListener(checkVideo);
瑶笙 2025-01-20 11:31:14

您可以尝试 _controller.seekTo(Duration(秒: 2));

Could you please try _controller.seekTo(Duration(seconds: 2));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文