Coder Social home page Coder Social logo

flutter_tencentplayer_plus's Introduction

简介

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_plus")}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())
Prop Type Default Note
autoPlay bool true 是否自动播放
loop bool false 是否循环播放
headers Map<String, String> 请求头
cachePath String 缓存路径(边播放边下载)
progressInterval int 200 播放进度回调频率(毫秒)
startTime int 0 哪里开始播放(秒)
auth Map<String, dynamic> 云点播视频源appId&fileId

3.TencentPlayerValue (播放器回调)

Text("总时长:" + _controller.value.duration.toString())
Prop Type Note
initialized bool 是否初始化完成从而显示播放器
aspectRatio double 用来控制播放器宽高比
duration Duration 时长
position Duration 播放进度
playable Duration 缓冲进度
isPlaying bool 是否在播放
size Size 视频宽高
isLoading bool 是否在加载
netSpeed int 视频播放网速
rate double 播放速度
bitrateIndex int 视频清晰度

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

Prop Type Note
downloadStatus String "start"、"progress"、"stop"、"complete"、"error"
quanlity int 1: "FLU"、2: "SD"、3: "HD"、4: "FHD"、5: "2K"、6: "4K"
duration int
size int 文件大小
downloadSize int 已下载大小
progress int 已下载大小
playPath String 下载文件的绝对路径
isStop bool 是否暂停下载
url String 下载的视频链接
fileId String 下载的视频FileId
error String 下载的错误信息

5.更新内容

 1,升级android,IOS  LiteAVSDK 6.8.7969

6.参考

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

flutter_tencentplayer_plus's People

Contributors

fuyucn avatar yxwandroid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

flutter_tencentplayer_plus's Issues

flutter运行项目是报错,请看

报错信息如下:
duplicate symbol 'OBJC_IVAR$_FLTFrameUpdater._registry' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTFrameUpdater.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_CLASS$_FLTVideoPlayer' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTVideoPlayer.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_METACLASS$_FLTVideoPlayer' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTVideoPlayer.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_CLASS$_FLTFrameUpdater' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTFrameUpdater.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_METACLASS$_FLTFrameUpdater' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTFrameUpdater.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_IVAR$_FLTVideoPlayer._eventChannel' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTVideoPlayer.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_IVAR$_FLTVideoPlayer._eventSink' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTVideoPlayer.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_IVAR$_FLTVideoPlayer._disposed' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTVideoPlayer.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
duplicate symbol 'OBJC_IVAR$_FLTFrameUpdater._textureId' in:
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/flutter_tencentplayer_plus/libflutter_tencentplayer_plus.a(FLTFrameUpdater.o)
/Users/eleven/HandWork/tc-app/build/ios/Debug-iphonesimulator/video_player/libvideo_player.a(FLTVideoPlayerPlugin.o)
ld: 9 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

直播sdk

支持直播吗?为什么不对TXLivePlayer进行封装

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.