Я пытаюсь создать систему вещания (потоковая передача от одного до многих) с использованием WebRT C. Механизм, который я использую, представляет собой древовидную структуру, в которой узел root отправляет поток своим дочерним узлам, а каждый дочерний узел отправляет данные своим детям и т. Д. c.
Я столкнулся с двумя проблемами один с телефоном android, а другой с устройством iOS.
1) Самый простой воспроизводимый пример:
Root -> Android -> Node
Проблема как следует. Когда телефон Android принимает поток от root, у него нет проблем с его воспроизведением, но когда он пересылает поток, принимающий узел не может видеть видео, он может только слышать звук.
2) Простейший воспроизводимый пример выглядит следующим образом:
Root -> iOS -> NodeA -> NodeB
Проблема заключается в следующем (это странная проблема). Когда устройство iOS получает поток от root, оно не испытывает проблем с его воспроизведением, равно как и NodeA, но когда NodeB принимает поток от NodeA, оно не может видеть видео, оно может только слышать аудио.
В обоих случаях проверка объекта MediaStream
показывает, что он содержит как звуковую дорожку, так и видеодорожку.
Моя первоначальная мысль: возникла некоторая проблема с реализацией библиотеки, которую я используя peerJS
, но после некоторых исследований я обнаружил, что та же проблема возникает в Muaz Khan - Scalable Broadcast . Теперь, возможно, причина, по которой эта проблема также возникает в предоставленной ссылке, заключается в том, что, подобно peerJS
, они являются довольно старыми библиотеками, но это не кажется мне очень вероятным. Я более склонен думать, что с MediaStream
есть какая-то странность, что видео MediaStreamTrack
умирает.
Причина, по которой я больше склонен верить, заключается в том, что решение, которое я придумал, которое работает, но резко снижает качество потока, заключается в воссоздании видеодорожки MediaStream. Я могу переслать поток еще раз. Я воссоздаю поток следующим образом:
1) В сценарии Android я рисую видео на холст на телефоне Android, а затем с помощью canvas.captureStream
получаем объект MediaStream
Я добавляю звуковую дорожку из удаленного объекта MediaStream
к этому новому и пересылаю новый объект MediaStream
.
2) В сценарии iOS это то же решение, что и Android телефон, но я рисую на холсте на NodeA (то есть на узле, который подключен к устройству iOS
Есть мысли?