Включить аудио метод выдачи в Android Агора RTC SDK - PullRequest
0 голосов
/ 27 июня 2019

Я использую интерактивное вещание видео в своем приложении.Я прилагаю класс, в котором я использую прямой эфир.У меня возникает проблема со звуком, когда я возвращаюсь с экрана прямой трансляции на предыдущий экран.Я все еще слушаю аудио хозяина.Ранее я использовал метод ухода из канала и уничтожал объект клиента rtc, но после реализации этого, когда я возвращаюсь из потокового класса, он закрывает экран всех пользователей, использующих это приложение, из-за метода выхода из канала.после этого я удалил эту опцию из моего метода уничтожения.Сейчас я использую метод disable audio, который отключает звук, но когда я открываю класс потоковой передачи, он не включает звук.Метод включения звука не работает. Я также использовал метод локального потока отключения звука и обработчик rtc в методе отключения звука пользователя.

Я получаю ошибку -

"LiveStreamingActivity утекла IntentReceiver io.agora.rtc.internal.AudioRoutingController$HeadsetBroadcastReceiver@101a7a7, который был первоначально зарегистрирован здесь. Вы пропустили звонокотменить регистрацию Receiver ()? android.app.IntentReceiverLeaked: активность com.allin.activities.home.homeActivities.LiveStreamingActivity утечка IntentReceiver io.agora.rtc.internal.AudioRoutingController$HeadsetBroadcastReceiver@1aa был зарегистрирован, что вы пропустили.to unregisterReceiver ()? "

Приемник регистрируется в SDK, и в SDK поступает исключение - файл JAR, который я не могу редактировать.

Помогите, пожалуйста, решить эту проблемукак я должен жить приложение в магазине Play.

// сначала я попробовал это, но он автоматически останавливает потоковую передачу других устройств.

     override fun onDestroy() {
    /* if (mRtcEngine != null) {
         leaveChannel()
         RtcEngine.destroy(mRtcEngine)
        mRtcEngine = null
     }*/
    //second I have tried disabling the audio so that user will 
     not hear 
   the host voice 
       if (mRtcEngine != null) //  
    {
     mRtcEngine!!.disableAudio()
    }    
    super.onDestroy()
    }

// затем я, когда я вернулся изпредыдущий экран, чтобы жить потоковое действие все инициализируется снова, нозвук не слышен.

 override fun onResume() {
    super.onResume()
    Log.e("resume", "resume")
    if (mRtcEngine != null) {
       mRtcEngine!!.enableAudio()
      // mRtcEngine!!.resumeAudio()
    }

}

код, который я использую

//agora rtc engine and handler initialization-----------------

private var mRtcEngine: RtcEngine? = null
private var mRtcEventHandler = object : IRtcEngineEventHandler() {
    @SuppressLint("LongLogTag")
    override fun onFirstRemoteVideoDecoded(uid: Int, width: Int, 
   height: Int, elapsed: Int) {
    }

    override fun onUserOffline(uid: Int, reason: Int) {
        runOnUiThread {
            val a = reason //if login =0 user is offline
            try {

                if (mUid == uid) {
                    if (surfaceView?.parent != null)
                        (surfaceView?.parent as ViewGroup).removeAllViews()

                    if (mRtcEngine != null) {
                        leaveChannel()
                        RtcEngine.destroy(mRtcEngine)
                        mRtcEngine = null
                    }

            setResult(IntentConstants.REQUEST_CODE_LIVE_STREAMING)
                    finish()
                }

            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    override fun onUserMuteVideo(uid: Int, muted: Boolean) {
        runOnUiThread {
            // onRemoteUserVideoMuted(uid, muted);
            Log.e("video","muted")
        }
    }

    override fun onAudioQuality(uid: Int, quality: Int, delay: 
    Short, lost: Short) {
        super.onAudioQuality(uid, quality, delay, lost)

        Log.e("", "")
    }


    override fun onUserJoined(uid: Int, elapsed: Int) {
        //  super.onUserJoined(uid, elapsed)
        mUid = uid
        runOnUiThread {
            try {
                setupRemoteVideo(mUid!!)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
        Log.e("differnt_uid----", mUid.toString())
    }


}

    private fun initAgoraEngineAndJoinChannel() {
    if(mRtcEngine==null)
    {
        initializeAgoraEngine()
        setupVideoProfile()
    }


}

//initializing rtc engine class
@Throws(Exception::class)
private fun initializeAgoraEngine() {
    try {
        var s = RtcEngine.getSdkVersion()
        mRtcEngine = RtcEngine.create(baseContext, AgoraConstants.APPLICATION_ID, mRtcEventHandler)
    } catch (e: Exception) {
        // Log.e(LOG_TAG, Log.getStackTraceString(e));

        throw RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e))
    }

}

@Throws(Exception::class)
private fun setupVideoProfile() {


    //mRtcEngine?.muteAllRemoteAudioStreams(true)
    // mLogger.log("channelName  account = " + channelName + ",uid = " + 0);
    mRtcEngine?.enableVideo()
    //mRtcEngine.clearVideoCompositingLayout();
    mRtcEngine?.enableLocalVideo(false)
    mRtcEngine?.setEnableSpeakerphone(false)
    mRtcEngine?.muteLocalAudioStream(true)
    joinChannel()

   mRtcEngine?.setVideoProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING, true)
    mRtcEngine?.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING)
    mRtcEngine?.setClientRole(Constants.CLIENT_ROLE_AUDIENCE,"")
    val speaker = mRtcEngine?.isSpeakerphoneEnabled
    val camerafocus = mRtcEngine?.isCameraAutoFocusFaceModeSupported

    Log.e("", "")
}

@Throws(Exception::class)
private fun setupRemoteVideo(uid: Int) {
    val container = findViewById<FrameLayout>(R.id.fl_video_container)

    if (container.childCount >= 1) {
        return
    }

    surfaceView = RtcEngine.CreateRendererView(baseContext)
    container.addView(surfaceView)
    mRtcEngine?.setupRemoteVideo(VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, uid))
    mRtcEngine?.setRemoteVideoStreamType(uid, 1)
    mRtcEngine?.setCameraAutoFocusFaceModeEnabled(false)
    mRtcEngine?.muteRemoteAudioStream(uid, false)
    mRtcEngine?.adjustPlaybackSignalVolume(0)
    // mRtcEngine.setVideoProfile(Constants.VIDEO_PROFILE_180P, false); // Earlier than 2.3.0
    surfaceView?.tag = uid // for mark purpose

    val audioManager: AudioManager =
        this@LiveStreamingActivity.getSystemService(Context.AUDIO_SERVICE) as AudioManager
    //audioManager.mode = AudioManager.MODE_IN_CALL
    val isConnected: Boolean = audioManager.isWiredHeadsetOn
    if (isConnected) {
        /* audioManager.isSpeakerphoneOn = false
         audioManager.isWiredHeadsetOn = true*/

        mRtcEngine?.setEnableSpeakerphone(false)
        mRtcEngine?.setDefaultAudioRoutetoSpeakerphone(false)
        mRtcEngine?.setSpeakerphoneVolume(0)
        mRtcEngine?.enableInEarMonitoring(true)
        // Sets the in-ear monitoring volume to 50% of original volume.
        mRtcEngine?.setInEarMonitoringVolume(200)
        mRtcEngine?.adjustPlaybackSignalVolume(200)
    } else {
        /* audioManager.isSpeakerphoneOn = true
         audioManager.isWiredHeadsetOn = false*/

        mRtcEngine?.setEnableSpeakerphone(true)
        mRtcEngine?.setDefaultAudioRoutetoSpeakerphone(true)
        mRtcEngine?.setSpeakerphoneVolume(50)
        mRtcEngine?.adjustPlaybackSignalVolume(50)
        mRtcEngine?.enableInEarMonitoring(false)
        // Sets the in-ear monitoring volume to 50% of original volume.
        mRtcEngine?.setInEarMonitoringVolume(0)


    }


    Log.e("", "")

}

@Throws(Exception::class)
private fun joinChannel() {
    mRtcEngine?.joinChannel(
        null,
        AgoraConstants.CHANNEL_NAME,
        "Extra Optional Data",
        0
    ) // if you do not specify the uid, we will generate the uid for you
}
@Throws(Exception::class)
private fun leaveChannel() {
    mRtcEngine!!.leaveChannel()
}
...