Преглед на файлове

feat: 声网人脸检测

tongmengxiao преди 11 месеца
родител
ревизия
4198a0f862

+ 16 - 0
baseswago/src/main/java/com/swago/baseswago/agora/AgoraManager.kt

@@ -111,6 +111,15 @@ object AgoraManager {
                         super.onUserJoined(uid, elapsed)
                         Log.d("onUserJoined","结果--$uid")
                     }
+
+                    override fun onFacePositionChanged(
+                        imageWidth: Int,
+                        imageHeight: Int,
+                        faces: Array<out AgoraFacePositionInfo>?
+                    ) {
+                        super.onFacePositionChanged(imageWidth, imageHeight, faces)
+                        iSwagoIRtcEngineEventHandler?.onFacePositionChanged(imageWidth,imageHeight,faces)
+                    }
                 })
             setChannelProfile()
         } catch (e: Exception) {
@@ -341,4 +350,11 @@ object AgoraManager {
         mRtcEngine?.enableAudioVolumeIndication(2000,3,true)
     }
 
+    /**
+     * 人脸检测
+     * */
+    fun enableFaceDetection(enabled:Boolean){
+        mRtcEngine?.enableFaceDetection(enabled)
+    }
+
 }

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/agora/ISwagoIRtcEngineEventHandler.kt

@@ -27,4 +27,10 @@ interface ISwagoIRtcEngineEventHandler {
         speakers: Array<out IRtcEngineEventHandler.AudioVolumeInfo>?,
         totalVolume: Int
     )
+
+    fun onFacePositionChanged(
+        imageWidth: Int,
+        imageHeight: Int,
+        faces: Array<out IRtcEngineEventHandler.AgoraFacePositionInfo>?
+    )
 }

+ 32 - 0
room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt

@@ -4,6 +4,7 @@ import android.Manifest
 import android.content.Intent
 import android.view.SurfaceView
 import android.os.Build
+import android.os.CountDownTimer
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
@@ -37,6 +38,7 @@ import com.swago.baseswago.model.live.pk.PunishPKModel
 import com.swago.baseswago.model.live.pk.StartPKModel
 import com.swago.baseswago.model.live.pk.StopPKModel
 import com.swago.baseswago.util.DpPxUtil
+import com.swago.baseswago.util.LogUtil
 import com.swago.loadUrlNoPlaceHolder
 import com.swago.room.R
 import com.swago.room.audio.AudioRoomManager
@@ -128,6 +130,7 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
         AgoraManager.initializeEngine(this, this)
         AgoraManager.setVideoConfiguration()
         AgoraManager.enableAudioVolumeIndication()
+        AgoraManager.enableFaceDetection(true)
         UserInfo.getUserInfo()?.let {
             AgoraManager.setupLocalVideo(this, binding.flLocal, it.id.toInt(), true) {
                 AgoraManager.setVideoAudio(pullVideo = true, pullAudio = true, pushVideo = true, pushAudio = true)
@@ -149,6 +152,9 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
     private var selectedBgUrl = ""
     private var checkPassword = false
 
+    private lateinit var countDownTimer: CountDownTimer
+    private var startFaceShowTimer = true
+
     override fun initLiveData() {
         PKStateManager.resetData()
         roomVm.init()
@@ -392,6 +398,15 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
             binding.cbPassword.text = if (isChecked)  "Password ·NO" else "Password ·OFF"
             checkPassword = isChecked
         }
+        countDownTimer = object : CountDownTimer(10000, 10000) {
+            override fun onTick(millisUntilFinished: Long) {
+            }
+
+            override fun onFinish() {
+                SwagoRoomManager.closeRoom()
+            }
+
+        }
 
     }
 
@@ -503,6 +518,23 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding, IRoomInf
         }
     }
 
+    override fun onFacePositionChanged(
+        imageWidth: Int,
+        imageHeight: Int,
+        faces: Array<out IRtcEngineEventHandler.AgoraFacePositionInfo>?
+    ) {
+        LogUtil.d("onFacePositionChanged${faces?.size}")
+        if (faces.isNullOrEmpty()){
+            if (startFaceShowTimer){
+                countDownTimer.start()
+                startFaceShowTimer = false
+            }
+        } else {
+            startFaceShowTimer = true
+            countDownTimer.cancel()
+        }
+    }
+
     /**************************PK******************************/
     private val marginTopValue by lazy {
         ImmersionBar.getStatusBarHeight(this) + DpPxUtil.dip2px(78f)

+ 9 - 0
room/src/main/java/com/swago/room/user/UserRoomActivity.kt

@@ -404,6 +404,15 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
         }
     }
 
+
+    override fun onFacePositionChanged(
+        imageWidth: Int,
+        imageHeight: Int,
+        faces: Array<out IRtcEngineEventHandler.AgoraFacePositionInfo>?
+    ) {
+        LogUtil.d("onFacePositionChanged${faces?.size}")
+    }
+
     fun gotoTargetRoom(anchorId: String) {
         iRoomInfos.forEachIndexed { index, userRoomModel ->
             if (userRoomModel?.momentModel != null) {