Видеочат WebRTC с Ajax вместо WebSocket: возможно?

Около шести месяцев назад я смог успешно написать свой собственный скрипт сервера WebSocket на PHP. Благодаря этому я смог настроить службу видеочата WebRTC на своем локальном хосте. Я был очень счастлив, пока не понял, что для его развертывания мне нужен веб-сервер, который дает мне доступ к сокетам.

К сожалению, ни один общий веб-хостинг не позволяет использовать сокеты, и все веб-серверы, предлагающие сокеты, дороги. Хотя это не является эффективным решением в больших масштабах, ради создания демонстрации, чтобы показать людям, я хочу изменить метод сигнализации с WebSocket на Ajax, чтобы я мог похвастаться созданной мной услугой видеочата WebRTC.

С этой целью я пытался что-то кодировать последние несколько дней, но не смог добиться того, чтобы одноранговые участники WebRTC захватывали видео друг друга.

В тот момент, когда к клиенту подключается один клиент, я использую Ajax для отправки запроса к сценарию PHP, который проверяет, есть ли в БД другие активные пользователи. Если нет, то сценарий создает предложение и помещает предложение в БД. После этого клиент опрашивает отдельный PHP-скрипт каждую секунду, чтобы проверить ответ другого клиента, подключающегося к скрипту.

После этого я подключаюсь к сценарию от другого клиента, который запрашивает тот же сценарий PHP и БД, который затем понимает, что активный пользователь (первое подключение) уже опубликовал предложение, которое второй клиент получает и устанавливает для удаленного описание. Затем второй клиент создает ответ, который помещается в БД.

На этом этапе первый клиент (который опрашивает БД каждую секунду) обнаруживает, что ответ присутствует, и устанавливает этот ответ в качестве удаленного описания для первого клиента. К сожалению, даже после успешного выполнения всего этого, видео другого клиента не появляется.

Итак, вот где я запутался и у меня есть три (многочастных) вопроса:

1) Я подумал, что после того, как оба клиента установили свое локальное описание, а затем отправили это локальное описание другому клиенту, а другой набор клиентов, который получил описание в качестве удаленного описания, должно было инициировать событие onaddstream, что позволило мне отобразить удаленное видео. Однако этого не происходит. Это работало хорошо раньше, когда я использовал WebSocket, но это не работает вообще с чистым Ajax. Что-то, в частности, я пропускаю? Изменились ли технические характеристики WebRTC за последние шесть месяцев? Я пытался посмотреть спецификации WebRTC, но не вижу каких-либо серьезных изменений.

2) После того, как я разочаровался в том, что все не работает с Ajax, я вернулся к своей версии WebSocket и загрузил ее на свой локальный хост. Я совсем не менял код с момента его последнего использования (который работал шесть месяцев назад), но сейчас, когда я пытаюсь его использовать, иногда он работает, а иногда нет. Иногда я получаю ошибки, связанные с невозможностью установить локальные и / или удаленные описания. Что с этим? Были ли изменения в спецификациях, которые могли бы вызвать это? В связи с этим, даже несмотря на то, что я не могу заставить удаленные видео всплывать с версией Ajax, я выводил на консоль множество вещей, и похоже, что и с версией Ajax, иногда локальная и Удаленные описания для обоих клиентов успешно настроены, и иногда возникают ошибки при попытке установить локальные / удаленные описания по какой-либо причине, хотя я запускаю один и тот же сценарий каждый раз без каких-либо изменений. Я использую последнюю версию Chrome и начинаю задумываться, есть ли в ней ошибка или что-то в этом роде.

3) Требуется ли обработчик события onicecandidate для установления соединения? Мое предположение состояло в том, что одноранговые узлы могли установить соединение просто с действительными предложением и ответом, и что событие onicecandidate использовалось для предоставления альтернативных маршрутов и т. Д., Что могло бы привести к улучшению соединения (но не обязательно). Я ошибаюсь? Если требуется информация onicecandidate, как вы рекомендуете обрабатывать это с Ajax в качестве метода сигнализации?

Я знаю, что это много информации и много вопросов, но любая информация / понимание, которое может предложить каждый, будет очень цениться. Последние пару дней я бился головой о стол, пытаясь понять это, и ничего не имеет смысла.

Ответы на вопрос(3)

Ваш ответ на вопрос