У меня есть некоторая проблема, когда у меня есть SetRemoteScription, и сообщение, показывающее следующее:
«не удалось установить удаленный ответ SDP: Порядок M-линий в ответе не совпадает с заказом в предложении. Отказ от ответа. "< /p>
и вот мой полный код: < /p>
my initializepeerconnectionFactory на mainActivity < /p>
Private Fun Инициализоперконконфактор () {
// Создание параметров инициализации для peerconnectionFactory
val eglbasecontext = eglbase.create (). = PeerConnectionFactory.options () < /p>
У меня есть некоторая проблема, когда у меня есть SetRemoteScription, и сообщение, показывающее следующее: «не удалось установить удаленный ответ SDP: Порядок M-линий в ответе не совпадает с заказом в предложении. Отказ от ответа. "< /p> и вот мой полный код: < /p> [list] [*] my initializepeerconnectionFactory на mainActivity < /p> Private Fun Инициализоперконконфактор () { // Создание параметров инициализации для peerconnectionFactory val eglbasecontext = eglbase.create (). = PeerConnectionFactory.options () < /p> [code] // Initialize WebRTC PeerConnectionFactory PeerConnectionFactory.initialize( PeerConnectionFactory.InitializationOptions.builder(applicationContext) .setFieldTrials("WebRTC-H264HighProfile/Enabled/").createInitializationOptions() ) // Create PeerConnectionFactory once initialization is done
if (peerConnectionFactory == null) { println("PeerConnectionFactory initialization failed.") return } else { println("PeerConnectionFactory initialized successfully.") generateSdpOffer() } < /code> } < /p> < /li> my GeneratesDpoffer на initiorizepeerconnectionFactory < /p> private FUN GENATESDPOFFER () { if (peerconnectionFactory == null) { return } val mediaConstraints = MediaConstraints (). Применить { mandatory.add(mediaconstraints.keyvalueepair("offfertoreceiveaudio "," true ")) mandatory.add(mediaiaconts.keyvaluepair("offertoreceivevideo", "true")) } < /p> val config = PeerConnection.RTCConfiguration(iceServers)
// Initialize the PeerConnection peerConnection = peerConnectionFactory?.createPeerConnection(config, object : PeerConnection.Observer { override fun onIceCandidate(candidate: IceCandidate?) {} override fun onIceCandidatesRemoved(p0: Array?) {}
override fun onAddStream(stream: MediaStream?) { stream?.let { mediaStream -> if (mediaStream.videoTracks.isEmpty().not()) { mediaStream.videoTracks[0].addSink { remoteRenderer } } } }
override fun onRemoveStream(stream: MediaStream?) {} override fun onDataChannel(channel: DataChannel?) {} override fun onRenegotiationNeeded() {} override fun onIceConnectionChange(newState: PeerConnection.IceConnectionState?) {} override fun onIceConnectionReceivingChange(p0: Boolean) {}
override fun onIceGatheringChange(newState: PeerConnection.IceGatheringState?) {} override fun onSignalingChange(newState: PeerConnection.SignalingState?) { Log.e("SignalState", "onSignalStateChange ${newState?.name}") } })
// Create SDP offer
peerConnection?.createOffer(object : SdpObserver { override fun onCreateSuccess(sdp: SessionDescription?) { val modifiedSdp = sdp?.description?.replace( "m=video 0 UDP/TLS/RTP/SAVPF 0", "m=video 9 UDP/TLS/RTP/SAVPF 125" ) val codecLines = """ a=rtpmap:125 H264/90000 """.trimIndent()
// Append the codec lines to the SDP finalSdp = modifiedSdp + codecLines println("finaSdp-=-=-=-=$finalSdp") Log.e("TAG", "finaSdp-=-=-=-=${finalSdp}") var modifiedSessionDescription = SessionDescription(SessionDescription.Type.OFFER, finalSdp) //val resultSetLocalDescription = peerConnection?.setLocalDescription(this, modifiedSessionDescription)