Kebijakan Privasi
Perjanjian Pemrosesan dan Keamanan Data
.aar file in the libs directory of the Xmagic module with the .aar file in libs of your SDK.../src/main/assets of the Xmagic module with those in assets/ of your SDK. If there are files in the MotionRes folder of your SDK package, also copy them to the ../src/main/assets directory..so files in ../src/main/jniLibs of the Xmagic module with the .so files in jniLibs of your SDK package (you need to decompress the ZIP files in the jinLibs folder to get the .so files for arm64-v8a and armeabi-v7a).build.gradle in app and do the following:applicationId with the package name under the obtained trial license.configurations {all*.exclude group: 'com.google.code.gson'}
ThirdBeautyActivity class of the demo.// For details about authentication and error codes, see https://www.tencentcloud.com/document/product/616/65891?from_cn_redirect=1#.E6.AD.A5.E9.AA.A4.E4.B8.80.EF.BC.9A.E9.89.B4.E6.9D.83XMagicImpl.checkAuth((errorCode, msg) -> {if (errorCode == TELicenseCheck.ERROR_OK) {showLoadResourceView();} else {TXCLog.e(TAG, "Authentication failed. Check the authentication URL and 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();
textureId to the SDK for rendering:onProcessVideoFrame(V2TXLiveDef.V2TXLiveVideoFrame srcFrame, V2TXLiveDef.V2TXLiveVideoFrame dstFrame) method of the V2TXLivePusherObserver API, add the following code:if (mXMagic != null) {dstFrame.texture.textureId = mXMagic.process(srcFrame.texture.textureId, srcFrame.width,srcFrame.height);}return srcFrame.texture.textureId;
onPause() is used to pause the beauty filter effect, which can be executed in the Activity/Fragment lifecycle method. The onDestroy method needs to be called in the GL thread (the onDestroy() of the XMagicImpl object can be called in the onTextureDestroyed method). For more information, see the demo.mXMagic.onPause(); // Pause, which is bound to the `onPause` method of `Activity`mXMagic.onDestroy(); // // Terminate, which needs to be called in the GL thread
<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(); method of the demo for details.Apakah halaman ini membantu?
Anda juga dapat Menghubungi Penjualan atau Mengirimkan Tiket untuk meminta bantuan.
masukan