ConnectyCube / android-messenger-app

Chat and voice / video calling app using ConnectyCube
https://connectycube.com
Apache License 2.0
51 stars 23 forks source link

Caller doesn't receive RemoteVideo #52

Closed mwaked closed 4 years ago

mwaked commented 4 years ago

I make a call between user A(Sender) and user B(Receiver), user A receive onLocalVideoTrackReceive but dose not receive onRemoteVideoTrackReceive, and user B the opposite receive onRemoteVideoTrackReceive but dose not receive onLocalVideoTrackReceive!

Please help me to fix this, My code is below

override fun onCreate(savedInstanceState: Bundle?) {

       currentSession?.apply {
            addVideoTrackCallbacksListener(this@VideoCallFragment)
        }

    }

override fun onLocalVideoTrackReceive(session: RTCSession?, videoTrack: RTCVideoTrack?) {
        Logger.d(CALL_TAG, TAG, "onLocalVideoTrackReceive")
        if (isCurrentSessionClosed()) return

        mainHandler.postDelayed({
            videoTrack?.let { fillVideoView(localView, it, false) }
        },
                VIDEO_TRACK_INITIALIZE_DELAY
        )
    }

    override fun onRemoteVideoTrackReceive(session: RTCSession?, videoTrack: RTCVideoTrack?, p2: Int?) {
        Logger.d(CALL_TAG, TAG, "onRemoteVideoTrackReceive")
        if (isCurrentSessionClosed()) return

        mainHandler.postDelayed(
                {
                    videoTrack?.let { fillVideoView(opponentView, it, true) }
                },
                VIDEO_TRACK_INITIALIZE_DELAY
        )

    }

  private fun fillVideoView(videoView: RTCSurfaceView,
                              videoTrack: RTCVideoTrack,
                              remoteRenderer: Boolean
    ) {
        videoTrack.addRenderer(videoView)
        updateVideoView(videoView, remoteRenderer, RendererCommon.ScalingType.SCALE_ASPECT_FILL)
    }

    private fun updateVideoView(surfaceView: RTCSurfaceView,
                                mirror: Boolean,
                                scalingType: RendererCommon.ScalingType
    ) {
        surfaceView.setScalingType(scalingType)
        surfaceView.setMirror(mirror)
        surfaceView.requestLayout()
    }

fun startCall(context: Context, callType: Int, appointment: AppointmentDataCall) {
    val rtcCallType =
            if (callType == CALL_TYPE_VIDEO) RTCTypes.ConferenceType.CONFERENCE_TYPE_VIDEO
            else RTCTypes.ConferenceType.CONFERENCE_TYPE_AUDIO

   val occupants: ArrayList<Int> = ArrayList()
    occupants.add(appointment.calleeCcId.toInt())

    val session = RTCClient.getInstance(context)
            .createNewSessionWithOpponents(occupants, rtcCallType)

    val userInfo: MutableMap<String, String> = HashMap()
    userInfo[APPOINTMENT_ID] = appointment.appointmentId.toString()

    session.startCall(userInfo)

    RTCSessionManager.getInstance().currentCall = session

    Toast.makeText(context, "members = $occupants, callType = $callType", Toast.LENGTH_LONG).show()
}
TatankaConCube commented 4 years ago

Can you reproduce this issue on original app? Caller will receive remote video track only after accept call on receiver side. Please attach log from both sides to better understanding your issue. You can use Gist to share logs.