Потоковая передача приложений с H.264 / H.265 в режиме реального времени на браузерные клиенты

1012
scriptify

Я пытаюсь создать решение для потоковой передачи визуального содержимого приложения Windows (созданного в Unity 2017) клиентам браузера. Эти приложения обеспечивают высококачественный контент, который необходимо передавать в формате 1: 1 с высоким качеством с минимально возможной задержкой. По сути, это очень похожий случай использования на потоковую игру, потому что помимо потоковой передачи установлен двунаправленный канал связи между клиентом и потоковым приложением, так что пользователь может взаимодействовать с приложением, запущенным на сервере.

Видео напрямую захватывается изнутри Unity и передается в виде необработанного видео в процесс FFMPEG, созданный ранее. FFMPEG теперь конвертирует данные из Unity в подходящий поток. Кроме того, я хотел бы использовать SDK NVIDIA Video Codec для ускорения процесса.

Является ли H.264 / H.265 подходящим форматом для этого варианта использования? Если да, какой сервер можно использовать для передачи видеопотока, а какой - на стороне клиента (например, BroadwayJS https://github.com/mbebenita/Broadway )? Если нет, что бы вы предложили?

Примечание: я уже пытался реализовать решение с помощью JSMPEG (поэтому использовал mpeg-1 / mpeg-ts, ffmpeg и пользовательский сервер), но у этой реализации есть несколько проблем, таких как высокая пропускная способность и высокая загрузка ЦП. Я надеюсь, что используя H.264 / H.265 в сочетании с SDK NVIDIA Video Codec, я смогу, по крайней мере, снизить использование оборудования и пропускной способности.

На стороне клиента нельзя использовать Flash или Silverlight.

0
Это уже не в реальном времени больше. Даже графическому процессору NVIDIA потребуется время, чтобы перекодировать сигнал. Вы пытались просто открыть поток с помощью браузера? Seth 6 лет назад 1
Хорошо, какой формат вы бы предложили? Как я могу открыть поток, не используя сервер, который пересылает его соответственно (обратите внимание, что я новичок в этой теме)? scriptify 6 лет назад 0
Я отредактировал вопрос и попытался добавить больше деталей и что именно я хотел бы достичь. scriptify 6 лет назад 0
[ffserver из документации ffmpeg] (https://www.ffmpeg.org/ffserver.html#Synopsis) и ffmpeg напрямую поддерживает использование [вашего gpu] (https://developer.nvidia.com/ffmpeg). Если вы хотите высокое качество и низкую задержку, у вас будет высокая пропускная способность и использование ресурсов. Почти во всех случаях эти вещи противоречат друг другу. Либо используйте высокое сжатие (которое требует вычислительной мощности), либо высокую пропускную способность (меньшее сжатие). Больше вычислений требует больше времени, поэтому задержка возрастает. Вы можете попробовать OBS, чтобы почувствовать эти переменные. Seth 6 лет назад 0
Итак, я посмотрю на ffserver. Я понимаю, это кажется довольно ясным. Я подумал, что используя более продвинутый формат, такой как HVEC, я смогу уменьшить эти цифры. В любом случае, сейчас я попытаюсь поиграться с ffserver (я думал, что разработка этого проекта прекращена, но, похоже, он не выглядит так в git repo). Спасибо за ваше объяснение! scriptify 6 лет назад 0
HEVC требует больше вычислительной мощности для кодирования, что увеличивает задержку. Кроме того, он не поддерживается ни в одном браузере, кроме Safari в macOS и Microsoft Edge, если это поддерживается аппаратным обеспечением. На данный момент ваш единственный выбор для потоковой передачи в браузеры - это H.264 и VP9. Рассмотрим NVENC для кодирования H.264. slhck 6 лет назад 0
Хорошо, я попробую. Спасибо! scriptify 6 лет назад 0

0 ответов на вопрос

Похожие вопросы