tencent cloud

文档反馈

Flutter 接入指引

最后更新时间:2024-04-11 16:11:38

    SDK 下载

    腾讯云 Flutter 播放器 SDK 的地址是 Player Flutter

    阅读对象

    本文档部分内容为腾讯云专属能力,使用前请开通 腾讯云 相关服务,未注册用户可注册账号 免费试用

    通过本文你可以学会

    如何集成腾讯云 Flutter 播放器 SDK。
    如何使用播放器组件进行点播播放。

    播放器组件简介

    Flutter 播放器组件是基于 Flutter 播放器 SDK 的扩展,播放器组件对于点播播放器,集成了更多的功能,包括全屏切换、清晰度切换、 进度条、播放控制、封面标题展示等常用功能,并且相对于点播播放器使用起来更加方便,如果想更加方便快捷的集成 Flutter 视频播放能力,可以选择 Flutter 播放器组件使用。
    支持功能列表:
    全屏播放
    播放过程中屏幕旋转自适应
    自定义视频封面
    清晰度切换
    声音和亮度调节
    倍速播放
    硬件加速开启\\关闭
    画中画(PIP)(支持 Android 和 iOS 平台)
    雪碧图和关键帧打点信息
    更多功能正在逐步开发中......

    集成指引

    1. 将项目中 superplayer_widget 目录复制到自己的 flutter 工程下。
    2. 在自己项目的配置文件 pubspec.yaml 下添加依赖。
    superplayer_widget:
    # 该路径根据superplayer_widget存放路径改变
    path: ../superplayer_widget
    super_player:
    git:
    url: https://github.com/LiteAVSDK/Player_Flutter
    path: Flutter
    ref: main
    ref 可以根据自身项目需要,替换为对应的版本或分支。
    3. 修改 superplayer_widget 的superPlayer依赖。
    进入修改 superplayer_widget 的pubspec.yaml
    将如下配置进行替换:
    super_player:
    path: ../
    替换为:
    super_player:
    git:
    url: https://github.com/LiteAVSDK/Player_Flutter
    path: Flutter
    ref: main
    ref 可以根据自身项目需要,替换为对应的版本或分支。
    4. 由于目前播放器组件接入了国际化,需要在入口函数中添加国际化组件,如下示例:
    @override Widget build(BuildContext context) { return MaterialApp( localizationsDelegates: [ SuperPlayerWidgetLocals.delegate,
    // ...... your app other delegate ], supportedLocales: [ Locale.fromSubtags(languageCode: 'en'), Locale.fromSubtags(languageCode: 'zh'),
    // ....... other language ],
    // ...... your app other code ); }
    5. 在需要使用到的页面,导入superplayer_widget的依赖包,如下所示:
    import 'package:superplayer_widget/demo_superplayer_lib.dart';
    6. 其余原生相关配置,可以参考 集成指引

    SDK 集成

    步骤1:申请视频播放能力 License 和集成

    集成播放器前,需要 注册腾讯云账户,注册成功后申请视频播放能力 License, 然后通过下面方式集成,建议在应用启动时进行。
    如果没有集成 License,播放过程中可能会出现异常。
    String licenceURL = ""; // 获取到的 licence url
    String licenceKey = ""; // 获取到的 licence key
    SuperPlayerPlugin.setGlobalLicense(licenceURL, licenceKey);

    步骤2:设置 SDK 接入环境

    为服务客户更高质量、更安全合规地开展业务,符合各国家和地区的法律法规要求,腾讯云提供两套SDK接入环境。若您服务全球用户,推荐您使用以下接口配置全球接入环境。
    SuperPlayerPlugin.setGlobalEnv("GDPR");

    步骤3:创建 controller

    SuperPlayerController _controller = SuperPlayerController(context);

    步骤4:配置播放器

    FTXVodPlayConfig config = FTXVodPlayConfig();
    // 如果不配置preferredResolution,则在播放多码率视频的时候优先播放720 * 1280分辨率的码率
    config.preferredResolution = 720 * 1280;
    _controller.setPlayConfig(config);
    FTXVodPlayConfig 中的详细配置可参考 Flutter 点播播放器的配置播放器接口。

    步骤5:设置监听事件

    _controller.onSimplePlayerEventBroadcast.listen((event) {
    String evtName = event["event"];
    if (evtName == SuperPlayerViewEvent.onStartFullScreenPlay) {
    setState(() {
    _isFullScreen = true;
    });
    } else if (evtName == SuperPlayerViewEvent.onStopFullScreenPlay) {
    setState(() {
    _isFullScreen = false;
    });
    } else {
    print(evtName);
    }
    });

    步骤6:添加布局

    Widget _getPlayArea() {
    return Container(
    height: 220,
    child: SuperPlayerView(_controller),
    );
    }

    步骤7:添加返回事件监听

    添加返回事件监听,确保用户在触发返回事件的时候,如果播放器处于全屏等状态,可以优先退出全屏,再次触发才会退出页面。 如果全屏播放状态下需要直接退出页面,可以不实现该监听。
    @override
    Widget build(BuildContext context) {
    return WillPopScope(
    child: Container(
    decoration: BoxDecoration(
    image: DecorationImage(
    image: AssetImage("images/ic_new_vod_bg.png"),
    fit: BoxFit.cover,
    )),
    child: Scaffold(
    backgroundColor: Colors.transparent,
    appBar: _isFullScreen
    ? null
    : AppBar(
    backgroundColor: Colors.transparent,
    title: const Text('SuperPlayer'),
    ),
    body: SafeArea(
    child: Builder(
    builder: (context) => getBody(),
    ),
    ),
    ),
    ),
    onWillPop: onWillPop);
    }
    
    Future<bool> onWillPop() async {
    return !_controller.onBackPress();
    }

    步骤8:启动播放

    通过 url 方式
    通过 fileId 方式
    SuperPlayerModel model = SuperPlayerModel();
    model.videoURL = "http://1400329073.vod2.myqcloud.com/d62d88a7vodtranscq1400329073/59c68fe75285890800381567412/adp.10.m3u8";
    _controller.playWithModelNeedLicence(model);
    SuperPlayerModel model = SuperPlayerModel();
    model.appId = 1500005830;
    model.videoId = new SuperPlayerVideoId();
    model.videoId.fileId = "8602268011437356984";
    // psign 即播放器签名,签名介绍和生成方式参见链接:https://www.tencentcloud.com/document/product/266/38099
    model.videoId.pSign = "psignXXX"
    _controller.playWithModelNeedLicence(model);
    媒资管理 找到对应的视频文件。在文件名下方可以看到 FileId。
    通过 FileId 方式播放,播放器会向后台请求真实的播放地址。如果此时网络异常或 FileId 不存在,则会收到SuperPlayerViewEvent.onSuperPlayerError 事件。

    步骤9:结束播放

    结束播放时记得调用 controller 的销毁方法,尤其是在下次 startVodPlay 之前,否则可能会产生大量的内存泄露以及闪屏问题。也确保在退出页面的时候,能够结束视频播放。
    @override
    void dispose() {
    // must invoke when page exit.
    _controller.releasePlayer();
    super.dispose();
    }

    播放器组件接口列表

    1、视频播放

    注意
    10.7版本开始,startPlay变更为startVodPlay,需要通过 {@link SuperPlayerPlugin#setGlobalLicense} 设置 Licence 后方可成功播放, 否则将播放失败(黑屏),全局仅设置一次即可。直播 Licence、短视频 Licence 和视频播放 Licence 均可使用,若您暂未获取上述 Licence ,可快速免费申请 Licence 以正常播放。
    说明
    开始播放视频。
    接口
    _controller.playWithModelNeedLicence(model);
    参数说明
    1. SuperPlayerModel。
    参数名
    类型
    描述
    appId
    int
    应用 appId。fileId 播放必填。
    videoURL
    String
    视频 url,url 播放必填。
    multiVideoURLs
    List<String>
    多码率 url,多码率 url 播放必填。
    defaultPlayIndex
    int
    默认播放码率序号,配合 multiVideoURLs 使用。
    videoId
    SuperPlayerVideoId
    fileId 存储对象,以下会有详细介绍。
    title
    String
    视频标题,用户可设置该字段来自定义标题,从而覆盖播放器内部从服务器请求的标题。
    coverUrl
    String
    从腾讯服务器拉取的封面图片,该值会在 SuperVodDataLoader 中被自动赋值。
    customeCoverUrl
    String
    自定义视频封面,该字段会被优先判断,可以通过定义该参数来实现自定义封面。
    duration
    int
    视频时长,单位秒。
    videoDescription
    String
    视频描述。
    videoMoreDescription
    String
    视频详细描述。
    playAction
    int
    action 包括 PLAY_ACTION_AUTO_PLAY、PLAY_ACTION_MANUAL_PLAY和PLAY_ACTION_PRELOAD,以下对参数含义会有详细介绍。
    2. SuperPlayerVideoId。
    参数名
    类型
    描述
    fileId
    String
    文件 id。必填。
    psign
    String
    播放器签名,签名介绍和生成方式。
    3. playAction。
    PLAY_ACTION_AUTO_PLAY:调用 playWithModel 之后,会自动开始播放视频。
    PLAY_ACTION_MANUAL_PLAY:调用 playWithModel 之后,需要手动播放,并且播放器实质上并未加载视频,只会显示封面图,相对于 PLAY_ACTION_PRELOAD 没有任何视频播放资源消耗。
    PLAY_ACTION_PRELOAD:调用 playWithModel 之后,会显示封面图,不会开始播放视频,不过播放器实质上已经加载了视频,相对于 PLAY_ACTION_MANUAL_PLAY,起播速度会更快。

    2、暂停播放

    说明
    暂停播放视频。
    接口
    _controller.pause();

    3、继续播放

    说明
    继续播放视频。
    接口
    _controller.resume();

    4、重新开始播放

    说明
    重新开始播放视频。
    接口
    _controller.reStart();

    5、重置播放器

    说明
    重置播放器状态,并停止播放视频。
    接口
    _controller.resetPlayer();

    6、释放播放器

    说明
    释放播放器资源,并停止播放,调用该方法之后,controller 将不可再复用。
    接口
    _controller.releasePlayer();

    7、播放器返回事件

    说明
    触发播放器返回事件,该方法主要用于全屏播放模式下的返回判断和处理,返回 true:执行了退出全屏等操作,消耗了返回事件 false:未消耗事件。
    接口
    _controller.onBackPress();

    8、切换清晰度

    说明
    实时切换当前正在播放的视频的清晰度。
    接口
    _controller.switchStream(videoQuality);
    参数说明
    videoQuality 在开始播放之后,一般可通过_controller.currentQualiyList和_controller.currentQuality来获取,前者为清晰度列表,后者为默认清晰度。清晰度切换能力在超级播放器中已经集成,切换到全屏之后可点击右下角清晰度进行切换。
    参数名
    类型
    描述
    index
    int
    清晰度序号
    bitrate
    int
    清晰度码率
    width
    int
    该清晰度下视频的宽度
    height
    int
    该清晰度下视频的高度
    name
    String
    清晰度简称
    title
    String
    用于显示的清晰度名称
    url
    String
    清晰度 url,用于多码率下的清晰度 url,非必填

    9、调整进度(seek)

    说明
    调整当前视频的播放进度。
    接口
    _controller.seek(progress);
    参数说明
    参数名
    类型
    描述
    progress
    double
    需要调整到的时间,单位 秒

    10、配置超级播放器

    说明
    配置超级播放器
    接口
    _controller.setPlayConfig(config);
    参数说明
    参数名
    类型
    描述
    connectRetryCount
    int
    播放器重连次数,当 SDK 与服务器异常断开连接时,SDK 会尝试与服务器重连.通过该值设置SDK重连次数
    connectRetryInterval
    int
    播放器重连间隔,当 SDK 与服务器异常断开连接时,SDK 会尝试与服务器重连.通过该值设置两次重连间隔时间
    timeout
    int
    播放器连接超时时间
    playerType
    int
    播放器类型,0 点播,1 直播,2 直播回看
    headers
    Map
    自定义http headers
    enableAccurateSeek
    bool
    是否精确seek,默认true
    autoRotate
    bool
    播放mp4文件时,若设为 true则根据文件中的旋转角度自动旋转。旋转角度可在PLAY_EVT_CHANGE_ROTATION事件中获得。默认 true
    smoothSwitchBitrate
    bool
    平滑切换多码率 HLS,默认false。设为false时,可提高多码率地址打开速度; 设为true,在 IDR 对齐时可平滑切换码率
    cacheMp4ExtName
    String
    缓存 mp4 文件扩展名,默认mp4
    progressInterval
    int
    设置进度回调间隔,若不设置,SDK默认间隔0.5秒回调一次,单位毫秒
    maxBufferSize
    int
    最大播放缓冲大小,单位 MB。此设置会影响 playableDuration,设置越大,提前缓存的越多
    maxPreloadSize
    int
    预加载最大缓冲大小,单位:MB
    firstStartPlayBufferTime
    int
    首缓需要加载的数据时长,单位ms,默认值为100ms
    nextStartPlayBufferTime
    int
    缓冲时(缓冲数据不够引起的二次缓冲,或者 seek 引起的拖动缓冲)最少要缓存多长的数据才能结束缓冲,单位ms,默认值为250ms
    overlayKey
    String
    HLS 安全加固加解密key
    overlayIv
    String
    HLS 安全加固加解密Iv
    extInfoMap
    Map
    一些不必周知的特殊配置
    enableRenderProcess
    bool
    是否允许加载后渲染后处理服务,默认开启,开启后超分插件如果存在,默认加载
    preferredResolution
    int
    优先播放的分辨率,preferredResolution = width * height

    11、开关硬解

    说明
    开启或关闭硬解播放能力。
    接口
    _controller.enableHardwareDecode(enable);

    12、获得播放状态

    说明
    获得当前播放器的播放状态。
    接口
    SuperPlayerState superPlayerState = _controller.getPlayerState();
    参数说明
    参数名
    类型
    描述
    INIT
    SuperPlayerState
    初始状态
    PLAYING
    SuperPlayerState
    播放中
    PAUSE
    SuperPlayerState
    暂停中
    LOADING
    SuperPlayerState
    缓冲中
    END
    SuperPlayerState
    播放结束

    13、进入画中画模式

    说明
    调动该方法之后,视频将会进入画中画模式,该模式只支持 android 7.0以上,并且支持画中画模式的机型。
    接口
    _controller.enterPictureInPictureMode(
    backIcon: "images/ic_pip_play_replay.png",
    playIcon: "images/ic_pip_play_normal.png",
    pauseIcon: "images/ic_pip_play_pause.png",
    forwardIcon: "images/ic_pip_play_forward.png");
    参数说明
    该参数只适用于android平台。
    参数名
    类型
    描述
    backIcon
    String
    回退按钮图标,由于android平台限制,图标大小不得超过1M,可不传,不传则使用系统自带图标
    playIcon
    String
    播放按钮图标,由于android平台限制,图标大小不得超过1M,可不传,不传则使用系统自带图标
    pauseIcon
    String
    暂停按钮图标,由于android平台限制,图标大小不得超过1M,可不传,不传则使用系统自带图标
    forwardIcon
    String
    快进按钮图标,由于android平台限制,图标大小不得超过1M,可不传,不传则使用系统自带图标

    事件通知

    1、播放事件监听

    说明
    监听播放器的操作事件。
    代码
    _controller.onSimplePlayerEventBroadcast.listen((event) {
    String evtName = event["event"];
    if (evtName == SuperPlayerViewEvent.onStartFullScreenPlay) {
    setState(() {
    _ isFullScreen = true;
    });
    } else if (evtName == SuperPlayerViewEvent.onStopFullScreenPlay) {
    setState(() {
    _isFullScreen = false;
    });
    } else {
    print(evtName);
    }
    });
    事件说明
    状态
    含义
    onStartFullScreenPlay
    进入全屏播放。
    onStopFullScreenPlay
    退出全屏播放。
    onSuperPlayerDidStart
    播放开始通知。
    onSuperPlayerDidEnd
    播放结束通知。
    onSuperPlayerError
    播放错误通知。
    onSuperPlayerBackAction
    返回事件。

    高级功能

    1、通过 fileId 提前请求视频数据

    可通过 SuperVodDataLoader 提前将视频数据请求下来,提高起播速度。
    代码示例
    SuperPlayerModel model = SuperPlayerModel();
    model.appId = 1500005830;
    model.videoId = new SuperPlayerVideoId();
    model.videoId.fileId = "8602268011437356984";
    model.title = "云点播";
    SuperVodDataLoader loader = SuperVodDataLoader();
    // model中的必要参数会在SuperVodDataLoader中直接赋值
    loader.getVideoData(model, (resultModel) {
    _controller.playWithModelNeedLicence(resultModel);
    })

    2、画中画模式的使用

    1. 平台配置
    Android
    iOS
    在自己项目 android 包下,找到 build.gradle,确保 compileSdkVersion 和 targetSdkVersion 的版本为31或以上。
    在自己项目的 target 下选择 Signing & Capabilities 添加 Background Modes,勾选 “Audio,AirPlay,and Picture in Picture”。
    2. 复制 superPlayer 示例代码
    将 github 项目中 superplayer_widget 导入到自己的 lib 目录下,仿照示例代码中的 demo_superplayer.dart 集成播放器组件。然后就可以在播放器组件的播放界面右边中间看到画中画模式按钮,点击即可进入画中画模式。
    3. 监听画中画模式生命周期
    使用 SuperPlayerPlugin 中的 onExtraEventBroadcast 可监听到画中画模式的生命周期,示例代码如下:
    SuperPlayerPlugin.instance.onExtraEventBroadcast.listen((event) {
    int eventCode = event["event"];
    if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_ALREADY_EXIT) {
    // exit pip mode
    } else if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_REQUEST_START) {
    // enter pip mode
    } else if (eventCode == TXVodPlayEvent.EVENT_PIP_MODE_ALREADY_ENTER) {
    // already enter pip mode
    } else if (eventCode == TXVodPlayEvent.EVENT_IOS_PIP_MODE_WILL_EXIT) {
    // will exit pip mode
    } else if (eventCode == TXVodPlayEvent.EVENT_IOS_PIP_MODE_RESTORE_UI) {
    // restore UI only support iOS
    }
    });
    4. 画中画模式进入错误码
    进入画中画模式失败的时候,除了有 log 提示以外,还会有 toast 提示,可在 superplayer_widget.dart 的 _onEnterPipMode 方法内修改错误情况处理。错误码含义如下:
    参数名
    描述
    NO_ERROR
    0
    启动成功,没有错误。
    ERROR_PIP_LOWER_VERSION
    -101
    Android 版本过低,不支持画中画模式。
    ERROR_PIP_DENIED_PERMISSION
    -102
    画中画模式权限未打开,或者当前设备不支持画中画。
    ERROR_PIP_ACTIVITY_DESTROYED
    -103
    当前界面已经销毁。
    ERROR_IOS_PIP_DEVICE_NOT_SUPPORT
    -104
    设备或系统版本不支持(iPad iOS9+ 才支持 PIP)。
    ERROR_IOS_PIP_PLAYER_NOT_SUPPORT
    -105
    播放器不支持。
    ERROR_IOS_PIP_VIDEO_NOT_SUPPORT
    -106
    视频不支持。
    ERROR_IOS_PIP_IS_NOT_POSSIBLE
    -107
    PIP 控制器不可用。
    ERROR_IOS_PIP_FROM_SYSTEM
    -108
    PIP 控制器报错。
    ERROR_IOS_PIP_PLAYER_NOT_EXIST
    -109
    播放器对象不存在。
    ERROR_IOS_PIP_IS_RUNNING
    -110
    PIP 功能已经运行。
    ERROR_IOS_PIP_NOT_RUNNING
    -111
    PIP 功能没有启动。
    5. 判断当前设备是否支持画中画
    使用 SuperPlayerPlugin 中的 isDeviceSupportPip 可判断当前是否能够开启画中画,代码示例如下:
    int result = await SuperPlayerPlugin.isDeviceSupportPip();
    if(result == TXVodPlayEvent.NO_ERROR) {
    // pip support
    }
    result 的返回结果的含义和画中画模式错误码一致。
    6. 使用画中画控制器管理画中画
    画中画控制器 TXPipController 为 superplayer_widget 中封装的画中画工具,必须与 SuperPlayerView 搭配起来使用
    进入画中画会自动关闭当前界面,并回调提前设置的监听方法,在回调的方法中可以保存播放器当前界面的必要参数。画中画还原之后,会重新将之前的界面 push 回来,并传递之前保存的参数。 使用该控制器的时候,画中画和播放器只能存在一个实例,当重新进入播放器界面的时候,画中画会自动关闭。
    6.1 在自己的项目的入口处,如main.dart,调用TXPipController设置画中画控制跳转,跳转的页面为用于进入画中画的播放器页面。 可根据自身项目情况设置不同的界面,代码实例如下:
    TXPipController.instance.setNavigatorHandle((params) {
    navigatorKey.currentState?.push(MaterialPageRoute(builder: (_) => DemoSuperPlayer(initParams: params)));
    });
    6.2 设置画中画的播放页面监听,需要实现TXPipPlayerRestorePage方法,设置之后,当即将进入画中画时,控制器会回调void onNeedSavePipPageState(Map<String, dynamic> params)方法,此时可以在 params 中存入当前页面需要的参数。
    TXPipController.instance.setPipPlayerPage(this);
    随后,当用户点击 SuperPlayerView 上的进入画中画按钮的时候,会调用SuperPlayerView_onEnterPipMode内部方法进入画中画,也可以自行调用SuperPlayerControllerenterPictureInPictureMode方法进入。

    3、视频下载

    下载视频

    1. 使用播放器组件的视频下载,首先需要把SuperPlayerModel中的isEnableDownload打开,该字段默认关闭。
    SuperPlayerModel model = SuperPlayerModel();
    // 打开视频下载能力
    model.isEnableDownload = true;
    播放器组件目前只会在点播播放模式下启用下载。
    2. 使用SuperPlayerControllerstartDownload方法,可以直接下载当前播放器正在播放的视频,对应的是当前播放视频的清晰度。也可是使用DownloadHelper下载指定视频,如下:
    DownloadHelper.instance.startDownloadBySize(videoModel, videoWidth, videoHeight);
    使用DownloadHelper的 startDownloadBySize,可下载指定分辨率的视频,如果没有该分辨率,会下载相近分辨率的视频。 除了以上接口以外,也可选择传入画质 ID 或者 mediaInfo 直接下载。
    // QUALITY_240P 240p
    // QUALITY_360P 360P
    // QUALITY_480P 480p
    // QUALITY_540P 540p
    // QUALITY_720P 720p
    // QUALITY_1080P 1080p
    // QUALITY_2K 2k
    // QUALITY_4K 4k
    // quality参数可以自定义,取分辨率宽高最小值(如分辨率为1280*720, 期望下载此分辨率的流,quality传入 QUALITY_720P)
    // 播放器 SDK 会选择小于或等于传入分辨率的流进行下载
    // 使用画质ID下载
    DownloadHelper.instance.startDownload(videoModel, qualityId);
    // 使用mediaInfo下载
    DownloadHelper.instance.startDownloadOrg(mediaInfo);
    3. 画质 ID 转换。
    点播的CommonUtils提供了getDownloadQualityBySize方法,用于将分辨率转为对应的画质 ID。
    CommonUtils.getDownloadQualityBySize(width, height);

    停止下载视频

    使用DownloadHelperstopDownload方法可以停止对应的视频下载,示例如下:
    DownloadHelper.instance.stopDownload(mediaInfo);
    mediaInfo 可通过DownloadHelpergetMediaInfoByCurrent方法获取,或者使用TXVodDownloadControllergetDownloadList获得下载信息。

    删除下载视频

    使用DownloadHelperdeleteDownload方法,可以删除对应的视频。
    bool deleteResult = await DownloadHelper.instance.deleteDownload(downloadModel.mediaInfo);
    deleteDownload 会返回删除的结果,来判断是否删除成功。

    下载状态

    DownloadHelper提供了基本的isDownloaded方法判断视频是否已经下载。也可以注册监听来实时判断下载状态。
    DownloadHelper对下载事件进行了分发,可通过如下代码进行事件注册。
    // 注册下载事件监听
    DownloadHelper.instance.addDownloadListener(FTXDownloadListener((event, info) {
    // 下载状态变化
    }, (errorCode, errorMsg, info) {
    // 下载错误回调
    }));
    // 移除下载事件监听
    DownloadHelper.instance.removeDownloadListener(listener);
    此外,还可以通过TXVodDownloadController.instance.getDownloadInfo(mediaInfo)方法或者TXVodDownloadController.instance.getDownloadList()方法直接查询 mediaInfo 中的 downloadState 来判断下载状态。

    播放下载的视频

    TXVodDownloadController.instance.getDownloadInfo(mediaInfo)TXVodDownloadController.instance.getDownloadList()获得到的视频信息中有个 playPath 字段,使用 TXVodPlayerController 直接播放即可。
    controller.startVodPlay(mediaInfo.playPath);

    4、横竖屏的使用

    横竖屏切换配置

    播放器组件横竖屏的切换,iOS 需要使用 Xcode 打开,打开项目配置,General 分页下的 Deployment 标签下,勾选上Landscape leftLandscaoe right。确保 iOS 设备能够支持横屏。
    如果希望自己的 App 其他页面稳定保持竖屏,不受横竖屏自动旋转影响,需要在自己项目下的入口处,配置竖屏。代码如下:
    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

    根据 sensor 配置自动全屏

    Android 端需要调用如下方法,来开启对 sensor 的监听。
    SuperPlayerPlugin.startVideoOrientationService();
    调用之后,在 Android 设备上,将会对 Android sensor 进行监听,会通过SuperPlayerPlugin.instance.onEventBroadcast对 flutter 侧发送旋转事件。播放器组件内部也会自动根据该事件旋转播放器。监听使用范例如下:
    SuperPlayerPlugin.instance.onExtraEventBroadcast.listen((event) {
    int eventCode = event["event"];
    if (eventCode == TXVodPlayEvent.EVENT_ORIENTATION_CHANGED ) {
    int orientation = event[TXVodPlayEvent.EXTRA_NAME_ORIENTATION];
    // do orientation
    }
    });

    Demo 体验

    更多功能和调试 Demo 体验,请 单击这里运行该 demo 的时候,需要在 demo_config 中设置自己的播放器 license,并在 Android 和 iOS 配置中,将包名和 bundleId 修改为自己签名的包名和 bundleId。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持