Около шести месяцев назад мне удалось успешно закодировать собственный сервер WebSocket script в PHP. Благодаря этому мне удалось настроить службу видеочата WebRTC на моем локальном хосте. Я был очень доволен, пока не понял, что для его развертывания мне нужен веб-сервер, который дал мне доступ к сокетам.
К сожалению, ни один общий веб-хостинг не позволяет сокеты, а все веб-серверы, предлагающие сокеты, стоят дорого. Хотя это не эффективное решение в широких масштабах, для создания демонстрации для показа людей, я хочу изменить метод сигнализации с WebSocket на Ajax, чтобы я мог показать услугу видеочата WebRTC, которую я сделал.
С этой целью я пытался что-то закодировать в течение последних нескольких дней, но не имел успеха в том, чтобы заставить однопользователей WebRTC захватывать друг друга видео.
В настоящий момент, когда один клиент подключается к script, я использую Ajax для отправки запроса на PHP скрипт, который проверяет наличие других активных пользователей в БД. Если нет, script затем создает предложение и помещает предложение в БД. После этого клиент проверяет отдельный PHP скрипт каждую секунду, чтобы проверить ответ от другого клиента, подключающегося к script.
Затем я подключаюсь к script другому клиенту, который запрашивает тот же PHP скрипт и DB, который затем понимает, что активный пользователь (первое соединение) уже отправил предложение, которое второе клиент получает и устанавливает для удаленного описания. Затем второй клиент создает ответ, который помещается в БД.
На этом этапе первый клиент (который опрос DB каждый раз) обнаруживает, что присутствует ответ, и устанавливает ответ в качестве удаленного описания для первого клиента. К сожалению, даже после успешного выполнения всего этого, клиентское видео не появляется.
Итак, здесь, когда я смущен и имею три (многочастных) вопроса:
1) Я подумал, что после того, как оба клиента установят свое локальное описание, а затем отправят это локальное описание другому клиенту, а другой клиентский набор, получивший описание в качестве удаленного описания, которое должно было запускать событие onaddstream, что позволяет мне отобразить удаленное видео. Однако этого не происходит. Это работало хорошо, прежде чем я использовал WebSocket, но он не работает вообще с чистым Ajax. Есть ли что-то особенное, чего я не хватает? За последние шесть месяцев изменилась спецификация WebRTC радикально? Я пробовал смотреть спецификации WebRTC, но я не вижу серьезных изменений.
2) После того, как я разочарован тем, что не работал с Ajax, я вернулся к своей версии WebSocket и загрузил его на свой локальный хост. Я вообще не изменил код с тех пор, как использовал его (который отлично работал шесть месяцев назад), но теперь, когда я пытаюсь его использовать, иногда он работает, а иногда и нет. Иногда я получаю ошибки, связанные с невозможностью установки локальных и/или удаленных описаний. Что с этим? Были ли изменения в спецификациях, которые могли бы привести к этому? В связи с этим, несмотря на то, что я не могу заставить удаленные видео всплывать с версией Ajax, я отдал много информации на консоль, и похоже, что и с Ajax-версией, иногда локальные и удаленные описания для обоих клиентов успешно настроены, а иногда возникают ошибки при попытке установить локальные/удаленные описания по любой причине, даже если я выполняю то же самое script каждый раз без каких-либо изменений. Я использую последнюю версию Chrome, и я начинаю задаваться вопросом, есть ли там ошибка или что-то в этом роде.
3) Требуется ли обработчик события onicecandidate для установления соединения? Мое предположение заключалось в том, что сверстники могли установить соединение с просто действительным предложением и ответом и что событие onicecandidate использовалось для предоставления альтернативных маршрутов и т.д., Что могло бы привести к лучшему соединению (но не обязательно). Я ошибаюсь? Если требуется информация onicecandidate, как вы рекомендуете, я обрабатываю это с помощью Ajax в качестве метода сигнализации?
Я знаю, что много информации и много вопросов, но любая информация/проницательность, которую может предложить любой, будет очень оценена. Я на мгновение ударился головой о стол, пытаясь понять это, и ничего не имеет смысла.