Добрый день.
Стоит довольно интересная задача, с которой пока не удалось справиться полностью.
Опишу сначала сетап, а потом вопросы. Текста многовато, заранее прошу прощения.
Пытаемся заимплеменитить своеобразную видео студию онлайн. На клиентской стороне мы получаем активные WebRTC стримы (объекты MediaStream). Это может быть как видео с нескольких камер, подключенных к данному клиентскому устройству, так и видео удаленных пиров. По факту имеем массив MediaStream. Один из стримов выбирается активным, после чего устанавливается сессия с WCS и стартуется стрим с указанной RTMP урлой. Такая схема "условно" рабочая (есть проблемы с качеством, но про это я уточню в блоке вопросов).
Главные сложности начинаются при попытке изменить активный WebRTC стрим. Стоит отметить, что при запустке Flashphoner стрима всегда создается новый объект MediaStream (назовем его Live Stream) и к нему добавляются клоны трэков выбранного WebRTC стрима. Я пробовал различные сценарии:
- самый логичный и в теории самый правильный - замена трэков. Как и при запуске нового, получаем массив клонов трэков вновь выбранного WebRTC стрима, очищаем все трэки Live Stream-a и вместо них вставляем клоны. При таком сценарии секунд через 10 Flashphoner стрим просто фейлится...
- пробовал "паузить" Flashphoner стрим. На паузе опять же пытался подменить трэки и сам сustomStream. Но судя по всему из паузы снова стартануться нельзя
- и наконец единственный рабочий вариант, который далек от совершенства: стопаю Flashphoner стрим. После на коллбэке .on(STREAM_STATUS.UNPUBLISHED) создается и стартует новый стрим с обновленным Live Stream. Главная проблема этого сценария в том, что при стопе потока RTMP стрим "падает". Он, конечно, перезапуститься через некоторое время (часто нужно перезагружать плэйер), но это недопустимо при live стриминге.
И, наконец, конкретные вопросы:
1) (и самый важный) Каким образом возможно подменять WebRTC трэки или весь WebRTC стрим на лету, без приостановки потока?
2) При обычной трансляции WebRTC-RTMP, когда сам Web SDK захватывает картинку с камеры и микрофона можно было поиграться битрэйтом, чтобы RTMP получал видео нормального качества. Когда же в constraints я передаю customStream, то ничего не могу передать в video constraints, стрим тупо не стартуется и выходное качество ужасное. Как в случае customStream настроить битрэйты, кодеки и проч?
3) Качество звука оставляет желать лучшего, подозреваю это тоже можно настроить, и скорее всего на серверной стороне. Подскажите, пожалуйста, как?
Стоит довольно интересная задача, с которой пока не удалось справиться полностью.
Опишу сначала сетап, а потом вопросы. Текста многовато, заранее прошу прощения.
Пытаемся заимплеменитить своеобразную видео студию онлайн. На клиентской стороне мы получаем активные WebRTC стримы (объекты MediaStream). Это может быть как видео с нескольких камер, подключенных к данному клиентскому устройству, так и видео удаленных пиров. По факту имеем массив MediaStream. Один из стримов выбирается активным, после чего устанавливается сессия с WCS и стартуется стрим с указанной RTMP урлой. Такая схема "условно" рабочая (есть проблемы с качеством, но про это я уточню в блоке вопросов).
Главные сложности начинаются при попытке изменить активный WebRTC стрим. Стоит отметить, что при запустке Flashphoner стрима всегда создается новый объект MediaStream (назовем его Live Stream) и к нему добавляются клоны трэков выбранного WebRTC стрима. Я пробовал различные сценарии:
- самый логичный и в теории самый правильный - замена трэков. Как и при запуске нового, получаем массив клонов трэков вновь выбранного WebRTC стрима, очищаем все трэки Live Stream-a и вместо них вставляем клоны. При таком сценарии секунд через 10 Flashphoner стрим просто фейлится...
- пробовал "паузить" Flashphoner стрим. На паузе опять же пытался подменить трэки и сам сustomStream. Но судя по всему из паузы снова стартануться нельзя
- и наконец единственный рабочий вариант, который далек от совершенства: стопаю Flashphoner стрим. После на коллбэке .on(STREAM_STATUS.UNPUBLISHED) создается и стартует новый стрим с обновленным Live Stream. Главная проблема этого сценария в том, что при стопе потока RTMP стрим "падает". Он, конечно, перезапуститься через некоторое время (часто нужно перезагружать плэйер), но это недопустимо при live стриминге.
И, наконец, конкретные вопросы:
1) (и самый важный) Каким образом возможно подменять WebRTC трэки или весь WebRTC стрим на лету, без приостановки потока?
2) При обычной трансляции WebRTC-RTMP, когда сам Web SDK захватывает картинку с камеры и микрофона можно было поиграться битрэйтом, чтобы RTMP получал видео нормального качества. Когда же в constraints я передаю customStream, то ничего не могу передать в video constraints, стрим тупо не стартуется и выходное качество ужасное. Как в случае customStream настроить битрэйты, кодеки и проч?
3) Качество звука оставляет желать лучшего, подозреваю это тоже можно настроить, и скорее всего на серверной стороне. Подскажите, пожалуйста, как?