<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **1.初始化MHSDK** **找到****ZegoApplication****.java文件,初始化SDK** ``` ?????MHSDK.getInstance().init(this," "); ``` **2.初始化即構濾鏡接口** **找到****VideoCommunicationMainUI****.java文件,新增變量如下:** ``` public static VideoFilterFactoryDemo filterFactory; ``` **在****onCreate****初始化ZegoSDK設置自定義濾鏡。** ``` filterFactory = new VideoFilterFactoryDemo(FilterType_HybridMem, null); ZegoExternalVideoFilter.setVideoFilterFactory(filterFactory, ZegoConstants.PublishChannelIndex.MAIN); ``` **3.初始化美顏界面** **找到****PublishStreamAndPlayStreamUI****.java文件****,****實現****DefaultBeautyEffectListener****接口****,****添加以下變量****:** ``` private Handler mHandler; private AlertDialog dialog; private RelativeLayout beautyContainer; private MHBeautyManager mhBeautyManager; private BaseBeautyViewHolder beautyViewHolder; private boolean isResume; private int retryCount; private Thread beautyThread; ``` **添加以下方法** ``` private void initBeautyView() { ????????beautyContainer = findViewById(R.id.beauty_view_container); ????????mHandler = new Handler(getMainLooper()); ????????if (MHSDK.getInstance().isVerEnd()){ ????????????setBeautyView(); ????????}else { ????????????if (beautyThread != null) { ????????????????beautyThread.interrupt(); ????????????????beautyThread = null; ????????????} ????????????beautyThread = new BeautyThread(this); ????????????beautyThread.start(); ????????} ????} ????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.setVisibleListener(visible -> { ????????????if (!visible) { ????????????????beautyViewHolder.show(); ????????????} ????????}); ????????mhBeautyManager = new MHBeautyManager(this,true); ????????beautyViewHolder.setMhBeautyManager(mhBeautyManager); ????????VideoCommunicationMainUI.filterFactory.setMHBeautyManager(mhBeautyManager); ????} ????@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 onMeiBaiChanged(int progress) { ????????if (mhBeautyManager != null) { ????????????mhBeautyManager.setSkinWhiting(progress); ????????} ????} ????@Override ????public void onMoPiChanged(int progress) { ????????if (mhBeautyManager != null) { ????????????mhBeautyManager.setSkinSmooth(progress); ????????} ????} ????@Override ????public void onFengNenChanged(int progress) { ????????if (mhBeautyManager != null) { ????????????mhBeautyManager.setSkinTenderness(progress); ????????} ????} ????@Override ????public void onBeautyOrigin() { ????????if (mhBeautyManager != null) { ????????????mhBeautyManager.setSkinWhiting(0); ????????????mhBeautyManager.setSkinSmooth(0); ????????????mhBeautyManager.setSkinTenderness(0); ????????} ????} ????static class DiaLogListener implements DialogInterface.OnClickListener { ????????WeakReference activityWeakReference; ????????DiaLogListener(PublishStreamAndPlayStreamUI activity) { ????????????this.activityWeakReference = new WeakReference<>(activity); ????????} ????????@Override ????????public void onClick(DialogInterface dialog, int which) { ????????????PublishStreamAndPlayStreamUI 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(PublishStreamAndPlayStreamUI activity) { ????????????this.activityWeakReference = new WeakReference<>(activity); ????????} ????????@Override ????????public void onClick(DialogInterface dialog, int which) { ????????????PublishStreamAndPlayStreamUI 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(PublishStreamAndPlayStreamUI PublishStreamAndPlayStreamUI) { ????????????this.mainActivityWeakReference = new WeakReference<>(PublishStreamAndPlayStreamUI); ????????} ????????@Override ????????public void run() { ????????????while (mainActivityWeakReference.get()!= null && !MHSDK.getInstance().isVerEnd()) { ????????????????if (isInterrupted()) return; ????????????????try { ????????????????????Thread.sleep(200); ????????????????} catch (InterruptedException e) { ????????????????????e.printStackTrace(); ????????????????} ????????????} ????????????PublishStreamAndPlayStreamUI activity = mainActivityWeakReference.get(); ????????????if (activity != null){ ????????????????activity.mHandler.post(activity::setBeautyView); ????????????} ????????} ????} ????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(); ????} ``` **在****onCreate****里調用****initBeautyView()****方法** **4.實現濾鏡接口** **找到****VideoFilterFactoryDemo****.java文件,添加以下方法** ``` public void setMHBeautyManager(MHBeautyManager mhBeautyManager){ ????mFunRender = mhBeautyManager; ????((VideoFilterHybridDemo)mFilter).setMHBeautyManager(mhBeautyManager); } ``` **找到****VideoFilterHybridDemo****.java文件,找到****queueInputBuffer****方法,添加以下代碼** ``` int textureID = mTextureId; if(mMHBeautyManager!=null){ ????textureID = mMHBeautyManager.render6(mTextureId, pixelBuffer.width, pixelBuffer.height); } // 此步驟會使用此 textureID 用做本地預覽的視圖渲染,并將美顏后的 textureID 傳給 SDK(拉該條流時是美顏后的視頻) mClient.onProcessCallback(textureID, pixelBuffer.width, pixelBuffer.height, pixelBuffer.timestamp_100n); ```
                  <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>

                              哎呀哎呀视频在线观看