提交 b6a9e14f authored 作者: kongdywang's avatar kongdywang

fix brightness performance & add brightness change event

上级 1d584a00
......@@ -6,10 +6,11 @@ package com.tencent.vod.flutter;
* 通用事件码
*/
public class FTXEvent {
/*
音量变化
*/
public static final int EVENT_VOLUME_CHANGED = 1;
public static final int EVENT_VOLUME_CHANGED = 1;
/*
失去音量输出播放焦点
*/
......@@ -17,7 +18,11 @@ public class FTXEvent {
/*
获得音量输出焦点
*/
public static final int EVENT_AUDIO_FOCUS_PLAY = 3;
public static final int EVENT_AUDIO_FOCUS_PLAY = 3;
/*
亮度发生变化
*/
public static final int EVENT_BRIGHTNESS_CHANGED = 4;
// 视频预下载完成
public static final int EVENT_PREDOWNLOAD_ON_COMPLETE = 200;
......@@ -26,55 +31,55 @@ public class FTXEvent {
public static final int EVENT_PREDOWNLOAD_ON_ERROR = 201;
// 视频下载开始
public static final int EVENT_DOWNLOAD_START = 301;
public static final int EVENT_DOWNLOAD_START = 301;
// 视频下载进度
public static final int EVENT_DOWNLOAD_PROGRESS = 302;
// 视频下载停止
public static final int EVENT_DOWNLOAD_STOP = 303;
public static final int EVENT_DOWNLOAD_STOP = 303;
// 视频下载完成
public static final int EVENT_DOWNLOAD_FINISH = 304;
public static final int EVENT_DOWNLOAD_FINISH = 304;
// 视频下载错误
public static final int EVENT_DOWNLOAD_ERROR = 305;
public static final int EVENT_DOWNLOAD_ERROR = 305;
public static final int NO_ERROR = 0;
public static final int NO_ERROR = 0;
/**
* pip 事件
*/
public static final String PIP_CHANNEL_NAME = "cloud.tencent.com/playerPlugin/componentEvent";
public static final String PIP_CHANNEL_NAME = "cloud.tencent.com/playerPlugin/componentEvent";
// pip广播action
public static final String ACTION_PIP_PLAY_CONTROL = "vodPlayControl";
public static final String ACTION_PIP_PLAY_CONTROL = "vodPlayControl";
// pip 操作
public static final String EXTRA_NAME_PLAY_OP = "vodPlayOp";
public static final String EXTRA_NAME_PLAY_OP = "vodPlayOp";
// pip需要操作的播放器
public static final String EXTRA_NAME_PLAYER_ID = "vodPlayerId";
public static final String EXTRA_NAME_PLAYER_ID = "vodPlayerId";
// 进度回退
public static final int EXTRA_PIP_PLAY_BACK = 101;
public static final int EXTRA_PIP_PLAY_BACK = 101;
// 继续/暂停
public static final int EXTRA_PIP_PLAY_RESUME_OR_PAUSE = 102;
public static final int EXTRA_PIP_PLAY_RESUME_OR_PAUSE = 102;
// 进度前进
public static final int EXTRA_PIP_PLAY_FORWARD = 103;
public static final int EXTRA_PIP_PLAY_FORWARD = 103;
// pip 错误,android版本过低
public static final int ERROR_PIP_LOWER_VERSION = -101;
public static final int ERROR_PIP_LOWER_VERSION = -101;
// pip 错误,画中画权限关闭/设备不支持画中画
public static final int ERROR_PIP_DENIED_PERMISSION = -102;
public static final int ERROR_PIP_DENIED_PERMISSION = -102;
// pip 错误,当前界面已销毁
public static final int ERROR_PIP_ACTIVITY_DESTROYED = -103;
public static final int ERROR_PIP_ACTIVITY_DESTROYED = -103;
// 来自画中画容器的事件,广播键值
public static final String EVENT_PIP_ACTION = "com.tencent.flutter.pipevent";
public static final String EVENT_PIP_ACTION = "com.tencent.flutter.pipevent";
// 来自画中画容器的事件,事件键值
public static final String EVENT_PIP_MODE_NAME = "pipEventName";
public static final String EVENT_PIP_MODE_NAME = "pipEventName";
// 画中画当前播放时间
public static final String EVENT_PIP_PLAY_TIME = "playTime";
public static final String EVENT_PIP_PLAY_TIME = "playTime";
// 来自画中画容器的事件,已经进入画中画
public static final int EVENT_PIP_MODE_ALREADY_ENTER = 1;
public static final int EVENT_PIP_MODE_ALREADY_ENTER = 1;
// 来自画中画容器的事件,已经退出画中画
public static final int EVENT_PIP_MODE_ALREADY_EXIT = 2;
public static final int EVENT_PIP_MODE_ALREADY_EXIT = 2;
// 来自画中画容器的事件,开始进入画中画
public static final int EVENT_PIP_MODE_REQUEST_START = 3;
public static final int EVENT_PIP_MODE_REQUEST_START = 3;
// 来自画中画容器的事件,画中画UI发生变动,> android 31
public static final int EVENT_PIP_MODE_UI_STATE_CHANGED = 4;
public static final int EVENT_PIP_MODE_UI_STATE_CHANGED = 4;
// 画中画界面恢复,即点击放大按钮
public static final int EVENT_PIP_MODE_RESTORE_UI = 5;
public static final int EVENT_PIP_MODE_RESTORE_UI = 5;
// 启动画中画
public static final String PIP_ACTION_START = "com.tencent.flutter.startPip";
......
......@@ -2,10 +2,12 @@
#ifndef SUPERPLAYER_FLUTTER_IOS_CLASSES_FTXEVENT_H_
#define SUPERPLAYER_FLUTTER_IOS_CLASSES_FTXEVENT_H_
// 音频变化事件code
// 事件code
#define EVENT_VOLUME_CHANGED 1
#define EVENT_AUDIO_FOCUS_PAUSE 2
#define EVENT_AUDIO_FOCUS_PLAY 3
// 音量发生变化
#define EVENT_BRIGHTNESS_CHANGED 4
// 画中画事件code
#define EVENT_PIP_MODE_ALREADY_ENTER 1
......
......@@ -67,6 +67,10 @@ SuperPlayerPlugin* instance;
[_eventChannel setStreamHandler:self];
[_pipEventChannel setStreamHandler:self];
// brightness event
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(brightnessDidChange:) name:UIScreenBrightnessDidChangeNotification object:[UIScreen mainScreen]];
[audioManager registerVolumeChangeListener:self];
_FTXDownloadManager = [[FTXDownloadManager alloc] initWithRegistrar:registrar];
// orientation
......@@ -215,6 +219,14 @@ SuperPlayerPlugin* instance;
[audioManager destory:self];
}
/**
亮度变化
*/
- (void)brightnessDidChange:(NSNotification *)notification
{
[_eventSink success:[SuperPlayerPlugin getParamsWithEvent:EVENT_BRIGHTNESS_CHANGED withParams:@{}]];
}
#pragma mark - FlutterStreamHandler
- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments
eventSink:(FlutterEventSink)events
......
......@@ -98,10 +98,11 @@ abstract class TXVodPlayEvent {
static const EVT_IMAGESPRIT_IMAGEURL_LIST = "EVT_IMAGESPRIT_IMAGEURL_LIST"; // 雪碧图图片下载URL
static const EVT_DRM_TYPE = "EVT_DRM_TYPE"; // 加密类型
/// superplayer plugin volume event
/// superplayer plugin event
static const EVENT_VOLUME_CHANGED = 1; // 音量变化
static const EVENT_AUDIO_FOCUS_PAUSE = 2; // 失去音量输出播放焦点 only for android
static const EVENT_AUDIO_FOCUS_PLAY = 3; // 获得音量输出焦点 only for android
static const EVENT_BRIGHTNESS_CHANGED = 4; // 亮度发生变化
/// pip event
static const EVENT_PIP_MODE_ALREADY_ENTER = 1; // 已经进入画中画模式
static const EVENT_PIP_MODE_ALREADY_EXIT = 2; // 已经退出画中画模式
......
......@@ -3,6 +3,7 @@ part of demo_super_player_lib;
typedef BoolFunction = bool Function();
typedef DoubleFunction = double Function();
/// 播放器组件更多菜单
class SuperPlayerMoreView extends StatefulWidget {
final MoreViewController controller;
......@@ -21,30 +22,32 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
bool _isVodPlay = false;
String _currentRate = "";
Map<String, double> playRateStr = {"1.0x": 1.0, "1.25x": 1.25, "1.5x": 1.5, "2.0x": 2.0};
StreamSubscription? volumeSubscription;
StreamSubscription? eventSubscription;
@override
void initState() {
super.initState();
_isVodPlay = widget.controller.getIsVodPlay();
double playerPlayRate = widget.controller.getPlayRate();
for(String rateStr in playRateStr.keys) {
if(playerPlayRate == playRateStr[rateStr]) {
for (String rateStr in playRateStr.keys) {
if (playerPlayRate == playRateStr[rateStr]) {
_currentRate = rateStr;
break;
}
}
// if not found in playRateStr,set 1.0
if(_currentRate.isEmpty) {
if (_currentRate.isEmpty) {
_currentRate = playRateStr.keys.first;
}
_isOpenAccelerate = widget.controller.getAccelerateIsOpen();
// regist system volume changed event
volumeSubscription = SuperPlayerPlugin.instance.onEventBroadcast.listen((event) {
eventSubscription = SuperPlayerPlugin.instance.onEventBroadcast.listen((event) {
int code = event["event"];
if(mounted) {
if (mounted) {
if (code == TXVodPlayEvent.EVENT_VOLUME_CHANGED) {
refreshVolume();
} else if (code == TXVodPlayEvent.EVENT_BRIGHTNESS_CHANGED) {
refreshBrightness();
}
}
});
......@@ -56,6 +59,15 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
setState(() {});
}
void refreshBrightness() async {
double brightness = await SuperPlayerPlugin.getBrightness();
if (_currentBrightness != brightness) {
setState(() {
_currentBrightness = brightness;
});
}
}
void _initData() async {
double tempBrightness = await SuperPlayerPlugin.getBrightness();
if (tempBrightness == -1) {
......@@ -129,7 +141,9 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
child: Text(
rateStr,
textAlign: TextAlign.center,
style: rateStr == _currentRate ? ThemeResource.getCheckedLabelTextStyle() : ThemeResource.getCommonLabelTextStyle(),
style: rateStr == _currentRate
? ThemeResource.getCheckedLabelTextStyle()
: ThemeResource.getCommonLabelTextStyle(),
),
),
));
......@@ -154,7 +168,10 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
textAlign: TextAlign.center,
style: ThemeResource.getCommonLabelTextStyle(),
),
const Image(width: 30, height: 30, image: AssetImage("images/superplayer_ic_light_min.png", package:StringResource.PKG_NAME)),
const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_ic_light_min.png", package: StringResource.PKG_NAME)),
Expanded(
child: Theme(
data: ThemeResource.getCommonSliderTheme(),
......@@ -165,7 +182,10 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
onChanged: _onChangeBrightness,
)),
),
const Image(width: 30, height: 30, image: AssetImage("images/superplayer_ic_light_max.png", package:StringResource.PKG_NAME)),
const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_ic_light_max.png", package: StringResource.PKG_NAME)),
]),
);
}
......@@ -180,7 +200,10 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
textAlign: TextAlign.center,
style: ThemeResource.getCommonLabelTextStyle(),
),
const Image(width: 30, height: 30, image: AssetImage("images/superplayer_ic_volume_min.png", package:StringResource.PKG_NAME)),
const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_ic_volume_min.png", package: StringResource.PKG_NAME)),
Expanded(
child: Theme(
data: ThemeResource.getCommonSliderTheme(),
......@@ -191,7 +214,10 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
onChanged: _onChangeVolume,
)),
),
const Image(width: 30, height: 30, image: AssetImage("images/superplayer_ic_volume_max.png", package:StringResource.PKG_NAME)),
const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_ic_volume_max.png", package: StringResource.PKG_NAME)),
],
),
);
......@@ -250,7 +276,7 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
void updatePlayerType(SuperPlayerType playerType) {
bool isVodPlay = playerType == SuperPlayerType.VOD;
if(isVodPlay != _isVodPlay) {
if (isVodPlay != _isVodPlay) {
setState(() {
_isVodPlay = isVodPlay;
});
......@@ -260,7 +286,7 @@ class _SuperPlayerMoreViewState extends State<SuperPlayerMoreView> {
@override
void dispose() {
super.dispose();
volumeSubscription?.cancel();
eventSubscription?.cancel();
}
}
......@@ -271,5 +297,6 @@ class MoreViewController {
Function(double playRate) onChangedPlayRate;
BoolFunction getIsVodPlay;
MoreViewController(this.getAccelerateIsOpen, this.getPlayRate, this.siwtchAccelerate, this.onChangedPlayRate, this.getIsVodPlay);
MoreViewController(
this.getAccelerateIsOpen, this.getPlayRate, this.siwtchAccelerate, this.onChangedPlayRate, this.getIsVodPlay);
}
......@@ -27,9 +27,11 @@ class _VideoTitleViewState extends State<_VideoTitleView> {
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.only(left: 6, right: 6),
padding: const EdgeInsets.only(left: 10, right: 15),
decoration: const BoxDecoration(
image: DecorationImage(image: AssetImage("images/superplayer_top_shadow.png", package:StringResource.PKG_NAME), fit: BoxFit.fill)),
image: DecorationImage(
image: AssetImage("images/superplayer_top_shadow.png", package: StringResource.PKG_NAME),
fit: BoxFit.fill)),
child: Row(
children: [
InkWell(
......@@ -37,7 +39,7 @@ class _VideoTitleViewState extends State<_VideoTitleView> {
child: const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_btn_back_play.png", package:StringResource.PKG_NAME),
image: AssetImage("images/superplayer_btn_back_play.png", package: StringResource.PKG_NAME),
),
),
Text(
......@@ -50,9 +52,9 @@ class _VideoTitleViewState extends State<_VideoTitleView> {
child: InkWell(
onTap: _onTapMore,
child: const Image(
width: 30,
height: 30,
image: AssetImage("images/superplayer_ic_vod_more_normal.png", package:StringResource.PKG_NAME),
width: 40,
height: 40,
image: AssetImage("images/superplayer_ic_vod_more_normal.png", package: StringResource.PKG_NAME),
),
))
],
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论