Добро пожаловать в гостиСообщество разработчиков RTC, чтобы обменяться опытом с другими разработчиками WebRTC.
WebRTC на веб-платформе — не единственный медиа API. Спецификация WebVR была введена несколько лет назад для обеспечения поддержки устройств виртуальной реальности в браузере. теперь стал новымСпецификация API устройства WebXR.
Дэн Дженкин говорит, что добавить поток видеоконференций WebRTC в среду виртуальной реальности с помощью WebVR, FreeSWITCH относительно просто. FreeSWITCH — популярная платформа телефонии с открытым исходным кодом, в которой уже несколько лет используется WebRTC.
Дэн — разработчик Google, который любит рассказывать о сочетании новейших веб-API с приложениями RTC. В следующей статье приведен его код, иллюстрирующий, как он превратил видеоконференцию FreeSWITCH Verto WebRTC в конференцию виртуальной реальности с помощью WebVR.
Несколько недель назад я посетил семинар по WebRTC иWebVR деятельность. Добавление VR-контента в ваш браузер и мобильный телефон увеличивает потенциал приложения для привлечения множества людей. За последние два-три года благодаря Google Cardboard виртуальная реальностьмобильный телефонОн уже доступен по цене и широко доступен, а Oculus Go вообще не требует мобильного устройства. Я хочу изучить, как приложения могут использовать эту новую дешевую среду в среде WebRTC.
На самом деле, прежде чем загружать обсуждение в Call For Papers, яWebVRУ меня нет никаких подсказок, но я знаю, что могу кое-что узнать, посмотрев другие демоверсии. Я думаю, что нужно просто набраться смелости, загрузить сумасшедшую дискуссию и посмотреть, кто с ней согласится.
А-образная рама
Есть несколько способов начать работу с WebVR, я выбрал один из них, который называетсяA-Frameframework, который позволяет мне писать HTML и импортироватьJavaScriptбиблиотека для непосредственного создания опыта виртуальной реальности. Хотя демонстрация оказалась не совсем такой, как я ожидал, она показывает, что вы действительно можете добиться потрясающих впечатлений от виртуальной реальности с очень небольшим количеством кода.
если вы знакомы сВеб-композиция, вы сразу будете знать, что делает A-Frame. Теперь вы можете спросить, почему я буду использовать его вместо непосредственного использования WebGL, полифилла WebVR иThree.jsдля создания объектов WebGL или другого фреймворка. Проще говоря, мне нравится писать меньше кода, и A-Frame, кажется, удовлетворяет это.
Если вам не нравится A-Frame, вы можете попробовать другие варианты, такие какwebvr.infoВверхReact360.
Создание опыта WebVR с помощью WebRTC
Многие возможности WebRTC VR теперь возможны с использованием A-Frame.Команда МозиллыПонятно, что в VR-сцене пользователи могут видеть друг друга, представленного точками, и слышать голоса друг друга. Они реализовали этот процесс с использованием каналов данных WebRTC и аудио WebRTC, но я не смог найти нигде, где использовалось бы видео WebRTC, так что возникает вопрос, как использовать живое видео в 3D-среде.
Моя демонстрация основана на открытом исходном кодеFreeSWITCH Verto Communicator. Verto использует WebRTC, и я уже знаю, как взаимодействовать с компонентами Verto с помощью клиентской библиотеки Verto в FreeSWITCH, так что половина задачи выполнена. Клиентская библиотека Verto является отправляющей частью — замена SIP через Websocket, подключение SIP PBX с точками останова WebRTC.
HTML
Посмотрите код A-Frame, который я добавил в Verto Communicator, всего 8 строк.
Сначала элемент a-scene создает сцену, содержащую все процессы в виртуальной реальности, пустой тег a-assets используется для размещения тега видео WebRTC.
Следующая строка, a-entity, является самой важной строкой в простом опыте, который погружает пользователя. Это каркасный монолит с предварительно настроенными средами, которые расширяют общий опыт.
Другие объекты отвечают за управление камерой и фантазией. Ознакомьтесь с поддерживаемыми A-образными рамками, которые вы можете использовать при создании 3D-фигур и объектов.компоненты.
Это просто набор сцен, а затем мы строим код управляющей логики, используяJavaScript.
JavaScript
Verto Communicator — это приложение на основе angular, поэтому элементы можно добавлять или перемещать из основного пространства приложения. Нам нужна логика для соединения Verto и A-frame. Эта логика требуетМенее 40 строк кода:
function link(scope, element, attrs) {
var newVideo = document.createElement('a-video');
newVideo.setAttribute('height', '9');
newVideo.setAttribute('width', '16');
newVideo.setAttribute('position', '0 5 -15');
console.log('ATTACH NOW');
var newParent = document.getElementsByClassName('video-holder');
newParent[0].appendChild(newVideo);
window.attachNow = function(stream) {
var video = document.createElement('video');
var assets = document.querySelector('a-assets');
assets.addEventListener('loadeddata', () => {
console.log('loaded asset data');
})
video.setAttribute('id', 'newStream');
video.setAttribute('autoplay', true);
video.setAttribute('src', '');
assets.appendChild(video);
video.addEventListener('loadeddata', () => {
video.play();
// Pointing this aframe entity to that video as its source
newVideo.setAttribute('src', `#newStream`);
});
video.srcObject = stream;
}
Вышеупомянутая функция Link устанавливается, когда вы используете приложение Verto Communicator для входа в интерфейс собрания.
Изменить Верто
Как видите, когда вызывается ссылка, она создает новый элемент видео и присваивает ему свойства ширины и высоты, добавляя его в трехмерную среду.
В функции AttachNow происходит настоящее волшебство. Я модифицировал библиотеку Verto для вызова функции с именем attachNow при установлении сеанса. По умолчанию библиотека Verto использует теги в стиле jQuery для инициализации и добавления или удаления мультимедиа в теги и из них. Мне нужен поток, чтобы управлять собой, чтобы я мог добавить тег видео к пустому объекту, показанному выше. Это позволяет A-Frame выполнять свою логику — извлекать данные и загружать их на холст в теге a-video в 3D-среде.
Я такжеvertoService.jsДобавлена функция для:
function updateVideoRes() {
data.conf.modCommand('vid-res', (unmutedMembers * 1280) + 'x720');
attachNow();
document.getElementsByTagName('a-video')[0].setAttribute('width', unmutedMembers*16);
}
UpdateVideoRes предназначен для изменения выходного разрешения сеансов FreeSWITCH Verto. Когда пользователь присоединяется к собранию, мы хотим создать более продолжительную видеопрезентацию в 3D. Обязательно, каждый раз, когда присоединяется новый участник, мы расширяем вывод, чтобы пользователи могли видеть других пользователей на каждом конце.
визуальный
Это конечный результат, виртуальная среда, в которую входят я и Саймон Вудхед.
Одна приятная особенность WebVR заключается в том, что для того, чтобы все это работало, вам не нужно иметь гарнитуру VR, вы просто нажимаете кнопку, и вы получаете полноэкранный опыт виртуальной реальности, как будто вы носите гарнитуру VR. вы можете просмотретьВидео на YouTube.
Чему мы научились?
Только половина демо работала, и самый большой вывод заключался в том, что даже если работала только половина демо, это был отличный способ посмотреть видеоконференцию. Для зрителей VR добавление их в поток не является жизнеспособным вариантом, когда они смотрят с помощью гарнитуры. Возможно, именно поэтому HoloLens от Microsoft оптимизирует его для смешанной реальности.