.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 파일의 압축을 풀어야 합니다).configurations {all*.exclude group: 'com.google.code.gson'}
//인증 시 주의사항 및 오류 코드 내용은 https://www.tencentcloud.com/document/product/1143/45385#step-1.-authenticate을 참고하십시오XMagicImpl.checkAuth((errorCode, msg) -> {if (errorCode == TELicenseCheck.ERROR_OK) {showLoadResourceView();} else {TXCLog.e(TAG, "인증 실패, 인증 url 및 key를 확인하십시오" + errorCode + " " + msg);}});
private void showLoadResourceView() {if (XmagicLoadAssetsView.isCopyedRes) {XmagicResParser.parseRes(getApplicationContext());initXMagic();} else {XmagicLoadAssetsView loadAssetsView = new XmagicLoadAssetsView(this);loadAssetsView.setOnAssetsLoadFinishListener(() -> {XmagicResParser.parseRes(getApplicationContext());initXMagic();});}}
String userId = String.valueOf(new Random().nextInt(10000));String pushUrl = AddressUtils.generatePushUrl(streamId, userId, 0);mLivePusher = new V2TXLivePusherImpl(this, V2TXLiveDef.V2TXLiveMode.TXLiveMode_RTC);mLivePusher.enableCustomVideoProcess(true, V2TXLivePixelFormatTexture2D, V2TXLiveBufferTypeTexture);mLivePusher.setObserver(new V2TXLivePusherObserver() {@Overridepublic void onGLContextCreated() {}@Overridepublic int onProcessVideoFrame(V2TXLiveDef.V2TXLiveVideoFrame srcFrame, V2TXLiveDef.V2TXLiveVideoFrame dstFrame) {if (mXMagic != null) {dstFrame.texture.textureId = mXMagic.process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height);}return srcFrame.texture.textureId;}@Overridepublic void onGLContextDestroyed() {if (mXMagic != null) {mXMagic.onDestroy();}}});mLivePusher.setRenderView(mPushRenderView);mLivePusher.startCamera(true);int ret = mLivePusher.startPush(pushUrl);mLivePusher.startMicrophone();
onProcessVideoFrame(V2TXLiveDef.V2TXLiveVideoFrame srcFrame, V2TXLiveDef.V2TXLiveVideoFrame dstFrame) 메소드에 다음 코드를 추가합니다.if (mXMagic != null) {dstFrame.texture.textureId = mXMagic.process(srcFrame.texture.textureId, srcFrame.width,srcFrame.height);}return srcFrame.texture.textureId;
onPause() 는 뷰티 필터 일시 중지에 사용되며, Activity/Fragment 라이프사이클 메소드에서 실행할 수 있습니다. onDestroy 메소드는 GL 스레드에서 호출해야 합니다. (onTextureDestroyed 메소드에서 XMagicImpl 객체의 onDestroy() 호출 가능) 자세한 사용법은 Demo를 참고하십시오. mXMagic.onPause(); //일시 정지, Activity의 onPause 메소드와 연결mXMagic.onDestroy(); //폐기, GL 스레드에서 호출
<RelativeLayoutandroid:id="@+id/livepusher_bp_beauty_pannel"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_above="@+id/ll_edit_info" />
private void initXMagic() {if (mXMagic == null) {mXMagic = new XMagicImpl(this, mBeautyPanelView);}else{mXMagic.onResume();}}
ThirdBeautyActivity.initXMagic(); 메소드를 참고하십시오.피드백