Skip to content

Commit bad4fb1

Browse files
author
kongdywang
committed
1. vod support autoRotate
2. update to 12.7.2 3. fix known issue
1 parent 16c92d6 commit bad4fb1

File tree

16 files changed

+108
-20
lines changed

16 files changed

+108
-20
lines changed

Flutter/CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11

2+
#### Version: 12.7.2 2025.08.29
3+
4+
##### Features:
5+
6+
- VOD supports the autoRotate configuration.
7+
- set Android TXLiteAVSDK to 12.7.0.19083
8+
- set iOS TXLiteAVSDK to 12.7.19324
9+
- Fix known issue
10+
11+
212
#### Version: 12.7.1 2025.08.13
313

414
##### Features:

Flutter/CI/buildVersionOnMac.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildLog() {
55
}
66

77
inputVersion=$1
8-
export VERSION_NAME="12.7.1"
8+
export VERSION_NAME="12.7.2"
99
if [ -n "$inputVersion" ]; then
1010
VERSION_NAME=$inputVersion
1111
fi

Flutter/android/config.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ rootProject.ext {
44
supportSdkVersion = "26.0.1"
55
minSdkVersion = 19
66
targetSdkVersion = 28
7-
playerVersion = "12.7.1"
7+
playerVersion = "12.7.2"
88
compat = "androidx.appcompat:appcompat:1.6.1"
99

1010
/**
@@ -14,5 +14,5 @@ rootProject.ext {
1414
Professional SDK: liteavSdk="com.tencent.liteav:LiteAVSDK_Professional:latest.release"
1515
If you want to specify the SDK version(eg 11.7.0.13946), use: liteavSdk="com.tencent.liteav:LiteAVSDK_Player:11.7.0.13946"
1616
*/
17-
liteavSdk="com.tencent.liteav:LiteAVSDK_Player:12.7.0.19072"
17+
liteavSdk="com.tencent.liteav:LiteAVSDK_Player:12.7.0.19083"
1818
}

Flutter/android/src/main/java/com/tencent/vod/flutter/player/FTXVodPlayer.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
8484
private final FTXRenderViewFactory mRenderViewFactory;
8585
private final Handler mUIHandler = new Handler(Looper.getMainLooper());
8686
private long mCurrentRenderMode = FTXPlayerConstants.FTXRenderMode.FULL_FILL_CONTAINER;
87+
private float mCurrentRotation = 0;
88+
private TXVodPlayConfig mCurConfig = new TXVodPlayConfig();
8789
private final FTXPIPManager.PipCallback mPipCallback = new FTXPIPManager.PipCallback() {
8890
@Override
8991
public void onPipResult(TXPipResult result) {
@@ -152,6 +154,7 @@ public void destroy() {
152154
mVodPlayer.setPlayerView((TXCloudVideoView) null);
153155
mVodPlayer = null;
154156
}
157+
mCurrentRotation = 0;
155158
mCurRenderView = null;
156159
TXFlutterEngineHolder.getInstance().removeAppLifeListener(mAppLifeListener);
157160
releaseTXImageSprite();
@@ -190,6 +193,11 @@ public void run() {
190193
return;
191194
}
192195
}
196+
long rotation = bundle.getLong(TXVodConstants.EVT_KEY_VIDEO_ROTATION);
197+
if (mCurConfig.isAutoRotate()) {
198+
notifyTextureRotation(rotation);
199+
}
200+
mCurrentRotation = rotation;
193201
break;
194202
case TXLiveConstants.PLAY_WARNING_HW_ACCELERATION_FAIL:
195203
mHardwareDecodeFail = true;
@@ -273,6 +281,7 @@ protected long init(boolean onlyAudio) {
273281
TXVodPlayConfig playConfig = new TXVodPlayConfig();
274282
FTXVersionAdapter.enableCustomSubtitle(playConfig, 0);
275283
FTXVersionAdapter.enableDrmLevel3(playConfig, true);
284+
mCurConfig = playConfig;
276285
mVodPlayer.setConfig(playConfig);
277286
mVodPlayer.setVodSubtitleDataListener(new ITXVodPlayListener.ITXVodSubtitleDataListener() {
278287
@Override
@@ -310,6 +319,7 @@ int startPlayerVodPlay(String url) {
310319
if (null != mCurRenderView) {
311320
mCurRenderView.setPlayer(this);
312321
}
322+
mCurrentRotation = 0;
313323
return mVodPlayer.startVodPlay(url);
314324
}
315325
return Uninitialized;
@@ -434,6 +444,7 @@ void setPlayConfig(FTXVodPlayConfigPlayerMsg config) {
434444
TXVodPlayConfig playConfig = FTXTransformation.transformToVodConfig(config);
435445
FTXVersionAdapter.enableCustomSubtitle(playConfig, 0);
436446
FTXVersionAdapter.enableDrmLevel3(playConfig, true);
447+
mCurConfig = playConfig;
437448
mVodPlayer.setConfig(playConfig);
438449
}
439450
}
@@ -896,6 +907,11 @@ public long getPlayerRenderMode() {
896907
return mCurrentRenderMode;
897908
}
898909

910+
@Override
911+
public float getRotation() {
912+
return mCurrentRotation;
913+
}
914+
899915
@Override
900916
public int getVideoWidth() {
901917
if (null != mVodPlayer) {

Flutter/android/src/main/java/com/tencent/vod/flutter/player/render/FTXPlayerRenderSurfaceHost.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public interface FTXPlayerRenderSurfaceHost {
1414

1515
long getPlayerRenderMode();
1616

17+
float getRotation();
18+
1719
int getVideoWidth();
1820

1921
int getVideoHeight();

Flutter/android/src/main/java/com/tencent/vod/flutter/player/render/FTXVodPlayerRenderHost.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ protected void notifyTextureResolution(int videoWidth, int videoHeight) {
7878
}
7979
}
8080

81+
protected void notifyTextureRotation(float rotation) {
82+
if (null != mRenderCarrier) {
83+
mRenderCarrier.notifyTextureRotation(rotation);
84+
}
85+
}
86+
8187
@Override
8288
public FTXRenderCarrier getCurCarrier() {
8389
return mRenderCarrier;

Flutter/android/src/main/java/com/tencent/vod/flutter/player/render/gl/FTXEGLRender.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
4343

4444
private int mWidth;
4545
private int mHeight;
46+
private float mRotation = 0;
4647
private boolean mStart = false;
4748
private final Lock mLock = new ReentrantLock();
4849
private long mPreTime = 0;
@@ -165,6 +166,7 @@ private void setup(boolean needClearOld) {
165166
mTextureRender = new FTXTextureRender(mViewWidth, mViewHeight);
166167
mTextureRender.surfaceCreated();
167168
mTextureRender.updateSizeAndRenderMode(mWidth, mHeight, mRenderMode);
169+
mTextureRender.setRotationAngle(mRotation);
168170
LiteavLog.d(TAG, "textureID=" + mTextureRender.getTextureID());
169171
if (null == mInputSurface || needClearOld) {
170172
mSurfaceTexture = new SurfaceTexture(mTextureRender.getTextureID());
@@ -186,6 +188,15 @@ public void updateSizeAndRenderMode(int width, int height, long renderMode) {
186188
}
187189
}
188190

191+
public void updateRotation(float rotation) {
192+
mRotation = rotation;
193+
if (null != mTextureRender) {
194+
mTextureRender.setRotationAngle(rotation);
195+
} else {
196+
LiteavLog.w(TAG, "mTextureRender is null");
197+
}
198+
}
199+
189200
public void setViewPortSize(int width, int height) {
190201
mViewWidth = width;
191202
mViewHeight = height;
@@ -303,10 +314,10 @@ private void saveCurrentEglEnvironment() {
303314
mEGLSaveDrawSurface = EGL14.eglGetCurrentSurface(EGL14.EGL_DRAW);
304315
mEGLSaveReadSurface = EGL14.eglGetCurrentSurface(EGL14.EGL_READ);
305316

306-
// 检查有效性
307-
if (mEGLSavedDisplay == EGL14.EGL_NO_DISPLAY || mEGLSavedContext == EGL14.EGL_NO_CONTEXT) {
308-
LiteavLog.w(TAG, "Saving invalid EGL state");
309-
}
317+
// // 检查有效性
318+
// if (mEGLSavedDisplay == EGL14.EGL_NO_DISPLAY || mEGLSavedContext == EGL14.EGL_NO_CONTEXT) {
319+
// LiteavLog.w(TAG, "Saving invalid EGL state");
320+
// }
310321
} catch (Exception e) {
311322
LiteavLog.e(TAG, "Save EGL error: " + e);
312323
resetSavedEnvironment();
@@ -357,10 +368,6 @@ private void restoreEglEnvironment() {
357368
}
358369
}
359370
} else {
360-
// 没有保存环境时的默认处理
361-
LiteavLog.w(TAG, "No valid EGL state to restore");
362-
363-
// 确保解绑当前上下文
364371
if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) {
365372
EGL14.eglMakeCurrent(
366373
mEGLDisplay,
@@ -467,11 +474,17 @@ public synchronized void stopRender(boolean isCompleteRelease) {
467474
LiteavLog.i(TAG, "stopRender");
468475
// unLock render thread
469476
mStart = false;
477+
mRotation = 0;
478+
if (null != mTextureRender) {
479+
mTextureRender.setRotationAngle(0);
480+
}
470481
saveCurrentEglEnvironment();
471482
final boolean contextCompare = mEGLContextEncoder.equals(mEGLSavedContext);
472483
eglUninstall(isCompleteRelease);
473-
mDrawHandlerThread.quitSafely();
474-
mDrawHandler = null;
484+
if (null != mDrawHandlerThread) {
485+
mDrawHandlerThread.quitSafely();
486+
mDrawHandler = null;
487+
}
475488

476489
if (!contextCompare) {
477490
LiteavLog.d(TAG, "restoreEglEnvironment");

Flutter/android/src/main/java/com/tencent/vod/flutter/player/render/gl/FTXTextureRender.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public class FTXTextureRender {
5555
"}";
5656

5757
private final float[] projectionMatrix = new float[16];
58+
private final float[] rotationMatrix = new float[16];
5859

5960
private int mVideoFragmentProgram;
6061
private int muMVPMatrixHandle;
@@ -68,6 +69,8 @@ public class FTXTextureRender {
6869
private int mPortWidth;
6970
private int mPortHeight;
7071

72+
private float rotationAngle = 90;
73+
7174
public FTXTextureRender(int width, int height) {
7275
mPortWidth = width;
7376
mPortHeight = height;
@@ -172,6 +175,10 @@ public void setViewPortSize(int width, int height) {
172175
updateSizeAndRenderMode(mVideoWidth, mVideoHeight, mRenderMode);
173176
}
174177

178+
public void setRotationAngle(float angle) {
179+
rotationAngle = angle;
180+
}
181+
175182
public void cleanDrawCache() {
176183
GLES30.glViewport(0, 0, mPortWidth, mPortHeight);
177184
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
@@ -187,6 +194,10 @@ public void drawFrame() {
187194

188195
GLES30.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, projectionMatrix, 0);
189196

197+
// OpenGL rotates counterclockwise, here it needs to be modified to rotate clockwise
198+
Matrix.setRotateM(rotationMatrix, 0, rotationAngle, 0, 0, -1);
199+
GLES30.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, rotationMatrix, 0);
200+
190201
GLES30.glActiveTexture(GLES30.GL_TEXTURE0);
191202
GLES30.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureID[0]);
192203
GLES30.glUniform1i(maTextureHandle, 0);

Flutter/android/src/main/java/com/tencent/vod/flutter/ui/render/FTXRenderCarrier.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public interface FTXRenderCarrier {
1212

1313
void notifyVideoResolutionChanged(int videoWidth, int videoHeight);
1414

15+
void notifyTextureRotation(float rotation);
16+
1517
void updateRenderMode(long renderMode);
1618

1719
void requestLayoutSizeByContainerSize(int viewWidth, int viewHeight);

Flutter/android/src/main/java/com/tencent/vod/flutter/ui/render/FTXSurfaceView.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class FTXSurfaceView extends SurfaceView implements FTXRenderCarrier {
3030
private int mVideoHeight = 0;
3131
private int mViewWidth = 0;
3232
private int mViewHeight = 0;
33+
private float mRotation = 0;
3334
private final Object mLayoutLock = new Object();
3435
private FTXEGLRender mRender;
3536
private final SurfaceViewInnerListener mSurfaceListenerDelegate = new SurfaceViewInnerListener(this);
@@ -69,6 +70,16 @@ public void notifyVideoResolutionChanged(int videoWidth, int videoHeight) {
6970
}
7071
}
7172

73+
@Override
74+
public void notifyTextureRotation(float rotation) {
75+
if (mRotation != rotation) {
76+
mRotation = rotation;
77+
if (null != mRender) {
78+
mRender.updateRotation(rotation);
79+
}
80+
}
81+
}
82+
7283
@Override
7384
protected void onDetachedFromWindow() {
7485
super.onDetachedFromWindow();
@@ -121,9 +132,11 @@ public void bindPlayer(FTXPlayerRenderSurfaceHost surfaceHost) {
121132
mRenderMode = surfaceHost.getPlayerRenderMode();
122133
mVideoWidth = surfaceHost.getVideoWidth();
123134
mVideoHeight = surfaceHost.getVideoHeight();
135+
mRotation = surfaceHost.getRotation();
124136
updateVideoRenderMode();
137+
notifyTextureRotation(mRotation);
125138
LiteavLog.i(TAG, "updateSize, mVideoWidth:" + mVideoWidth + ",mVideoHeight:"
126-
+ mVideoHeight + ",renderMode:" + mRenderMode);
139+
+ mVideoHeight + ",renderMode:" + mRenderMode + ",mRotation:" + mRotation);
127140
}
128141
}
129142

0 commit comments

Comments
 (0)