React Native Jssip Webrtc не может отображать удаленное видео или воспроизводить аудиоAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 React Native Jssip Webrtc не может отображать удаленное видео или воспроизводить аудио

Сообщение Anonymous »

Я пытаюсь создать простое приложение React Native (Jssip и WebRTC), которое будет принимать вызовы с дверной станции SIP (Akuvox) и отвечать на них.
Общее решение: предназначен для использования только в локальной сети.
Sip-сервер локальной сети — Routr с RTPengine.
Пока дверная станция инициирует вызов, Android-клиент React Native может ответить на вызов, происходит обмен предложением и ответом SDP, генерируется событие ontrack, генерируется событие подтверждения Jssip, одноранговое соединение отображается как подключенное, но я не могу отображать видео или воспроизводить аудио на клиент. Дверная станция принимает звук с микрофона клиента. Не знаете, какой шаг я пропустил?
"react-native": "0.74.1"
"react-native-jssip": "3.7.6"
"react-native-webrtc": "^118.0.7"
Предложение SDP от дверной станции
v=0
o=1101 5000 5000 IN IP4 172.18.0.3
s=Talk
c=IN IP4 172.18.0.3
b=AS:4000
t=0 0
m=audio 25614 UDP/TLS/RTP/SAVPF 8 0 9 101
a=mid:1
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:9 G722/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
a=rtcp:25614
a=rtcp-mux
a=setup:actpass
a=fingerprint:sha-256 F1:0A:15:B0:36:66:DA:5D:61:A5:C9:A8:5E:72:24:4B:E5:26:3E:0E:B0:4A:E2:08:A8:95:0B:EE:07:C7:0F:2D
a=tls-id:65c686948f15c085408a7242c0c60246
a=ptime:20
a=ice-ufrag:nK9WTPof
a=ice-pwd:Cv8ALuBGGxFfyj0GvVd2hkAIBA
a=candidate:mrzwf4XLvFEvyPHC 1 UDP 2130706431 172.18.0.3 25614 typ host
m=video 32555 UDP/TLS/RTP/SAVPF 96
a=mid:2
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=42e01f;packetization-mode=1;max-br=512;max-mbps=40500
a=sendrecv
a=rtcp:32555
a=rtcp-mux
a=setup:actpass
a=fingerprint:sha-256 F1:0A:15:B0:36:66:DA:5D:61:A5:C9:A8:5E:72:24:4B:E5:26:3E:0E:B0:4A:E2:08:A8:95:0B:EE:07:C7:0F:2D
a=tls-id:842f7759383cdec3efbcbd7c1440ad77
a=ptime:20
a=ice-ufrag:Xs8w1N0l
a=ice-pwd:ilQ4EtLhw13mc1jtfw6M6dICxl
a=candidate:mrzwf4XLvFEvyPHC 1 UDP 2130706431 172.18.0.3 32555 typ host

Ответ SDP
v=0
o=- 949635043982078924 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS 6677aff8-db93-400c-89ae-bfe1e92e4c0c
m=audio 42489 UDP/TLS/RTP/SAVPF 8 0 9 101
c=IN IP4 192.168.61.242
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:370454302 1 udp 2122260223 192.168.61.242 42489 typ host generation 0 network-id 3 network-cost 10
a=ice-ufrag:KUE+
a=ice-pwd:+SYB8TMYatUez3K47PwIVH3m
a=ice-options:trickle renomination
a=fingerprint:sha-256 E4:09:B4:E4:4B:19:B8:75:39:54:00:AE:BF:35:C1:B4:22:B0:92:64:F0:3D:D2:F2:9E:EF:62:67:6B:34:24:85
a=setup:active
a=mid:1
a=sendrecv
a=msid:6677aff8-db93-400c-89ae-bfe1e92e4c0c 4475b5a0-8f2c-4cc9-9111-877c5c31bfce
a=rtcp-mux
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:9 G722/8000
a=rtpmap:101 telephone-event/8000
a=ssrc:251028228 cname:EUjhx7RyFwKLwQi4
a=ssrc:251028228 msid:6677aff8-db93-400c-89ae-bfe1e92e4c0c 4475b5a0-8f2c-4cc9-9111-877c5c31bfce
m=video 41096 UDP/TLS/RTP/SAVPF 96
c=IN IP4 192.168.61.242
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:370454302 1 udp 2122260223 192.168.61.242 41096 typ host generation 0 network-id 3 network-cost 10
a=ice-ufrag:PIXO
a=ice-pwd:GFHcL+KIjarDtgiQeHpRneP5
a=ice-options:trickle renomination
a=fingerprint:sha-256 E4:09:B4:E4:4B:19:B8:75:39:54:00:AE:BF:35:C1:B4:22:B0:92:64:F0:3D:D2:F2:9E:EF:62:67:6B:34:24:85
a=setup:active
a=mid:2
a=sendrecv
a=msid:6677aff8-db93-400c-89ae-bfe1e92e4c0c 074bfb5c-cbbb-44a1-8b87-7e19cba6f3e7
a=rtcp-mux
a=rtpmap:96 H264/90000
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=ssrc:3709015175 cname:EUjhx7RyFwKLwQi4
a=ssrc:3709015175 msid:6677aff8-db93-400c-89ae-bfe1e92e4c0c 074bfb5c-cbbb-44a1-8b87-7e19cba6f3e7

Состояние PeerConnection после создания события подтверждения вызова
"signalingState": "stable",
"iceGatheringState": "complete","connectionState": "connected",
"iceConnectionState": "connected",
Пример клиента React Nativeimport { useEffect, useRef, useState } from 'react';
import {StyleSheet, View} from 'react-native';
import { WebSocketInterface, UA, debug } from 'react-native-jssip'
import { RTCPeerConnection, RTCIceCandidate, RTCSessionDescription, mediaDevices, RTCView, MediaStream, MediaStreamTrack } from 'react-native-webrtc';

global.RTCPeerConnection = RTCPeerConnection;
global.RTCIceCandidate = RTCIceCandidate;
global.RTCSessionDescription = RTCSessionDescription;
global.navigator.mediaDevices = mediaDevices;

// debug.enable('JsSIP:*')

export function IntercomHome({navigation, route}) {
const [setRemoteMedia, setsetRemoteMedia] = useState(null)
const remoteMedia = useRef({})

const myUa = useRef(null)
const myUaCurrentRtcSession = useRef(null)

const processNewRtcSession = (newRtc) => {
myUaCurrentRtcSession.current = newRtc.session

newRtc.session.on('confirmed', async(e) => {
console.log('\n\n connections status')
console.log(JSON.stringify(myUaCurrentRtcSession.current.connection))
})

newRtc.session.on('sdp', (e) => {
console.log(e.type)
console.log(e.sdp)
})

if(newRtc.originator === 'remote'){
setTimeout(() => {
answerIncomingCall()
},2000)
}
}

const answerIncomingCall = () => {
let options = {
mediaConstraints: {
audio: true,
video: true
},
pcConfig: {
iceServers: [],
iceTransportPolicy: "all",
rtcpMuxPolicy: "negotiate"
},
}
myUaCurrentRtcSession.current.answer(options)
myUaCurrentRtcSession.current.connection.ontrack = async function(track){
if(track.track.kind === 'video'){
console.log('Video Track')
try{
setRemoteMedia(track.streams[0])
}catch(e){
console.log(e)
}
}
}
}

const createJsSipInstance = async() => {
console.log('Creating JsSip Instance')
await getUserMedia()
let socket = new WebSocketInterface('ws://***.***.**.**:5062');

let configuration = {
sockets: [socket],
uri : 'sip:****@***.*****',
password : "*****",
session_timers: true,
session_timers_force_refresher: true,
};

const ua = new UA(configuration);
myUa.current = ua
myUa.current.on('newRTCSession', processNewRtcSession)

useEffect(() => {
if (!myUa.current) {
createJsSipInstance()
}
return () => {

}
})

return(

{remoteUrl ?


:
null
}

)
}



Подробнее здесь: https://stackoverflow.com/questions/784 ... play-audio
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»