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

1. vod support autoRotate

2. update to 12.7.2 3. fix known issue
上级 16c92d6d
#### Version: 12.7.2 2025.08.29
##### Features:
- VOD supports the autoRotate configuration.
- set Android TXLiteAVSDK to 12.7.0.19083
- set iOS TXLiteAVSDK to 12.7.19324
- Fix known issue
#### Version: 12.7.1 2025.08.13
##### Features:
......
......@@ -5,7 +5,7 @@ buildLog() {
}
inputVersion=$1
export VERSION_NAME="12.7.1"
export VERSION_NAME="12.7.2"
if [ -n "$inputVersion" ]; then
VERSION_NAME=$inputVersion
fi
......
......@@ -4,7 +4,7 @@ rootProject.ext {
supportSdkVersion = "26.0.1"
minSdkVersion = 19
targetSdkVersion = 28
playerVersion = "12.7.1"
playerVersion = "12.7.2"
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.7.0.19072"
liteavSdk="com.tencent.liteav:LiteAVSDK_Player:12.7.0.19083"
}
\ No newline at end of file
......@@ -84,6 +84,8 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
private final FTXRenderViewFactory mRenderViewFactory;
private final Handler mUIHandler = new Handler(Looper.getMainLooper());
private long mCurrentRenderMode = FTXPlayerConstants.FTXRenderMode.FULL_FILL_CONTAINER;
private float mCurrentRotation = 0;
private TXVodPlayConfig mCurConfig = new TXVodPlayConfig();
private final FTXPIPManager.PipCallback mPipCallback = new FTXPIPManager.PipCallback() {
@Override
public void onPipResult(TXPipResult result) {
......@@ -152,6 +154,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
mVodPlayer.setPlayerView((TXCloudVideoView) null);
mVodPlayer = null;
}
mCurrentRotation = 0;
mCurRenderView = null;
TXFlutterEngineHolder.getInstance().removeAppLifeListener(mAppLifeListener);
releaseTXImageSprite();
......@@ -190,6 +193,11 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
return;
}
}
long rotation = bundle.getLong(TXVodConstants.EVT_KEY_VIDEO_ROTATION);
if (mCurConfig.isAutoRotate()) {
notifyTextureRotation(rotation);
}
mCurrentRotation = rotation;
break;
case TXLiveConstants.PLAY_WARNING_HW_ACCELERATION_FAIL:
mHardwareDecodeFail = true;
......@@ -273,6 +281,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
TXVodPlayConfig playConfig = new TXVodPlayConfig();
FTXVersionAdapter.enableCustomSubtitle(playConfig, 0);
FTXVersionAdapter.enableDrmLevel3(playConfig, true);
mCurConfig = playConfig;
mVodPlayer.setConfig(playConfig);
mVodPlayer.setVodSubtitleDataListener(new ITXVodPlayListener.ITXVodSubtitleDataListener() {
@Override
......@@ -310,6 +319,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
if (null != mCurRenderView) {
mCurRenderView.setPlayer(this);
}
mCurrentRotation = 0;
return mVodPlayer.startVodPlay(url);
}
return Uninitialized;
......@@ -434,6 +444,7 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
TXVodPlayConfig playConfig = FTXTransformation.transformToVodConfig(config);
FTXVersionAdapter.enableCustomSubtitle(playConfig, 0);
FTXVersionAdapter.enableDrmLevel3(playConfig, true);
mCurConfig = playConfig;
mVodPlayer.setConfig(playConfig);
}
}
......@@ -896,6 +907,11 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
return mCurrentRenderMode;
}
@Override
public float getRotation() {
return mCurrentRotation;
}
@Override
public int getVideoWidth() {
if (null != mVodPlayer) {
......
......@@ -14,6 +14,8 @@ public interface FTXPlayerRenderSurfaceHost {
long getPlayerRenderMode();
float getRotation();
int getVideoWidth();
int getVideoHeight();
......
......@@ -78,6 +78,12 @@ public abstract class FTXVodPlayerRenderHost extends FTXBasePlayer implements FT
}
}
protected void notifyTextureRotation(float rotation) {
if (null != mRenderCarrier) {
mRenderCarrier.notifyTextureRotation(rotation);
}
}
@Override
public FTXRenderCarrier getCurCarrier() {
return mRenderCarrier;
......
......@@ -43,6 +43,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
private int mWidth;
private int mHeight;
private float mRotation = 0;
private boolean mStart = false;
private final Lock mLock = new ReentrantLock();
private long mPreTime = 0;
......@@ -165,6 +166,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
mTextureRender = new FTXTextureRender(mViewWidth, mViewHeight);
mTextureRender.surfaceCreated();
mTextureRender.updateSizeAndRenderMode(mWidth, mHeight, mRenderMode);
mTextureRender.setRotationAngle(mRotation);
LiteavLog.d(TAG, "textureID=" + mTextureRender.getTextureID());
if (null == mInputSurface || needClearOld) {
mSurfaceTexture = new SurfaceTexture(mTextureRender.getTextureID());
......@@ -186,6 +188,15 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
}
}
public void updateRotation(float rotation) {
mRotation = rotation;
if (null != mTextureRender) {
mTextureRender.setRotationAngle(rotation);
} else {
LiteavLog.w(TAG, "mTextureRender is null");
}
}
public void setViewPortSize(int width, int height) {
mViewWidth = width;
mViewHeight = height;
......@@ -303,10 +314,10 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
mEGLSaveDrawSurface = EGL14.eglGetCurrentSurface(EGL14.EGL_DRAW);
mEGLSaveReadSurface = EGL14.eglGetCurrentSurface(EGL14.EGL_READ);
// 检查有效性
if (mEGLSavedDisplay == EGL14.EGL_NO_DISPLAY || mEGLSavedContext == EGL14.EGL_NO_CONTEXT) {
LiteavLog.w(TAG, "Saving invalid EGL state");
}
// // 检查有效性
// if (mEGLSavedDisplay == EGL14.EGL_NO_DISPLAY || mEGLSavedContext == EGL14.EGL_NO_CONTEXT) {
// LiteavLog.w(TAG, "Saving invalid EGL state");
// }
} catch (Exception e) {
LiteavLog.e(TAG, "Save EGL error: " + e);
resetSavedEnvironment();
......@@ -357,10 +368,6 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
}
}
} else {
// 没有保存环境时的默认处理
LiteavLog.w(TAG, "No valid EGL state to restore");
// 确保解绑当前上下文
if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) {
EGL14.eglMakeCurrent(
mEGLDisplay,
......@@ -467,11 +474,17 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
LiteavLog.i(TAG, "stopRender");
// unLock render thread
mStart = false;
mRotation = 0;
if (null != mTextureRender) {
mTextureRender.setRotationAngle(0);
}
saveCurrentEglEnvironment();
final boolean contextCompare = mEGLContextEncoder.equals(mEGLSavedContext);
eglUninstall(isCompleteRelease);
mDrawHandlerThread.quitSafely();
mDrawHandler = null;
if (null != mDrawHandlerThread) {
mDrawHandlerThread.quitSafely();
mDrawHandler = null;
}
if (!contextCompare) {
LiteavLog.d(TAG, "restoreEglEnvironment");
......
......@@ -55,6 +55,7 @@ public class FTXTextureRender {
"}";
private final float[] projectionMatrix = new float[16];
private final float[] rotationMatrix = new float[16];
private int mVideoFragmentProgram;
private int muMVPMatrixHandle;
......@@ -68,6 +69,8 @@ public class FTXTextureRender {
private int mPortWidth;
private int mPortHeight;
private float rotationAngle = 90;
public FTXTextureRender(int width, int height) {
mPortWidth = width;
mPortHeight = height;
......@@ -172,6 +175,10 @@ public class FTXTextureRender {
updateSizeAndRenderMode(mVideoWidth, mVideoHeight, mRenderMode);
}
public void setRotationAngle(float angle) {
rotationAngle = angle;
}
public void cleanDrawCache() {
GLES30.glViewport(0, 0, mPortWidth, mPortHeight);
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
......@@ -187,6 +194,10 @@ public class FTXTextureRender {
GLES30.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, projectionMatrix, 0);
// OpenGL rotates counterclockwise, here it needs to be modified to rotate clockwise
Matrix.setRotateM(rotationMatrix, 0, rotationAngle, 0, 0, -1);
GLES30.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, rotationMatrix, 0);
GLES30.glActiveTexture(GLES30.GL_TEXTURE0);
GLES30.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureID[0]);
GLES30.glUniform1i(maTextureHandle, 0);
......
......@@ -12,6 +12,8 @@ public interface FTXRenderCarrier {
void notifyVideoResolutionChanged(int videoWidth, int videoHeight);
void notifyTextureRotation(float rotation);
void updateRenderMode(long renderMode);
void requestLayoutSizeByContainerSize(int viewWidth, int viewHeight);
......
......@@ -30,6 +30,7 @@ public class FTXSurfaceView extends SurfaceView implements FTXRenderCarrier {
private int mVideoHeight = 0;
private int mViewWidth = 0;
private int mViewHeight = 0;
private float mRotation = 0;
private final Object mLayoutLock = new Object();
private FTXEGLRender mRender;
private final SurfaceViewInnerListener mSurfaceListenerDelegate = new SurfaceViewInnerListener(this);
......@@ -69,6 +70,16 @@ public class FTXSurfaceView extends SurfaceView implements FTXRenderCarrier {
}
}
@Override
public void notifyTextureRotation(float rotation) {
if (mRotation != rotation) {
mRotation = rotation;
if (null != mRender) {
mRender.updateRotation(rotation);
}
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
......@@ -121,9 +132,11 @@ public class FTXSurfaceView extends SurfaceView implements FTXRenderCarrier {
mRenderMode = surfaceHost.getPlayerRenderMode();
mVideoWidth = surfaceHost.getVideoWidth();
mVideoHeight = surfaceHost.getVideoHeight();
mRotation = surfaceHost.getRotation();
updateVideoRenderMode();
notifyTextureRotation(mRotation);
LiteavLog.i(TAG, "updateSize, mVideoWidth:" + mVideoWidth + ",mVideoHeight:"
+ mVideoHeight + ",renderMode:" + mRenderMode);
+ mVideoHeight + ",renderMode:" + mRenderMode + ",mRotation:" + mRotation);
}
}
......
......@@ -31,6 +31,7 @@ public class FTXTextureView extends TextureView implements FTXRenderCarrier {
private int mVideoHeight = 0;
private int mViewWidth = 0;
private int mViewHeight = 0;
private float mRotation = 0;
private FTXEGLRender mRender;
private final Object mLayoutLock = new Object();
private final TextureViewInnerListener mSurfaceListenerDelegate = new TextureViewInnerListener(this);
......@@ -70,6 +71,16 @@ public class FTXTextureView extends TextureView implements FTXRenderCarrier {
}
}
@Override
public void notifyTextureRotation(float rotation) {
if (mRotation != rotation) {
mRotation = rotation;
if (null != mRender) {
mRender.updateRotation(rotation);
}
}
}
@Override
public void updateRenderMode(long renderMode) {
if (mRenderMode != renderMode) {
......@@ -111,7 +122,11 @@ public class FTXTextureView extends TextureView implements FTXRenderCarrier {
mRenderMode = surfaceHost.getPlayerRenderMode();
mVideoWidth = surfaceHost.getVideoWidth();
mVideoHeight = surfaceHost.getVideoHeight();
mRotation = surfaceHost.getRotation();
updateVideoRenderMode();
notifyTextureRotation(mRotation);
LiteavLog.i(TAG, "updateSize, mVideoWidth:" + mVideoWidth + ",mVideoHeight:"
+ mVideoHeight + ",renderMode:" + mRenderMode + ",mRotation:" + mRotation);
}
}
......
......@@ -4,7 +4,7 @@
#
Pod::Spec.new do |s|
s.name = 'super_player'
s.version = '12.7.1'
s.version = '12.7.2'
s.summary = 'The super_player Flutter plugin is one of the sub-product SDKs of the audio/video terminal SDK (Tencent Cloud Video on Demand).'
s.description = <<-DESC
player plugin.
......@@ -26,7 +26,7 @@ player plugin.
# Player_Premium SDK: s.dependency 'TXLiteAVSDK_Player_Premium'
# Professional SDK: s.dependency 'TXLiteAVSDK_Professional'
# If you want to specify the SDK version(eg 11.6.15041), use: s.dependency 'TXLiteAVSDK_Player','11.6.15041'
s.dependency 'TXLiteAVSDK_Player','12.7.19272'
s.dependency 'TXLiteAVSDK_Player','12.7.19324'
# s.dependency 'FTXPiPKit'
s.vendored_frameworks = [
'localdep/FTXPiPKit.xcframework'
......
......@@ -2,5 +2,5 @@
part of SuperPlayer;
abstract class FPlayerPckInfo {
static const String PLAYER_VERSION = "12.7.1";
static const String PLAYER_VERSION = "12.7.2";
}
\ No newline at end of file
name: super_player
description: The super_player Flutter plugin is one of the sub-product SDKs of the audio/video terminal SDK (Tencent Cloud Video on Demand).
version: 12.7.1
version: 12.7.2
homepage: https://github.com/LiteAVSDK/Player_Flutter
environment:
......
......@@ -3,5 +3,5 @@ part of demo_super_player_lib;
class PlayerConstants {
static const PKG_NAME = "superplayer_widget";
static const String PLAYER_WIDGET_VERSION = "12.7.1";
static const String PLAYER_WIDGET_VERSION = "12.7.2";
}
name: superplayer_widget
description: superplayer,base on vodplayer
version: 12.7.1
version: 12.7.2
environment:
sdk: '>=2.17.0 <4.0.0'
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论