User Generated Short Video(UGSV) 엔터프라이즈 버전은 단종되었으며 뷰티 필터 모듈은 Tencent Effect(TE) SDK를 구성하기 위해 분리되었습니다. Tencent Effect SDK는 보다 자연스러운 뷰티 효과, 보다 강력한 기능 및 보다 유연한 통합 방법을 제공합니다. 본문에서는 UGSV 엔터프라이즈 버전에서 Tencent Effect SDK로 마이그레이션하는 방법을 설명합니다.
.aar
파일을 SDK의 libs에 있는 .aar
파일로 교체합니다.../src/main/assets
에 있는 모든 파일을 SDK의 assets/
에 있는 파일로 교체합니다. SDK 패키지의 MotionRes 폴더에 파일이 있으면 ../src/main/assets
디렉터리에도 복사합니다.../src/main/jniLibs
에 있는 모든 .so 파일을 SDK 패키지의 jniLibs에 있는 .so 파일로 교체합니다. (arm64-v8a 및 armeabi-v7a에 대한 .so 파일을 얻으려면 jinLibs 폴더에 있는 ZIP 파일의 압축을 해제해야 합니다.)SDK를 Enterprise 버전에서 Professional 버전으로 업그레이드하십시오.
implementation 'com.tencent.liteav:LiteAVSDK_Enterprise:latest.release'
implementation 'com.tencent.liteav:LiteAVSDK_Professional:latest.release'
다음과 같이 프로젝트의 application에서 oncreate 메소드를 호출합니다.
XMagicImpl.init(this);
XMagicImpl.checkAuth(null);
XMagicImpl 클래스의 콘텐츠를 획득한 TE SDK *License URL 및 Key로 교체합니다.
UGSV 녹화 페이지 TCVideoRecordActivity.java를 예로 듭니다.
TCVideoRecordActivity.java
클래스에 다음 변수 코드를 추가합니다.
private XMagicImpl mXMagic;
private int isPause = 0;//0 일시 중지되지 않음, 1일시 중지됨, 2일시 중지 중, 3종료 예정
TCVideoRecordActivity.java
클래스의 onCreate 메소드 뒤에 다음 코드를 추가합니다.
TXUGCRecord instance = TXUGCRecord.getInstance(this);
instance.setVideoProcessListener(new TXUGCRecord.VideoCustomProcessListener() {
@Override
public int onTextureCustomProcess(int textureId, int width, int height) {
if (isPause == 0 && mXMagic != null) {
return mXMagic.process(textureId, width, height);
}
return 0;
}
@Override
public void onDetectFacePoints(float[] floats) {
}
@Override
public void onTextureDestroyed() {
if (Looper.getMainLooper() != Looper.myLooper()) { //메인 스레드가 아님
if (isPause == 1) {
isPause = 2;
if (mXMagic != null) {
mXMagic.onDestroy();
}
initXMagic();
isPause = 0;
} else if (isPause == 3) {
if (mXMagic != null) {
mXMagic.onDestroy();
}
}
}
}
});
XMagicImpl.checkAuth((errorCode, msg) -> {
if (errorCode == TELicenseCheck.ERROR_OK) {
loadXmagicRes();
} else {
TXCLog.e("TAG", "인증 실패, 인증 url 및 key를 확인하십시오" + errorCode + " " + msg);
}
});
onStop 메소드에 다음 코드를 추가합니다.
isPause = 1;
if (mXMagic != null) {
mXMagic.onPause();
}
onDestroy 메소드에 다음 코드를 추가합니다.
isPause = 3;
XmagicPanelDataManager.getInstance().clearData();
onActivityResult 메소드 시작 부분에 다음 코드를 추가합니다.
if (mXMagic != null) {
mXMagic.onActivityResult(requestCode, resultCode, data);
}
이 클래스의 끝에 다음 두 메소드를 추가합니다.
private void loadXmagicRes() {
if (XMagicImpl.isLoadedRes) {
XmagicResParser.parseRes(getApplicationContext());
initXMagic();
return;
}
new Thread(() -> {
XmagicResParser.setResPath(new File(getFilesDir(), "xmagic").getAbsolutePath());
XmagicResParser.copyRes(getApplicationContext());
XmagicResParser.parseRes(getApplicationContext());
XMagicImpl.isLoadedRes = true;
new Handler(Looper.getMainLooper()).post(() -> {
initXMagic();
});
}).start();
}
/**
mXMagic = <span class="hljs-keyword">new</span> XMagicImpl(<span class="hljs-keyword">this</span>, mUGCKitVideoRecord.getBeautyPanel());
}else{ mXMagic.onResume();
}ugckit 모듈의 build.gradle 파일에서 beautysettingkit 모듈에 대한 종속성을 삭제하고 프로젝트를 컴파일하여 오류를 보고하는 코드를 주석 처리합니다.
문제 해결에 도움이 되었나요?