Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
T
tx_player_fork
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蒋俊
tx_player_fork
Commits
cc1ec30c
提交
cc1ec30c
authored
7月 31, 2025
作者:
kongdywang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix the issue of the first frame not being displayed in pre-playback state & Upgrade to 12.6.2
上级
62dd0f10
显示空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
108 行增加
和
25 行删除
+108
-25
CHANGELOG.md
Flutter/CHANGELOG.md
+13
-1
buildVersionOnMac.sh
Flutter/CI/buildVersionOnMac.sh
+1
-1
config.gradle
Flutter/android/config.gradle
+3
-2
FTXVodPlayer.java
...ain/java/com/tencent/vod/flutter/player/FTXVodPlayer.java
+3
-1
FTXEGLRender.java
...om/tencent/vod/flutter/player/render/gl/FTXEGLRender.java
+79
-13
FTXTextureContainer.java
...om/tencent/vod/flutter/ui/render/FTXTextureContainer.java
+2
-0
super_player.podspec
Flutter/ios/super_player.podspec
+2
-2
common_config.dart
Flutter/lib/Core/common/common_config.dart
+2
-1
pubspec.yaml
Flutter/pubspec.yaml
+1
-1
player_constants.dart
...idget/superplayer_widget/lib/common/player_constants.dart
+1
-1
superplayer_controller.dart
...Widget/superplayer_widget/lib/superplayer_controller.dart
+0
-1
pubspec.yaml
FlutterWidget/superplayer_widget/pubspec.yaml
+1
-1
没有找到文件。
Flutter/CHANGELOG.md
浏览文件 @
cc1ec30c
#### Version: 12.6.2 2025.07.31
##### Features:
-
set Android TXLiteAVSDK to 12.6.0.18891
-
set iOS TXLiteAVSDK to 12.6.18894
-
Fix the issue where the first frame is not displayed during pre-playback
-
Fix the issue where clearing the last frame is ineffective
-
fix known issue
#### Version: 12.6.1 2025.06.20
##### Features:
-
fix known issue
-
#### Version: 12.6.0 2025.06.20
...
...
Flutter/CI/buildVersionOnMac.sh
浏览文件 @
cc1ec30c
...
...
@@ -5,7 +5,7 @@ buildLog() {
}
inputVersion
=
$1
export
VERSION_NAME
=
"12.6.
1
"
export
VERSION_NAME
=
"12.6.
2
"
if
[
-n
"
$inputVersion
"
]
;
then
VERSION_NAME
=
$inputVersion
fi
...
...
Flutter/android/config.gradle
浏览文件 @
cc1ec30c
...
...
@@ -4,7 +4,7 @@ rootProject.ext {
supportSdkVersion
=
"26.0.1"
minSdkVersion
=
19
targetSdkVersion
=
28
playerVersion
=
"12.6.
1
"
playerVersion
=
"12.6.
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.6.0.1
7772
"
liteavSdk
=
"com.tencent.liteav:LiteAVSDK_Player:12.6.0.1
8891
"
}
\ No newline at end of file
Flutter/android/src/main/java/com/tencent/vod/flutter/player/FTXVodPlayer.java
浏览文件 @
cc1ec30c
...
...
@@ -307,6 +307,9 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
int
startPlayerVodPlay
(
String
url
)
{
if
(
mVodPlayer
!=
null
)
{
if
(
null
!=
mCurRenderView
)
{
mCurRenderView
.
setPlayer
(
this
);
}
return
mVodPlayer
.
startVodPlay
(
url
);
}
return
Uninitialized
;
...
...
@@ -331,7 +334,6 @@ public class FTXVodPlayer extends FTXVodPlayerRenderHost implements ITXVodPlayLi
if
(
isNeedClearLastImg
&&
null
!=
mCurRenderView
)
{
LiteavLog
.
i
(
TAG
,
"stopPlay target clear last img, player:"
+
hashCode
());
mCurRenderView
.
clearTexture
();
mCurRenderView
.
setPlayer
(
this
);
}
return
result
;
}
...
...
Flutter/android/src/main/java/com/tencent/vod/flutter/player/render/gl/FTXEGLRender.java
浏览文件 @
cc1ec30c
...
...
@@ -24,7 +24,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
private
static
final
long
FRAME_WAIT_TIME
=
5000
;
private
static
final
int
FPS_DEFAULT
=
30
;
// min refresh count for obtain new img
private
static
final
int
RE_DRAW_COUNT
=
5
0
;
private
static
final
int
RE_DRAW_COUNT
=
3
0
;
private
SurfaceTexture
mSurfaceTexture
;
private
FTXTextureRender
mTextureRender
;
...
...
@@ -45,7 +45,6 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
private
int
mHeight
;
private
boolean
mStart
=
false
;
private
final
Lock
mLock
=
new
ReentrantLock
();
private
final
Condition
mCondition
=
mLock
.
newCondition
();
private
long
mPreTime
=
0
;
private
long
mCurrentTime
;
private
long
mRenderMode
=
FTXPlayerConstants
.
FTXRenderMode
.
FULL_FILL_CONTAINER
;
...
...
@@ -56,6 +55,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
private
HandlerThread
mDrawHandlerThread
=
new
HandlerThread
(
TAG
);
private
Handler
mDrawHandler
=
null
;
private
boolean
isReleased
=
false
;
private
boolean
mIsFirstFrame
=
false
;
public
FTXEGLRender
(
int
width
,
int
height
)
{
this
(
width
,
height
,
FPS_DEFAULT
);
...
...
@@ -81,9 +81,14 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
mDrawHandler
.
post
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(!
mIsFirstFrame
)
{
mLock
.
lock
();
startDrawSurface
();
mLock
.
unlock
();
}
else
{
mIsFirstFrame
=
false
;
refreshRender
();
}
}
});
}
...
...
@@ -102,10 +107,10 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
}
mCurrentTime
=
System
.
currentTimeMillis
();
mSurfaceTexture
.
updateTexImage
();
drawImage
();
swapBuffers
();
mPreTime
=
mCurrentTime
;
mSurfaceTexture
.
updateTexImage
();
}
catch
(
Exception
e
)
{
LiteavLog
.
e
(
TAG
,
"startDrawSurface error: "
+
e
);
}
finally
{
...
...
@@ -120,6 +125,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
public
boolean
initOpengl
(
Surface
surface
,
boolean
needClearOld
)
{
LiteavLog
.
i
(
TAG
,
"initOpengl "
+
(
null
==
surface
?
"null"
:
""
));
isReleased
=
false
;
mIsFirstFrame
=
true
;
boolean
bRet
=
true
;
do
{
saveCurrentEglEnvironment
();
...
...
@@ -212,7 +218,7 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
EGL14
.
EGL_ALPHA_SIZE
,
8
,
EGL14
.
EGL_DEPTH_SIZE
,
8
,
EGL14
.
EGL_STENCIL_SIZE
,
8
,
EGL14
.
EGL_RENDERABLE_TYPE
,
4
,
EGL14
.
EGL_RENDERABLE_TYPE
,
EGL14
.
EGL_OPENGL_ES2_BIT
,
EGL14
.
EGL_NONE
};
...
...
@@ -285,30 +291,90 @@ public class FTXEGLRender implements SurfaceTexture.OnFrameAvailableListener {
}
private
void
saveCurrentEglEnvironment
()
{
mEGLSavedContext
=
EGL14
.
eglGetCurrentContext
();
try
{
// 获取当前环境
mEGLSavedDisplay
=
EGL14
.
eglGetCurrentDisplay
();
mEGLSavedContext
=
EGL14
.
eglGetCurrentContext
();
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"
);
}
}
catch
(
Exception
e
)
{
LiteavLog
.
e
(
TAG
,
"Save EGL error: "
+
e
);
resetSavedEnvironment
();
}
}
private
void
res
toreEgl
Environment
()
{
if
(
mEGLSavedDisplay
!=
EGL14
.
EGL_NO_DISPLAY
&&
mEGLSavedContext
!=
EGL14
.
EGL_NO_CONTEXT
&&
!
mEGLSavedContext
.
equals
(
mEGLContextEncoder
))
{
if
(!
EGL14
.
eglMakeCurrent
(
mEGLSavedDisplay
,
mEGLSaveDrawSurface
,
mEGLSaveReadSurface
,
mEGLSavedContext
))
{
LiteavLog
.
e
(
TAG
,
"restoreEglEnvironment eglMakeCurrent: error"
)
;
private
void
res
etSaved
Environment
()
{
mEGLSavedDisplay
=
EGL14
.
EGL_NO_DISPLAY
;
mEGLSaveDrawSurface
=
EGL14
.
EGL_NO_SURFACE
;
mEGLSaveReadSurface
=
EGL14
.
EGL_NO_SURFACE
;
mEGLSavedContext
=
EGL14
.
EGL_NO_CONTEXT
;
}
}
else
if
(
mEGLDisplay
!=
EGL14
.
EGL_NO_DISPLAY
)
{
if
(!
EGL14
.
eglMakeCurrent
(
mEGLDisplay
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_CONTEXT
))
{
LiteavLog
.
e
(
TAG
,
"eglMakeCurrent unbind: error"
);
private
void
restoreEglEnvironment
()
{
try
{
// 检查是否有效保存了EGL环境
if
(
mEGLSavedDisplay
!=
EGL14
.
EGL_NO_DISPLAY
&&
mEGLSavedContext
!=
EGL14
.
EGL_NO_CONTEXT
&&
mEGLSaveDrawSurface
!=
EGL14
.
EGL_NO_SURFACE
)
{
// 检查当前环境是否已被更改
EGLDisplay
currentDisplay
=
EGL14
.
eglGetCurrentDisplay
();
EGLContext
currentContext
=
EGL14
.
eglGetCurrentContext
();
EGLSurface
currentDrawSurface
=
EGL14
.
eglGetCurrentSurface
(
EGL14
.
EGL_DRAW
);
// 仅在必要时才恢复环境
if
(!
mEGLSavedDisplay
.
equals
(
currentDisplay
)
||
!
mEGLSavedContext
.
equals
(
currentContext
)
||
!
mEGLSaveDrawSurface
.
equals
(
currentDrawSurface
))
{
// 安全恢复操作
if
(!
EGL14
.
eglMakeCurrent
(
mEGLSavedDisplay
,
mEGLSaveDrawSurface
,
mEGLSaveReadSurface
,
mEGLSavedContext
))
{
int
error
=
EGL14
.
eglGetError
();
LiteavLog
.
e
(
TAG
,
"Restore failed: EGL error 0x"
+
Integer
.
toHexString
(
error
));
// 恢复失败时的安全回退
EGL14
.
eglMakeCurrent
(
mEGLSavedDisplay
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_CONTEXT
);
}
}
}
else
{
// 没有保存环境时的默认处理
LiteavLog
.
w
(
TAG
,
"No valid EGL state to restore"
);
// 确保解绑当前上下文
if
(
mEGLDisplay
!=
EGL14
.
EGL_NO_DISPLAY
)
{
EGL14
.
eglMakeCurrent
(
mEGLDisplay
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_SURFACE
,
EGL14
.
EGL_NO_CONTEXT
);
}
}
}
catch
(
Exception
e
)
{
LiteavLog
.
e
(
TAG
,
"Critical restore error: "
+
e
);
}
finally
{
// 重置保存的环境状态
mEGLSavedDisplay
=
EGL14
.
EGL_NO_DISPLAY
;
mEGLSaveDrawSurface
=
EGL14
.
EGL_NO_SURFACE
;
mEGLSaveReadSurface
=
EGL14
.
EGL_NO_SURFACE
;
mEGLSavedContext
=
EGL14
.
EGL_NO_CONTEXT
;
}
}
private
void
releaseEgl
()
{
if
(
mEGLDisplay
!=
EGL14
.
EGL_NO_DISPLAY
)
{
...
...
Flutter/android/src/main/java/com/tencent/vod/flutter/ui/render/FTXTextureContainer.java
浏览文件 @
cc1ec30c
...
...
@@ -28,6 +28,8 @@ public class FTXTextureContainer extends FrameLayout {
mTextureHolder
.
removeAllSurfaceListener
();
}
else
{
LiteavLog
.
i
(
TAG
,
"start add new carrier:"
+
carrier
+
",view:"
+
hashCode
());
// remove old
removeView
((
View
)
mTextureHolder
);
addView
((
View
)
carrier
);
}
mTextureHolder
=
carrier
;
...
...
Flutter/ios/super_player.podspec
浏览文件 @
cc1ec30c
...
...
@@ -4,7 +4,7 @@
#
Pod
::
Spec
.
new
do
|
s
|
s
.
name
=
'super_player'
s
.
version
=
'12.6.
1
'
s
.
version
=
'12.6.
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.6.188
66
'
s
.
dependency
'TXLiteAVSDK_Player'
,
'12.6.188
94
'
# s.dependency 'FTXPiPKit'
s
.
vendored_frameworks
=
[
'localdep/FTXPiPKit.xcframework'
...
...
Flutter/lib/Core/common/common_config.dart
浏览文件 @
cc1ec30c
...
...
@@ -2,5 +2,5 @@
part of
SuperPlayer
;
abstract
class
FPlayerPckInfo
{
static
const
String
PLAYER_VERSION
=
"12.6.
1
"
;
static
const
String
PLAYER_VERSION
=
"12.6.
2
"
;
}
\ No newline at end of file
Flutter/pubspec.yaml
浏览文件 @
cc1ec30c
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.6.
1
version
:
12.6.
2
homepage
:
https://github.com/LiteAVSDK/Player_Flutter
environment
:
...
...
FlutterWidget/superplayer_widget/lib/common/player_constants.dart
浏览文件 @
cc1ec30c
...
...
@@ -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.6.
1
"
;
static
const
String
PLAYER_WIDGET_VERSION
=
"12.6.
2
"
;
}
FlutterWidget/superplayer_widget/lib/superplayer_controller.dart
浏览文件 @
cc1ec30c
...
...
@@ -145,7 +145,6 @@ class SuperPlayerController {
}
videoDuration
=
await
_vodPlayerController
.
getDuration
();
currentDuration
=
await
_vodPlayerController
.
getCurrentPlaybackTime
();
List
<
TXTrackInfo
>
aaa
=
await
_vodPlayerController
.
getAudioTrackInfo
();
_onSelectTrackInfoWhenPrepare
();
break
;
case
TXVodPlayEvent
.
PLAY_EVT_PLAY_LOADING
:
// PLAY_EVT_PLAY_LOADING
...
...
FlutterWidget/superplayer_widget/pubspec.yaml
浏览文件 @
cc1ec30c
name
:
superplayer_widget
description
:
superplayer,base on vodplayer
version
:
12.6.
1
version
:
12.6.
2
environment
:
sdk
:
'
>=2.17.0
<4.0.0'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论