Соединение webRTC создается только в Firefox, другие браузеры не создают ⇐ Php
Соединение webRTC создается только в Firefox, другие браузеры не создают
Все что я изучаю webRTC. Для prectis webRTC я создаю один проект на php. Используйте webSoteck для сигнализации. В этом проекте будет установлено только соединение webRTC, и на p2p будет отправлено текстовое сообщение для проверки соединения.
Когда я тестирую его в Firefox, он работает хорошо, p2p-соединение установлено и сообщение также получено. Но когда я проверяю это в Chrome, Brave и Opera, p2p-соединение не устанавливается.
Я проверяю SDP. В Firefox длина SDP больше, чем в других браузерах. Я думаю, что это ICE не создает.
Чтобы проверить это, я добавляю «onicecandidate» в список событий льда, и когда я запускаю его, все браузеры и журналы получаются только в Firefox.
Что мне не хватает, можете ли вы помочь решить эту проблему?
Это мой JS-файл.
константный отправитель = "отправитель"; константный получатель = «приемник»; пусть код = 0; const stun_server = { ледовые серверы: \[ { URL-адреса: \['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302'\], } \], IceCandidatePoolSize: 10, } пусть ПК = новый RTCPeerConnection (stun_server); pc.onicecandidate = событие =\> { console.log('Триггер события-кандидата ICE:',event.candidate); } функция startWebSocket(роль) { пытаться { console.log(роль); сокет = новый WebSocket("ws://127.0.0.1:8080"); вар SocketOpen = (e) => { console.log("Сокет успешно подключен..."); startWebRTC (роль); } вар SocketMessage = (e) => { console.log(`Сообщение из сокета... : ${e.data}`); пусть ответ = JSON.parse(e.data); пусть предложение_или_ответ = ответ.ICE; if(response.role == "отправитель") { createAnswer (оффер_или_ответ); } else if(response.role == "приемник") { handleAnswer (оффер_или_ответ); } } вар SocketClose = (e) => { console.log(`сокет закрыт...`); сокет.закрыть(); } вар SocketError = (e) => { console.error(`Ошибка сокета: ${e.data}`); } socket.addEventListener("открыть",socketOpen); socket.addEventListener("сообщение", socketMessage); ocket.addEventListener("закрыть",ocketClose); ocket.addEventListener("ошибка",ocketError); } поймать (ошибка) { showCatchError('startWebSocket: невозможно подключиться к серверу: ',ошибка); } } функция startWebRTC (роль) { пытаться { console.log('webRTC Start......'); если (роль == отправитель) { createTheOffer (роль); } Еще если (роль == получатель) { if(code.trim() === '') { alert('Пожалуйста, введите код подключения'); вернуть ложь; } запрос по коду (код, роль); }; создатьКанал(); } поймать (ошибка) { showCatchError('startWebRTC: невозможно запустить webRTC: ',ошибка); } } функция createTheOffer(роль) { пытаться { pc.createOffer().then(offer => pc.setLocalDescription(offer)).then(() => { console.log(`Запуск SDP для ${role}.......`); если (роль == 'отправитель') { код = Math.floor(Math.random() * 9000) + 1000; alert(`Код подключения: ${code}`); } Еще если (роль == 'получатель') { код = document.querySelector('#connection_code').value; if(code.trim() === '') { alert('Пожалуйста, введите код подключения'); вернуть ложь; } } пусть сообщение = { роль: роль, код: код, тип: «соединение», ICE: pc.localDescription }; sendMessageToServer (Сообщение); }); создатьКанал(); } поймать (ошибка) { showCatchError('createTheOffer: невозможно создать предложение: ',ошибка); } } асинхронная функция createAnswer (предложение) { console.log('Отправить ответ.....'); дождитесь pc.setRemoteDescription(предложение); pc.createAnswer().then(ответ =\> { pc.setLocalDescription(ответ); console.log(`ответ: ${ответ}`); пусть сообщение = { роль: «получатель», код: код, наберите ответ', ICE: ответ }; sendMessageToServer (Сообщение); }); } асинхронная функция handleAnswer(ответ) { console.log(`Обработка ответа.....${ответ}`); await pc.setRemoteDescription(new RTCSessionDescription(ответ)); } функция queryByCode(код, роль){ пытаться { пусть сообщение = { роль: роль, код: код, тип: «соединение», ICE: pc.localDescription }; sendMessageToServer (Сообщение); } поймать (ошибка) { showCatchError('inquiryByCode: невозможно отправить запрос: ',ошибка); } } функция createChannel() { пытаться { const dataChannel = pc.createDataChannel('textChannel'); console.log('НАЧАЛО КАНАЛА ДАННЫХ'); dataChannel.onopen = () => { console.log('Канал данных открыт'); document.querySelector('#send_button').addEventListener('click', function() { пусть user_message = document.querySelector('#send_message').value; sendMessage (user_message); }); }; dataChannel.onerror = функция (ошибка) { console.log('ОШИБКА КАНАЛА ДАННЫХ: ',ошибка); showCatchError("Ошибка канала данных:",error); // Обработка ошибки здесь }; // Сторона получателя pc.ondatachannel = (событие) => { константный канал данных = event.channel; dataChannel.onmessage = (событие) => { console.log('Получено сообщение:', event.data); // Обработка полученного сообщения }; }; // Отправляем текстовое сообщение от отправителя получателю функция sendMessage (сообщение) { if (dataChannel.readyState === 'открыть') { dataChannel.send (сообщение); console.log('Сообщение отправлено:', message); } еще { console.error('Канал данных не открыт'); } } } поймать (ошибка) { showCatchError('createChannel: невозможно создать канал: ',ошибка); } } функция sendMessageToServer(Msg) { пытаться { сокет.send(JSON.stringify(Msg)); } поймать (ошибка) { showCatchError('sendMessageToServer: невозможно отправить: ', ошибка); } } функция checkPeerConnectionState() { console.log(`Конфигурация:`,ПК); console.log(`Состояние соединения ICE`, pc.iceConnectionState); } функция showCatchError(сообщение, ошибка){ console.error(msg, error.message); }
Все что я изучаю webRTC. Для prectis webRTC я создаю один проект на php. Используйте webSoteck для сигнализации. В этом проекте будет установлено только соединение webRTC, и на p2p будет отправлено текстовое сообщение для проверки соединения.
Когда я тестирую его в Firefox, он работает хорошо, p2p-соединение установлено и сообщение также получено. Но когда я проверяю это в Chrome, Brave и Opera, p2p-соединение не устанавливается.
Я проверяю SDP. В Firefox длина SDP больше, чем в других браузерах. Я думаю, что это ICE не создает.
Чтобы проверить это, я добавляю «onicecandidate» в список событий льда, и когда я запускаю его, все браузеры и журналы получаются только в Firefox.
Что мне не хватает, можете ли вы помочь решить эту проблему?
Это мой JS-файл.
константный отправитель = "отправитель"; константный получатель = «приемник»; пусть код = 0; const stun_server = { ледовые серверы: \[ { URL-адреса: \['stun:stun1.l.google.com:19302', 'stun:stun2.l.google.com:19302'\], } \], IceCandidatePoolSize: 10, } пусть ПК = новый RTCPeerConnection (stun_server); pc.onicecandidate = событие =\> { console.log('Триггер события-кандидата ICE:',event.candidate); } функция startWebSocket(роль) { пытаться { console.log(роль); сокет = новый WebSocket("ws://127.0.0.1:8080"); вар SocketOpen = (e) => { console.log("Сокет успешно подключен..."); startWebRTC (роль); } вар SocketMessage = (e) => { console.log(`Сообщение из сокета... : ${e.data}`); пусть ответ = JSON.parse(e.data); пусть предложение_или_ответ = ответ.ICE; if(response.role == "отправитель") { createAnswer (оффер_или_ответ); } else if(response.role == "приемник") { handleAnswer (оффер_или_ответ); } } вар SocketClose = (e) => { console.log(`сокет закрыт...`); сокет.закрыть(); } вар SocketError = (e) => { console.error(`Ошибка сокета: ${e.data}`); } socket.addEventListener("открыть",socketOpen); socket.addEventListener("сообщение", socketMessage); ocket.addEventListener("закрыть",ocketClose); ocket.addEventListener("ошибка",ocketError); } поймать (ошибка) { showCatchError('startWebSocket: невозможно подключиться к серверу: ',ошибка); } } функция startWebRTC (роль) { пытаться { console.log('webRTC Start......'); если (роль == отправитель) { createTheOffer (роль); } Еще если (роль == получатель) { if(code.trim() === '') { alert('Пожалуйста, введите код подключения'); вернуть ложь; } запрос по коду (код, роль); }; создатьКанал(); } поймать (ошибка) { showCatchError('startWebRTC: невозможно запустить webRTC: ',ошибка); } } функция createTheOffer(роль) { пытаться { pc.createOffer().then(offer => pc.setLocalDescription(offer)).then(() => { console.log(`Запуск SDP для ${role}.......`); если (роль == 'отправитель') { код = Math.floor(Math.random() * 9000) + 1000; alert(`Код подключения: ${code}`); } Еще если (роль == 'получатель') { код = document.querySelector('#connection_code').value; if(code.trim() === '') { alert('Пожалуйста, введите код подключения'); вернуть ложь; } } пусть сообщение = { роль: роль, код: код, тип: «соединение», ICE: pc.localDescription }; sendMessageToServer (Сообщение); }); создатьКанал(); } поймать (ошибка) { showCatchError('createTheOffer: невозможно создать предложение: ',ошибка); } } асинхронная функция createAnswer (предложение) { console.log('Отправить ответ.....'); дождитесь pc.setRemoteDescription(предложение); pc.createAnswer().then(ответ =\> { pc.setLocalDescription(ответ); console.log(`ответ: ${ответ}`); пусть сообщение = { роль: «получатель», код: код, наберите ответ', ICE: ответ }; sendMessageToServer (Сообщение); }); } асинхронная функция handleAnswer(ответ) { console.log(`Обработка ответа.....${ответ}`); await pc.setRemoteDescription(new RTCSessionDescription(ответ)); } функция queryByCode(код, роль){ пытаться { пусть сообщение = { роль: роль, код: код, тип: «соединение», ICE: pc.localDescription }; sendMessageToServer (Сообщение); } поймать (ошибка) { showCatchError('inquiryByCode: невозможно отправить запрос: ',ошибка); } } функция createChannel() { пытаться { const dataChannel = pc.createDataChannel('textChannel'); console.log('НАЧАЛО КАНАЛА ДАННЫХ'); dataChannel.onopen = () => { console.log('Канал данных открыт'); document.querySelector('#send_button').addEventListener('click', function() { пусть user_message = document.querySelector('#send_message').value; sendMessage (user_message); }); }; dataChannel.onerror = функция (ошибка) { console.log('ОШИБКА КАНАЛА ДАННЫХ: ',ошибка); showCatchError("Ошибка канала данных:",error); // Обработка ошибки здесь }; // Сторона получателя pc.ondatachannel = (событие) => { константный канал данных = event.channel; dataChannel.onmessage = (событие) => { console.log('Получено сообщение:', event.data); // Обработка полученного сообщения }; }; // Отправляем текстовое сообщение от отправителя получателю функция sendMessage (сообщение) { if (dataChannel.readyState === 'открыть') { dataChannel.send (сообщение); console.log('Сообщение отправлено:', message); } еще { console.error('Канал данных не открыт'); } } } поймать (ошибка) { showCatchError('createChannel: невозможно создать канал: ',ошибка); } } функция sendMessageToServer(Msg) { пытаться { сокет.send(JSON.stringify(Msg)); } поймать (ошибка) { showCatchError('sendMessageToServer: невозможно отправить: ', ошибка); } } функция checkPeerConnectionState() { console.log(`Конфигурация:`,ПК); console.log(`Состояние соединения ICE`, pc.iceConnectionState); } функция showCatchError(сообщение, ошибка){ console.error(msg, error.message); }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не удалось разрешить зависимость: org.webrtc:google-webrtc:1.0.32006 в Котлине.
Anonymous » » в форуме JAVA - 0 Ответы
- 82 Просмотры
-
Последнее сообщение Anonymous
-