Как организовать запись видео-конференции?

inpost

Member
Здравствуйте. Ситуация такая:
1 человек вещает картинку для остальной конференции, в какой-то момент (через минут 15), один из участников хочет присоединиться к дискуссии так же с видео. Ещё через 15 минут - третий. Получается в конце конференции общались 3 человека, а в начале - всего 1. Как это всё сохранить для дальнейшего просмотра?

Единственное, что пришло в голову - выводить ВСЕ потоки на одном canvas и сохранять через captureStream() .
https://webrtc.github.io/samples/src/content/capture/canvas-record/

В добавок там демонстрация рисунка, к примеру, может быть. Если всё размещать на одном canvas, в теории, можно реализовать задуманное. Я подобное видел на других сайтах, но там используют flash и записывают с флэша как единый ролик.

Собственно, если можно несколько видео разместить на одном canvas и есть один ведущий, можно же настроить:
1) вывод разные видео на один canvas рядом друг с другом?
2) Вещать из этого canvas на сервер для записи?

Видео-конференция выглядит примерно так (камеры, картинка, блок с текстом):


Может уже существует такой функционал? Вроде с canvas слать на сервер для сохранения, и выводить видео-поток (камеру) в canvas в указанном участке указанного размера. Думаю этого хватило бы с головой!
 
Last edited:

inpost

Member
На свежую голову я понял, что на одно canvas полотно можно отрисовать кадр из тега video , итого если вставить 3 тега <video>, и из них кадры сохранять в canvas - будет работать и получится на одном canvas разместить несколько трансляций одновременных. Конечно хотелось бы сразу поток выводить в canvas, а не в тег video, откуда в тег canvas перебрасывать. Но я в плеере не понял, можно ли вообще такое сделать сейчас?
Если первое - это просто высокая нагрузка на страницу будет, то вот сохранить из canvas на сервер - тут у меня полное замешательство. Canvas с выводом нескольких камер надо сохранять в mp4 (или другое расширение) на сервере, то есть надо сделать захват и транслировать из canvas в flashphoner , который будет сохранять? Я подобное уже нашел на каком-то сайте американском по конференциям, уже отказались от флэша и перешли на подобный формат.
 

Max

Administrator
Staff member
Добрый день.

В последних версиях Web SDK поддерживается захват видеопотока с Canvas.
Здесь можно протестировать пример. В качестве источника стрима можно выбрать Canvas с красным прямоугольником.
https://demo.flashphoner.com/client...dia_devices_manager/media_device_manager.html
https://demo.flashphoner.com/client2/examples/demo/streaming/media_devices_manager/manager.js
 

Max

Administrator
Staff member
1 человек вещает картинку для остальной конференции, в какой-то момент (через минут 15), один из участников хочет присоединиться к дискуссии так же с видео. Ещё через 15 минут - третий. Получается в конце конференции общались 3 человека, а в начале - всего 1. Как это всё сохранить для дальнейшего просмотра?
Правильно делать такое с помощью видео микшера. На стороне сервера видео микшируется в один поток и далее записывается.
Микшер у нас реализован в версии 5.1.
Документацию можно найти здесь
Документация в процессе оформления, поэтому ссылка может поменяться.

По поводу Canvas, есть сомнения что удастся все это отрисовать на одном Canvas, захватить и застримить на сервер со стабильным FPS и при этом еще иметь синхронизованный звук со всех источников.
 

inpost

Member
Звучит хорошо. Там проблема в примере, если камера не подключена, то нельзя выбрать canvas для трансляции. А если и выбрать, то всё равно трансляция не идёт.
Давайте просто на секундочку представим, как это можно организовать:
[камера админа] [камера второго посетителя] [камера третьего посетителя]
[canvas рисования от админа]

В конечном счёте вся структура должна попасть в mp4 (запись прошедшей трансляции). Каждый из трёх пользователей транслируют потоки с камер в микшер, так же 4-ый поток будет идти от canvas. Canvas я организую на соккетах, у каждого пользователя будут лишь команды по отрисовке, поэтому тут важен только поток для трансляции на сервер, выходит для ведущего будет 2 трансляции идти на сервер: [камера админа] и [canvas], и 2 трансляции получать с сервера [второй посетитель] и [третий посетитель]. А микшер использовать только для финального сохранения всего действия (всех 4-х потоков на уровне сервера), там даже в документации есть stream/startRecording

Я почитал документацию по микшеру, вроде в теории организовать всё не сложно, лишь бы canvas работал без захвата камеры, чтобы отдельно он шел.

Получается, не хватает только возможности структурировать как раз в микшере всё:

Если такое сделать возможно, это было бы просто великолепно. Я бы задал родителя и размеры именно от полотна canvas, а уже подключаемые камеры позиционировал от top / right в пикселях.
 
Last edited:
Top