简介

flutter_tencentplayer_plus 是基于腾讯云点播封装的flutter版的播放器插件 提供video_player 相似的api, 是flutter_tencentplayer的优化版本 ,flutter_tencentplayer 开源项目是我和大帅一起合作的一个开源项目,

支持功能

  1. 支持直播源
  2. 视频跳转
  3. 切换视频源
  4. 边下边播放
  5. 清晰度切换
  6. 设置播放速度

效果图

1.Setup

flutter_tencentplayer_plus: ${last_version}

or

flutter_tencentplayer_plus:
    git:
      url: https://github.com/yxwandroid/flutter_tencentplayer_plus.git

For Android

  1. project/android/build.gradle 添加依赖的aar:
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}

allprojects {
    repositories {
        google()
        jcenter()
        flatDir {
            dirs "${plugins.get("flutter_tencentplayer")}android/libs"
        }
    }
}
  1. AndroidManifest.xml 声明权限:

     <!--网络权限-->
    
     <uses-permission android:name="android.permission.INTERNET" />
    
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    
     <!--点播播放器悬浮窗权限-->
    
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    
     <!--存储-->
    
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

For Ios


//项目的info.plist文件上添加如下权限 
<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
  </dict>

2.Usage(TencentPlayer)

1.初始化播放器

提供 asset、network、filePath、fileId四种方式播放

TencentPlayerController _controller;

_MyAppState() {
    listener = () {
      if (!mounted) {
        return;
      }
      setState(() {});
    };
}

initState() {
    _controller = TencentPlayerController.network('http://file.jinxianyun.com/testhaha.mp4', playerConfig: PlayerConfig())
    //_controller = TencentPlayerController.asset('static/tencent1.mp4')
    //_controller = TencentPlayerController.file('/storage/emulated/0/test.mp4')
    //_controller = TencentPlayerController.network(null, playerConfig: {auth: {"appId": 1252463788, "fileId": '4564972819220421305'}})
    ..initialize().then((_) {
        setState(() {});
      });
    _controller.addListener(listener);
}

2.PlayerConfig (播放器配置参数 )

_controller = TencentPlayerController.network(url, playerConfig: PlayerConfig())

PropTypeDefaultNote
autoPlaybooltrue是否自动播放
loopboolfalse是否循环播放
headersMap<String, String>请求头
cachePathString缓存路径(边播放边下载)
progressIntervalint200播放进度回调频率(毫秒)
startTimeint0哪里开始播放(秒)
authMap<String, dynamic>云点播视频源appId&fileId

3.TencentPlayerValue (播放器回调)

Text("总时长:" + _controller.value.duration.toString())
PropTypeNote
initializedbool是否初始化完成从而显示播放器
aspectRatiodouble用来控制播放器宽高比
durationDuration时长
positionDuration播放进度
playableDuration缓冲进度
isPlayingbool是否在播放
sizeSize视频宽高
isLoadingbool是否在加载
netSpeedint视频播放网速
ratedouble播放速度
bitrateIndexint视频清晰度

4.Event (播放器事件)

a.跳转进度

_controller.seekTo(Duration(seconds: 5));

b.设置播放速度

_controller.setRate(1.5); // 1.0 ~ 2.0

c.切换播放源

controller?.removeListener(listener);
controller?.pause();
controller = TencentPlayerController.network(url, playerConfig: PlayerConfig(startTime: startTime ?? controller.value.position.inSeconds));
controller?.initialize().then((_) {
  if (mounted) setState(() {});
});
controller?.addListener(listener);

d.切换清晰度(实质就是切换播放源)

3.Usage(Download)

离线下载, 支持断点续传(这里只支持m3u8视频、fileId), 支持多文件同时下载

1.初始化下载器

DownloadController _downloadController;

_MyAppState() {
    downloadListener = () {
      if (!mounted) {
        return;
      }
      setState(() {});
    };
}

initState() {
    _downloadController = DownloadController('/storage/emulated/0/tencentdownload', appId: 1252463788);
    _downloadController.addListener(downloadListener);
}

2.Event (下载事件)

a. 下载

_downloadController.dowload("4564972819220421305", quanlity: 2);
// _downloadController.dowload("http://1253131631.vod2.myqcloud.com/26f327f9vodgzp1253131631/f4bdff799031868222924043041/playlist.m3u8");

b. 暂停下载

_downloadController.pauseDownload("4564972819220421305");
// _downloadController.stopDownload("http://1253131631.vod2.myqcloud.com/26f327f9vodgzp1253131631/f4bdff799031868222924043041/playlist.m3u8");

b. 取消下载

_downloadController.cancelDownload("4564972819220421305");
// _downloadController.cancelDownload("http://1253131631.vod2.myqcloud.com/26f327f9vodgzp1253131631/f4bdff799031868222924043041/playlist.m3u8");

3.DownloadValue (下载信息回调)

因为支持多文件同时下载,回调以Map<String, DownloadValue>返回,key为url/fileId

PropTypeNote
downloadStatusString"start"、"progress"、"stop"、"complete"、"error"
quanlityint1: "FLU"、2: "SD"、3: "HD"、4: "FHD"、5: "2K"、6: "4K"
durationint
sizeint文件大小
downloadSizeint已下载大小
progressint已下载大小
playPathString下载文件的绝对路径
isStopbool是否暂停下载
urlString下载的视频链接
fileIdString下载的视频FileId
errorString下载的错误信息

4.Example

5.更新内容

 1,升级android,IOS  LiteAVSDK 6.8.7969

6.参考

腾讯云点播android版本 腾讯云点播ios版本 flutter_tencentplayer

Libraries

download_controller
download_value
flutter_tencentplayer_plus
player_config
tencent_player
tencent_player_controller
tentcent_player_value