提交 3b11cac7 authored 作者: dokieyang's avatar dokieyang 提交者: kongdywang

1. Update to 12.0.1

2. The player component adds the logic of network image placeholder when there is no network. 3. Fix the issue where textures are not refreshed in some cases 4. Fix the issue where updating Picture-in-Picture produces errors when Picture-in-Picture ends in some cases 5. Modify the plugin callback Flutter side message architecture 6. During SDK initialization, all modules are changed to lazy loading 7. The demo and player components no longer need to force set the language; if not set, it defaults to English
上级 472c37bd
......@@ -199,8 +199,8 @@ Professional 分支:Android & iOS 端集成TXLiteAVSDK_Professional lastest版
- set Android TXLiteAVSDK_Player to 11.9.0.14445,tag:release_player_v11.9.0
- set iOS TXLiteAVSDK_Player to 11.9.15963, tag:release_player_v11.9.0
- Android compatible with high version Gradle
- The location of the superPlayerWidget has changed, integrating superPlayer will no longer include the source code of the superPlayerWidget
- Android compatible with high version Gradle
- The location of the superPlayerWidget has changed, integrating superPlayer will no longer include the source code of the superPlayerWidget
- Android picture-in-picture feature logic optimization, compatible with more models
#### Version: 11.9.1 2024.06.05
......@@ -211,7 +211,7 @@ Professional 分支:Android & iOS 端集成TXLiteAVSDK_Professional lastest版
- TXVodPlayerController has introduced a new setStringOption interface for configuring extensions.
- The Flutter side's operation of the player can now affect the UI updates for playing and pausing in the picture-in-picture window.
- Fixed potential memory leak issues.
- Optimized the logic of superPlayer Widget
- Optimized the logic of superPlayer Widget
- Fixed other known issues.
#### Version: 12.0.0 2024.08.21
......@@ -225,4 +225,16 @@ Professional 分支:Android & iOS 端集成TXLiteAVSDK_Professional lastest版
- New interfaces have been added to live streaming: enableReceiveSeiMessage, showDebugView, setProperty, getSupportedBitrate, and setCacheParams.
- When playing live streaming, there is no longer a need to pass the playType parameter, which has been deprecated.
- The live streaming and on-demand demo pages have added logic to wait for the license to load successfully before playing.
- Other known issues have been fixed.
\ No newline at end of file
- Other known issues have been fixed.
#### Version: 12.0.1 2024.09.14
##### Features:
- set Android TXLiteAVSDK_Player to 12.0.0.14689,tag:release_player_v12.0.1
- set iOS TXLiteAVSDK_Player to 12.0.16301, tag:release_player_v12.0.1
- Fix the issue where textures are not refreshed in some cases
- Fix the issue where updating Picture-in-Picture produces errors when Picture-in-Picture ends in some cases
- Modify the plugin callback Flutter side message architecture
- During SDK initialization, all modules are changed to lazy loading
- The demo and player components no longer need to force set the language; if not set, it defaults to English
\ No newline at end of file
......@@ -5,7 +5,7 @@ buildLog() {
}
inputVersion=$1
export VERSION_NAME="12.0.0"
export VERSION_NAME="12.0.1"
if [ -n "$inputVersion" ]; then
VERSION_NAME=$inputVersion
fi
......
rootProject.ext {
compileSdkVersion = 33
compileSdkVersion = 31
buildToolsVersion = "28.0.3"
supportSdkVersion = "26.0.1"
minSdkVersion = 19
targetSdkVersion = 28
playerVersion = '12.0.0'
playerVersion = '12.0.1'
compat = "androidx.appcompat:appcompat:1.6.1"
/**
......@@ -14,5 +14,5 @@ rootProject.ext {
Professional SDK: liteavSdk="com.tencent.liteav:LiteAVSDK_Professional:latest.release"
If you want to specify the SDK version(eg 11.7.0.13946), use: liteavSdk="com.tencent.liteav:LiteAVSDK_Player:11.7.0.13946"
*/
liteavSdk="com.tencent.liteav:LiteAVSDK_Player:12.0.0.14681"
liteavSdk="com.tencent.liteav:LiteAVSDK_Player:12.0.0.14689"
}
\ No newline at end of file
......@@ -42,26 +42,19 @@ import java.util.Locale;
import java.util.Map;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.EventChannel;
import io.flutter.view.TextureRegistry;
/**
* live player processor
*/
public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerApi {
public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerApi, FtxMessages.VoidResult {
private static final String TAG = "FTXLivePlayer";
private final FlutterPlugin.FlutterPluginBinding mFlutterPluginBinding;
private final EventChannel mEventChannel;
private final EventChannel mNetChannel;
private SurfaceTexture mSurfaceTexture;
private Surface mSurface;
private final FTXPlayerEventSink mEventSink = new FTXPlayerEventSink();
private final FTXPlayerEventSink mNetStatusSink = new FTXPlayerEventSink();
private V2TXLivePlayer mLivePlayer;
private static final int Uninitialized = -101;
private TextureRegistry.SurfaceTextureEntry mSurfaceTextureEntry;
......@@ -72,6 +65,7 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
private final FTXV2LiveObserver mObserver;
private int mLastPlayEvent = -1;
private boolean mIsPaused = false;
private FtxMessages.TXLivePlayerFlutterAPI mLiveFlutterApi;
private final FTXPIPManager.PipCallback pipCallback = new FTXPIPManager.PipCallback() {
@Override
......@@ -123,6 +117,10 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
super();
mFlutterPluginBinding = flutterPluginBinding;
mPipManager = pipManager;
FtxMessages.TXFlutterLivePlayerApi.setUp(flutterPluginBinding.getBinaryMessenger(),
String.valueOf(getPlayerId()), this);
mLiveFlutterApi = new FtxMessages.TXLivePlayerFlutterAPI(flutterPluginBinding.getBinaryMessenger(),
String.valueOf(getPlayerId()));
TXFlutterEngineHolder.getInstance().addAppLifeListener(mAppLifeListener);
mSurfaceTextureEntry = mFlutterPluginBinding.getTextureRegistry().createSurfaceTexture();
......@@ -130,34 +128,6 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
mSurface = new Surface(mSurfaceTexture);
mRender = new FTXV2LiveRender(mSurfaceTexture);
mObserver = new FTXV2LiveObserver(this);
mEventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(),
"cloud.tencent.com/txliveplayer/event/" + super.getPlayerId());
mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
mEventSink.setEventSinkProxy(eventSink);
}
@Override
public void onCancel(Object o) {
mEventSink.setEventSinkProxy(null);
}
});
mNetChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(),
"cloud.tencent.com/txliveplayer/net/" + super.getPlayerId());
mNetChannel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
mNetStatusSink.setEventSinkProxy(eventSink);
}
@Override
public void onCancel(Object o) {
mNetStatusSink.setEventSinkProxy(null);
}
});
}
@Override
......@@ -188,8 +158,6 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
}
TXFlutterEngineHolder.getInstance().removeAppLifeListener(mAppLifeListener);
mEventChannel.setStreamHandler(null);
mNetChannel.setStreamHandler(null);
}
protected long init(boolean onlyAudio) {
......@@ -486,25 +454,33 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
private void notifyPlayerEvent(int evtId, Bundle bundle) {
mLastPlayEvent = evtId;
mEventSink.success(TXCommonUtil.getParams(evtId, bundle));
mLiveFlutterApi.onPlayerEvent(TXCommonUtil.getParams(evtId, bundle), this);
LiteavLog.e(TAG, "onLivePlayEvent:" + evtId
+ "," + bundle.getString(TXLiveConstants.EVT_DESCRIPTION));
}
private static class FTXV2LiveObserver extends V2TXLivePlayerObserver {
@Override
public void success() {
}
@Override
public void error(@NonNull Throwable error) {
LiteavLog.e(TAG, "callback message error:" + error);
}
private static class FTXV2LiveObserver extends V2TXLivePlayerObserver implements FtxMessages.VoidResult {
private static final String TAG = "FTXV2LiveObserver";
private final FTXV2LiveRender mRender;
private final FTXPlayerEventSink mEventSink;
private final FTXPlayerEventSink mNetStatusSink;
private final FTXLivePlayer mLivePlayer;
private final FtxMessages.TXLivePlayerFlutterAPI mLiveFlutterApi;
public FTXV2LiveObserver(FTXLivePlayer livePlayer) {
mLivePlayer = livePlayer;
mRender = livePlayer.mRender;
mEventSink = livePlayer.mEventSink;
mNetStatusSink = livePlayer.mNetStatusSink;
mLiveFlutterApi = livePlayer.mLiveFlutterApi;
}
@Override
......@@ -615,7 +591,7 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
public void onStatisticsUpdate(V2TXLivePlayer player, V2TXLiveDef.V2TXLivePlayerStatistics statistics) {
super.onStatisticsUpdate(player, statistics);
Bundle bundle = FTXV2LiveTools.buildNetBundle(statistics);
mNetStatusSink.success(TXCommonUtil.getParams(0, bundle));
mLiveFlutterApi.onNetEvent(TXCommonUtil.getParams(0, bundle), this);
}
@Override
......@@ -666,5 +642,15 @@ public class FTXLivePlayer extends FTXBasePlayer implements TXFlutterLivePlayerA
public void onLocalRecordComplete(V2TXLivePlayer player, int code, String storagePath) {
super.onLocalRecordComplete(player, code, storagePath);
}
@Override
public void success() {
}
@Override
public void error(@NonNull Throwable error) {
LiteavLog.e(TAG, "callback message error:" + error);
}
}
}
......@@ -26,6 +26,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import com.tencent.liteav.base.util.LiteavLog;
import com.tencent.vod.flutter.messages.FtxMessages;
import com.tencent.vod.flutter.model.TXPipResult;
import com.tencent.vod.flutter.model.TXPlayerHolder;
import com.tencent.vod.flutter.tools.TXCommonUtil;
......@@ -41,14 +42,13 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.EventChannel;
/**
* Picture-in-picture management.
*
* 画中画管理
*/
public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber, FtxMessages.VoidResult {
private static final String TAG = "FTXPIPManager";
......@@ -56,9 +56,8 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
private final Map<Integer, PipCallback> pipCallbacks = new HashMap<>();
private final FlutterPlugin.FlutterPluginBinding mFlutterPluginBinding;
private final FlutterPlugin.FlutterAssets mFlutterAssets;
private final EventChannel mPipEventChannel;
private final FTXPlayerEventSink mPipEventSink = new FTXPlayerEventSink();
private boolean mIsInPipMode = false;
private final FtxMessages.TXPipFlutterAPI mPipApi;
/**
* Picture-in-picture management.
......@@ -67,29 +66,11 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
* @param flutterPluginBinding FlutterPluginBinding.
*
*/
public FTXPIPManager(@NonNull EventChannel pipEventChannel,
FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
this.mPipEventChannel = pipEventChannel;
public FTXPIPManager(FlutterPlugin.FlutterPluginBinding flutterPluginBinding) {
this.mFlutterAssets = flutterPluginBinding.getFlutterAssets();
this.mFlutterPluginBinding = flutterPluginBinding;
mPipApi = new FtxMessages.TXPipFlutterAPI(flutterPluginBinding.getBinaryMessenger());
registerActivityListener();
initPipEventChannel();
}
private void initPipEventChannel() {
if (null != mPipEventChannel) {
mPipEventChannel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object arguments, EventChannel.EventSink events) {
mPipEventSink.setEventSinkProxy(events);
}
@Override
public void onCancel(Object arguments) {
mPipEventSink.setEventSinkProxy(null);
}
});
}
}
/**
......@@ -132,7 +113,7 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
pipResult = FlutterPipImplActivity.startPip(TXFlutterEngineHolder.getInstance().getCurActivity(),
params, playerHolder);
if (pipResult == FTXEvent.NO_ERROR) {
mPipEventSink.success(TXCommonUtil.getParams(FTXEvent.EVENT_PIP_MODE_REQUEST_START, null));
mPipApi.onPipEvent(TXCommonUtil.getParams(FTXEvent.EVENT_PIP_MODE_REQUEST_START, null), this);
}
mIsInPipMode = true;
}
......@@ -285,7 +266,7 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
}
mIsInPipMode = false;
}
mPipEventSink.success(TXCommonUtil.getParams(pipEventId, callbackData));
mPipApi.onPipEvent(TXCommonUtil.getParams(pipEventId, callbackData), this);
} else if (TextUtils.equals(eventType, FTXEvent.EVENT_PIP_PLAYER_EVENT_ACTION)) {
Bundle params = (Bundle) data;
int playerId = params.getInt(FTXEvent.EXTRA_NAME_PLAYER_ID, -1);
......@@ -295,6 +276,15 @@ public class FTXPIPManager implements TXSimpleEventBus.EventSubscriber {
}
}
@Override
public void success() {
}
@Override
public void error(@NonNull Throwable error) {
LiteavLog.e(TAG, "callback message error:" + error);
}
public static class PipParams implements Parcelable {
......
// Copyright (c) 2022 Tencent. All rights reserved.
package com.tencent.vod.flutter;
import java.util.LinkedList;
import java.util.Queue;
import io.flutter.plugin.common.EventChannel;
/**
* handle flutter event
*/
public class FTXPlayerEventSink implements EventChannel.EventSink {
private EventChannel.EventSink eventSink;
private Queue<Object> eventQueue = new LinkedList();
private boolean isEnd = false;
public void setEventSinkProxy(EventChannel.EventSink es) {
this.eventSink = es;
consume();
}
private void enqueue(Object event) {
if (isEnd) {
return;
}
eventQueue.offer(event);
}
private void consume() {
if (eventSink == null) {
return;
}
while (!eventQueue.isEmpty()) {
Object event = eventQueue.poll();
if (event instanceof EndEvent) {
eventSink.endOfStream();
} else if (event instanceof ErrorEvent) {
ErrorEvent errorEvent = (ErrorEvent) event;
eventSink.error(errorEvent.code, errorEvent.message, errorEvent.details);
} else {
eventSink.success(event);
}
}
}
private static class EndEvent {
}
private static class ErrorEvent {
String code;
String message;
Object details;
ErrorEvent(String code, String message, Object details) {
this.code = code;
this.message = message;
this.details = details;
}
}
@Override
public void success(Object event) {
enqueue(event);
consume();
}
@Override
public void error(String errorCode, String errorMessage, Object errorDetails) {
enqueue(new ErrorEvent(errorCode, errorMessage, errorDetails));
consume();
}
@Override
public void endOfStream() {
enqueue(new EndEvent());
consume();
isEnd = true;
}
}
......@@ -52,27 +52,21 @@ import java.util.Map;
import java.util.Objects;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.EventChannel;
import io.flutter.view.TextureRegistry;
/**
* vodPlayer plugin processor
*/
public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, FtxMessages.TXFlutterVodPlayerApi {
public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener,
FtxMessages.TXFlutterVodPlayerApi, FtxMessages.VoidResult {
private static final String TAG = "FTXVodPlayer";
private FlutterPlugin.FlutterPluginBinding mFlutterPluginBinding;
private final EventChannel mEventChannel;
private final EventChannel mNetChannel;
private SurfaceTexture mSurfaceTexture;
private Surface mSurface;
private final FTXPlayerEventSink mEventSink = new FTXPlayerEventSink();
private final FTXPlayerEventSink mNetStatusSink = new FTXPlayerEventSink();
private TXVodPlayer mVodPlayer;
private TXImageSprite mTxImageSprite;
......@@ -82,6 +76,7 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
private boolean mHardwareDecodeFail = false;
private final FTXPIPManager mPipManager;
private boolean mNeedPipResume = false;
private final FtxMessages.TXVodPlayerFlutterAPI mVodFlutterApi;
private final FTXPIPManager.PipCallback mPipCallback = new FTXPIPManager.PipCallback() {
@Override
public void onPipResult(TXPipResult result) {
......@@ -132,35 +127,11 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
super();
mPipManager = pipManager;
mFlutterPluginBinding = flutterPluginBinding;
FtxMessages.TXFlutterVodPlayerApi.setUp(flutterPluginBinding.getBinaryMessenger(),
String.valueOf(getPlayerId()), this);
mVodFlutterApi = new FtxMessages.TXVodPlayerFlutterAPI(flutterPluginBinding.getBinaryMessenger(),
String.valueOf(getPlayerId()));
TXFlutterEngineHolder.getInstance().addAppLifeListener(mAppLifeListener);
mEventChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), "cloud.tencent"
+ ".com/txvodplayer/event/" + super.getPlayerId());
mEventChannel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
mEventSink.setEventSinkProxy(eventSink);
}
@Override
public void onCancel(Object o) {
mEventSink.setEventSinkProxy(null);
}
});
mNetChannel = new EventChannel(flutterPluginBinding.getBinaryMessenger(), "cloud.tencent"
+ ".com/txvodplayer/net/" + super.getPlayerId());
mNetChannel.setStreamHandler(new EventChannel.StreamHandler() {
@Override
public void onListen(Object o, EventChannel.EventSink eventSink) {
mNetStatusSink.setEventSinkProxy(eventSink);
}
@Override
public void onCancel(Object o) {
mNetStatusSink.setEventSinkProxy(null);
}
});
}
......@@ -186,8 +157,6 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
mSurface = null;
}
mEventChannel.setStreamHandler(null);
mNetChannel.setStreamHandler(null);
TXFlutterEngineHolder.getInstance().removeAppLifeListener(mAppLifeListener);
releaseTXImageSprite();
if (null != mPipManager) {
......@@ -214,7 +183,7 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
bundle.putInt("videoTop", videoTop);
bundle.putInt("videoRight", videoRight);
bundle.putInt("videoBottom", videoBottom);
mEventSink.success(TXCommonUtil.getParams(event, bundle));
mVodFlutterApi.onPlayerEvent(TXCommonUtil.getParams(event, bundle), this);
return;
}
}
......@@ -232,7 +201,7 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
if (event != TXVodConstants.VOD_PLAY_EVT_PLAY_PROGRESS) {
LiteavLog.e(TAG, "onPlayEvent:" + event + "," + bundle.getString(TXLiveConstants.EVT_DESCRIPTION));
}
mEventSink.success(TXCommonUtil.getParams(event, bundle));
mVodFlutterApi.onPlayerEvent(TXCommonUtil.getParams(event, bundle), this);
}
// The default size of the surface is 1x1. When hardware decoding fails or software decoding is used,
......@@ -249,7 +218,7 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
@Override
public void onNetStatus(TXVodPlayer txVodPlayer, Bundle bundle) {
mNetStatusSink.success(TXCommonUtil.getParams(0, bundle));
mVodFlutterApi.onNetEvent(TXCommonUtil.getParams(0, bundle), this);
}
private byte[] getPlayerImageSprite(final Double time) {
......@@ -278,7 +247,11 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
mVodPlayer = new TXVodPlayer(mFlutterPluginBinding.getApplicationContext());
mVodPlayer.setVodListener(this);
// prevent config null exception
mVodPlayer.setConfig(new TXVodPlayConfig());
TXVodPlayConfig playConfig = new TXVodPlayConfig();
Map<String, Object> map = new HashMap<>();
map.put("450", 0);
playConfig.setExtInfo(map);
mVodPlayer.setConfig(playConfig);
mVodPlayer.setVodSubtitleDataListener(new ITXVodPlayListener.ITXVodSubtitleDataListener() {
@Override
public void onSubtitleData(TXVodDef.TXVodSubtitleData sub) {
......@@ -287,7 +260,8 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
bundle.putLong(FTXEvent.EXTRA_SUBTITLE_START_POSITION_MS, sub.startPositionMs);
bundle.putLong(FTXEvent.EXTRA_SUBTITLE_DURATION_MS, sub.durationMs);
bundle.putLong(FTXEvent.EXTRA_SUBTITLE_TRACK_INDEX, sub.trackIndex);
mEventSink.success(TXCommonUtil.getParams(FTXEvent.EVENT_SUBTITLE_DATA, bundle));
mVodFlutterApi.onPlayerEvent(TXCommonUtil.getParams(FTXEvent.EVENT_SUBTITLE_DATA, bundle),
FTXVodPlayer.this);
}
});
setPlayer(onlyAudio);
......@@ -858,4 +832,14 @@ public class FTXVodPlayer extends FTXBasePlayer implements ITXVodPlayListener, F
}
}
}
@Override
public void success() {
}
@Override
public void error(@NonNull Throwable error) {
LiteavLog.e(TAG, "callback message error:" + error);
}
}
// Copyright (c) 2022 Tencent. All rights reserved.
package com.tencent.vod.flutter.messages;
import androidx.annotation.NonNull;
import com.tencent.vod.flutter.FTXBasePlayer;
import com.tencent.vod.flutter.messages.FtxMessages.BoolMsg;
import com.tencent.vod.flutter.messages.FtxMessages.BoolPlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.FTXLivePlayConfigPlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.IntMsg;
import com.tencent.vod.flutter.messages.FtxMessages.IntPlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.PipParamsPlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.PlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.StringPlayerMsg;
import com.tencent.vod.flutter.messages.FtxMessages.TXFlutterLivePlayerApi;
@SuppressWarnings("ConstantConditions")
public class FTXLivePlayerDispatcher implements FtxMessages.TXFlutterLivePlayerApi {
final ITXPlayersBridge bridge;
public FTXLivePlayerDispatcher(@NonNull ITXPlayersBridge dataBridge) {
this.bridge = dataBridge;
}
TXFlutterLivePlayerApi getPlayer(Long playerID) {
if (null != playerID) {
FTXBasePlayer ftxBasePlayer = bridge.getPlayers().get(playerID.intValue());
if (ftxBasePlayer instanceof FtxMessages.TXFlutterLivePlayerApi) {
return (TXFlutterLivePlayerApi) ftxBasePlayer;
}
}
return null;
}
@NonNull
@Override
public IntMsg initialize(@NonNull BoolPlayerMsg onlyAudio) {
TXFlutterLivePlayerApi api = getPlayer(onlyAudio.getPlayerId());
if (null != api) {
return api.initialize(onlyAudio);
}
return null;
}
@NonNull
@Override
public BoolMsg startLivePlay(@NonNull StringPlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.startLivePlay(playerMsg);
}
return null;
}
@NonNull
@Override
public BoolMsg stop(@NonNull BoolPlayerMsg isNeedClear) {
TXFlutterLivePlayerApi api = getPlayer(isNeedClear.getPlayerId());
if (null != api) {
return api.stop(isNeedClear);
}
return null;
}
@NonNull
@Override
public BoolMsg isPlaying(@NonNull PlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.isPlaying(playerMsg);
}
return null;
}
@Override
public void pause(@NonNull PlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
api.pause(playerMsg);
}
}
@Override
public void resume(@NonNull PlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
api.resume(playerMsg);
}
}
@Override
public void setLiveMode(@NonNull IntPlayerMsg mode) {
TXFlutterLivePlayerApi api = getPlayer(mode.getPlayerId());
if (null != api) {
api.setLiveMode(mode);
}
}
@Override
public void setVolume(@NonNull IntPlayerMsg volume) {
TXFlutterLivePlayerApi api = getPlayer(volume.getPlayerId());
if (null != api) {
api.setVolume(volume);
}
}
@Override
public void setMute(@NonNull BoolPlayerMsg mute) {
TXFlutterLivePlayerApi api = getPlayer(mute.getPlayerId());
if (null != api) {
api.setMute(mute);
}
}
@NonNull
@Override
public IntMsg switchStream(@NonNull StringPlayerMsg url) {
TXFlutterLivePlayerApi api = getPlayer(url.getPlayerId());
if (null != api) {
return api.switchStream(url);
}
return null;
}
@Override
public void setAppID(@NonNull StringPlayerMsg appId) {
TXFlutterLivePlayerApi api = getPlayer(appId.getPlayerId());
if (null != api) {
api.setAppID(appId);
}
}
@Override
public void setConfig(@NonNull FTXLivePlayConfigPlayerMsg config) {
TXFlutterLivePlayerApi api = getPlayer(config.getPlayerId());
if (null != api) {
api.setConfig(config);
}
}
@NonNull
@Override
public BoolMsg enableHardwareDecode(@NonNull BoolPlayerMsg enable) {
TXFlutterLivePlayerApi api = getPlayer(enable.getPlayerId());
if (null != api) {
return api.enableHardwareDecode(enable);
}
return null;
}
@NonNull
@Override
public IntMsg enterPictureInPictureMode(@NonNull PipParamsPlayerMsg pipParamsMsg) {
TXFlutterLivePlayerApi api = getPlayer(pipParamsMsg.getPlayerId());
if (null != api) {
return api.enterPictureInPictureMode(pipParamsMsg);
}
return null;
}
@Override
public void exitPictureInPictureMode(@NonNull PlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
api.exitPictureInPictureMode(playerMsg);
}
}
@NonNull
@Override
public Long enableReceiveSeiMessage(@NonNull PlayerMsg playerMsg,
@NonNull Boolean isEnabled, @NonNull Long payloadType) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.enableReceiveSeiMessage(playerMsg, isEnabled, payloadType);
}
return null;
}
@Override
public void showDebugView(@NonNull PlayerMsg playerMsg, @NonNull Boolean isShow) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
api.showDebugView(playerMsg, isShow);
}
}
@NonNull
@Override
public Long setProperty(@NonNull PlayerMsg playerMsg, @NonNull String key, @NonNull Object value) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.setProperty(playerMsg, key, value);
}
return null;
}
@NonNull
@Override
public FtxMessages.ListMsg getSupportedBitrate(@NonNull PlayerMsg playerMsg) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.getSupportedBitrate(playerMsg);
}
return null;
}
@NonNull
@Override
public Long setCacheParams(@NonNull PlayerMsg playerMsg, @NonNull Double minTime, @NonNull Double maxTime) {
TXFlutterLivePlayerApi api = getPlayer(playerMsg.getPlayerId());
if (null != api) {
return api.setCacheParams(playerMsg, minTime, maxTime);
}
return null;
}
@NonNull
@Override
public Long enablePictureInPicture(@NonNull BoolPlayerMsg msg) {
TXFlutterLivePlayerApi api = getPlayer(msg.getPlayerId());
if (null != api) {
return api.enablePictureInPicture(msg);
}
return null;
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论