<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                **1.找到****TestSendCustomCameraData****.java文件,添加如下變量:** ``` private BaseBeautyViewHolder mBeautyViewHolder; private MHBeautyManager mhBeautyManager; ``` **找到****onTextureProcess****方法,添加美顏處理代碼:** ``` @Override public int onTextureProcess(int textureId, EGLContext eglContext) { ????if (!mIsSending) return textureId; ????if(mBeautyViewHolder==null){ ????????return textureId; ????} ????if (mhBeautyManager == null) { ????????mhBeautyManager = new MHBeautyManager(mContext,true); ????????mhBeautyManager.setBeautyDataModel(BeautyDataModel.getInstance()); ????????if (mBeautyViewHolder != null) { ????????????mBeautyViewHolder.setMhBeautyManager(mhBeautyManager); ????????} ????????return textureId; ????} ????int newTex = mhBeautyManager.render(textureId, mCameraHeight, mCameraWidth); ????//將視頻幀通過紋理方式塞給SDK ????TRTCCloudDef.TRTCVideoFrame videoFrame = new TRTCCloudDef.TRTCVideoFrame(); ????videoFrame.texture = new TRTCCloudDef.TRTCTexture(); ????videoFrame.texture.textureId = newTex; ????videoFrame.texture.eglContext14 = eglContext; ????videoFrame.width = mCameraHeight; ????videoFrame.height = mCameraWidth; ????videoFrame.pixelFormat = TRTCCloudDef.TRTC_VIDEO_PIXEL_FORMAT_Texture_2D; ????videoFrame.bufferType = TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE; ????mTRTCCloud.sendCustomVideoData(videoFrame); ????return textureId; } ``` **找到****onSurfaceTextureDestroy****方法,銷毀美顏管理類對象:** ``` @Override public void onSurfaceTextureDestroy(SurfaceTexture surfaceTexture) { ????Log.d(TAG, "onSurfaceTextureDestroy: " + Thread.currentThread().getName()); ????if(mhBeautyManager!=null){ ????????mhBeautyManager.destroy(); ????} } ``` **添加****getMHBeautyManager****方法:** ``` public MHBeautyManager getMHBeautyManager(){ ????return mhBeautyManager; } ``` **2.找到****TRTCMainActivity****.java文件** **實現****DefaultBeautyEffectListener****接口。代碼如下:** ``` @Override public void onFilterChanged(FilterBean filterBean) { ????if (mhBeautyManager == null) { ????????return; ????} ????FilterEnum filterEnum = filterBean.getFilterEnum(); ????if (filterEnum == FilterEnum.PRO_FILTER) { ????????mhBeautyManager.changeDynamicFilter(filterBean.getmFilterName()); ????} else { ????????Bitmap lookupBitmap = BitmapUtil.getFilterBitmap(this,filterEnum); ????????mhBeautyManager.setFilter(lookupBitmap); ????} } @Override public void onMoPiChanged(int progress) { ????if (mCustomCameraCapture!=null&&mCustomCameraCapture.getMHBeautyManager() != null) { ????????mCustomCameraCapture.getMHBeautyManager().setSkinSmooth(progress); ????} } @Override public void onFengNenChanged(int progress) { ????if (mCustomCameraCapture!=null&&mCustomCameraCapture.getMHBeautyManager() != null) { ????????mCustomCameraCapture.getMHBeautyManager().setSkinTenderness(progress); ????} } @Override public void onBeautyOrigin() { ????if (mCustomCameraCapture!=null&&mCustomCameraCapture.getMHBeautyManager() != null) { ????????mCustomCameraCapture.getMHBeautyManager().setSkinWhiting(0); ????????mCustomCameraCapture.getMHBeautyManager().setSkinSmooth(0); ????????mCustomCameraCapture.getMHBeautyManager().setSkinTenderness(0); ????} } ``` **?添加如下變量** ``` private Handler mHandler; private AlertDialog dialog; private RelativeLayout beautyContainer; private BaseBeautyViewHolder beautyViewHolder; private boolean isResume; private int retryCount; private Thread beautyThread; ``` **添加如下代碼** ``` static class DiaLogListener implements DialogInterface.OnClickListener { ????????WeakReference activityWeakReference; ????????DiaLogListener(TRTCMainActivity activity) { ????????????this.activityWeakReference = new WeakReference<>(activity); ????????} ????????@Override ????????public void onClick(DialogInterface dialog, int which) { ????????????TRTCMainActivity activity = activityWeakReference.get(); ????????????if (activity == null)return; ????????????switch (which){ ????????????????case -1: ????????????????????dialog.cancel(); ????????????????????activity.finish(); ????????????????????break; ????????????????case -2: ????????????????????dialog.cancel(); ????????????????????break; ????????????} ????????} ????} ????static class SDKDialogListener implements DialogInterface.OnClickListener { ????????WeakReference activityWeakReference; ????????SDKDialogListener(TRTCMainActivity activity) { ????????????this.activityWeakReference = new WeakReference<>(activity); ????????} ????????@Override ????????public void onClick(DialogInterface dialog, int which) { ????????????TRTCMainActivity activity = activityWeakReference.get(); ????????????if (activity == null)return; ????????????switch (which){ ????????????????case -1: ????????????????????activity.retryCount ++; ????????????????????MHSDK.getInstance().clearVerNote(); ????????????????????MHSDK.getInstance().verify(""); ????????????????????activity.initBeautyView(); ????????????????????dialog.cancel(); // ???????????????????System.exit(0); ????????????????????break; ????????????????case -2: ????????????????????dialog.cancel(); ????????????????????break; ????????????} ????????} ????} ``` ????//由于demo進入應用直接進入美顏界面,為了防止授權校驗未完成而一直顯示標準版界面,需要等授權校驗完成后初始化對應的美顏界面(延遲1秒或者按下面處理) ``` ????static class BeautyThread extends ?Thread { ????????WeakReference mainActivityWeakReference; ????????BeautyThread(TRTCMainActivity txMainActivity) { ????????????this.mainActivityWeakReference = new WeakReference<>(txMainActivity); ????????} ????????@Override ????????public void run() { ????????????while (mainActivityWeakReference.get()!= null && !MHSDK.getInstance().isVerEnd()) { ????????????????if (isInterrupted()) return; ????????????????try { ????????????????????Thread.sleep(200); ????????????????} catch (InterruptedException e) { ????????????????????e.printStackTrace(); ????????????????} ????????????} ????????????TRTCMainActivity activity = mainActivityWeakReference.get(); ????????????if (activity != null){ ????????????????activity.mHandler.post(activity::setBeautyView); ????????????} ????????} ????} ????private void initBeautyView() { ????????beautyContainer = findViewById(R.id.beauty_view_container); ????????if (MHSDK.getInstance().isVerEnd()){ ????????????setBeautyView(); ????????}else { ????????????if (beautyThread != null) { ????????????????beautyThread.interrupt(); ????????????????beautyThread = null; ????????????} ????????????beautyThread = new BeautyThread(this); ????????????beautyThread.start(); ????????} ????} ????private void showRetryDialog() { ????????if (dialog != null) { ????????????dialog.cancel(); ????????} ????????SDKDialogListener diaLogListener = new SDKDialogListener(this); ????????dialog = new AlertDialog.Builder(this) ????????????????.setTitle("提示") ????????????????.setMessage("資源獲取失敗,請檢查網絡") ????????????????.setCancelable(false) ????????????????.setPositiveButton("確定", diaLogListener) ????????????????.create(); ????????dialog.show(); ????} ????private void showExitDialog() { ????????if (dialog != null) { ????????????dialog.cancel(); ????????} ????????DiaLogListener diaLogListener = new DiaLogListener(this); ????????dialog = new AlertDialog.Builder(this) ????????????????.setTitle("提示") ????????????????.setMessage("資源獲取失敗,請檢查網絡并退出重試") ????????????????.setCancelable(false) ????????????????.setPositiveButton("確定", diaLogListener) ????????????????.create(); ????????dialog.show(); ????} ????private void setBeautyView(){ ????????LogManager.getInstance().writeData("MainActivity_setBeautyView_SDKVersion=" + MHSDK.getInstance().getVer()); ????????if (!MHSDK.getInstance().isVerifyAccess()){ ????????????if (retryCount < 10) { ????????????????showRetryDialog(); ????????????}else { ????????????????showExitDialog(); ????????????????return; ????????????} ????????} ????????if (beautyViewHolder != null) { ????????????beautyViewHolder.release(); ????????????beautyViewHolder = null; ????????} ????????beautyViewHolder = BeautyViewHolderFactory.getBeautyViewHolder(getApplicationContext(), beautyContainer); ????????beautyViewHolder.show(); ????????beautyViewHolder.setEffectListener(this); ????????beautyViewHolder.setCameraClickListener(this); ????????beautyViewHolder.setVisibleListener(visible -> { ????????????if (!visible) { ????????????????beautyViewHolder.show(); ????????????} ????????}); // ???????beautyViewHolder.setMhBeautyManager(mhBeautyManager); ????????mCustomCameraCapture.setBaseBeautyViewHolder(beautyViewHolder); ????} ``` **在****onCreate****里最后一行添加:** ``` initBeautyView(); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看