You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用better_player包从URL链接中检测获取视频时长

基于better_player获取网络视频URL时长的实现方案

以下两种方案均不需要渲染播放器视图,仅后台预加载视频元数据即可获取时长,流量消耗极低:

方案1:使用better_player自带控制器实现

better_player本身基于video_player封装,可直接通过其控制器获取元数据,适配你现有的better_player依赖,无需额外引入其他包:

import 'package:better_player/better_player.dart';
import 'package:flutter/services.dart';

Future<Duration?> getVideoDuration(String videoUrl, {Map<String, String>? headers}) async {
  try {
    final dataSource = BetterPlayerDataSource(
      BetterPlayerDataSourceType.network,
      videoUrl,
      headers: headers ?? {},
    );
    final controller = BetterPlayerController(
      const BetterPlayerConfiguration(
        autoPlay: false,
        controlsConfiguration: BetterPlayerControlsConfiguration(
          showControls: false,
        ),
      ),
      betterPlayerDataSource: dataSource,
    );

    await controller.videoPlayerController?.initialize();
    final videoDuration = controller.videoPlayerController?.value.duration;
    controller.dispose();
    return videoDuration;
  } catch (e) {
    if (e is PlatformException) {
      print("视频时长获取失败:${e.message}");
    }
    return null;
  }
}

使用说明

  • 直接调用异步方法传入视频URL即可,返回的Duration对象可通过inSeconds属性获取秒级时长,也可自行格式化为时分秒格式
  • 如果你的视频需要鉴权,调用时传入和正常播放视频一致的请求头即可

方案2:直接使用底层video_player依赖实现

better_player默认已依赖video_player包,无需额外安装,方案更轻量:

import 'package:video_player/video_player.dart';

Future<Duration?> getVideoDuration(String videoUrl, {Map<String, String>? headers}) async {
  final controller = VideoPlayerController.networkUrl(
    Uri.parse(videoUrl),
    httpHeaders: headers ?? {},
  );
  try {
    await controller.initialize();
    final duration = controller.value.duration;
    controller.dispose();
    return duration;
  } catch (e) {
    controller.dispose();
    print("视频时长获取失败:$e");
    return null;
  }
}

注意事项

  • 需确保应用已配置网络权限:安卓端在AndroidManifest.xml中添加INTERNET权限,iOS端在Info.plist中配置允许HTTP请求(如果视频链接是非HTTPS的)
  • 若返回null优先排查视频链接有效性、是否过期、鉴权头是否正确

内容的提问来源于stack exchange,提问作者salem kazem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:45:02