Привет всем читателям!
Я продолжаю тему программного эмулятора для PlayStation 2 и PlayStation Portable — Omega Red. Более подробно:
Данную публикацию я написал в связи с новым функционалом, добавленным мной в проект — стриминговое вещание живого видео и аудио игрового процесса с эмулятора на известные стриминговые сервисы Интернета.
Добро пожаловать под «кат».
![](https://habrastorage.org/r/w1560/webt/yw/vd/su/ywvdsud17xrfppexxc7u2-tinh4.png)
Для начала отмечу следующее — идея встроить поддержку Интернет вещания возникла из другого моего проекта — CaptureManager SDK. Я эксперементировал с вещанием с веб-камеры и получил работоспособный код. И «пришла» идея — встроить этот код в эмулятор игровой приставки!
Задача интерестна следующими аспектами: захват видео и аудио. Захват с камеры достаточно прост, но что делать с захватом видео с рендерера эмулятора!?! Можно найти код для захвата всего рабочего стола — но это так ПРОСТО. А что, если захватывать графику напрямую с графического рендерера! Подобная идея и с захватом аудио — обычно захват аудио проводится с системного микшера как дубликация аудио потока на акустику-спикеры. А что, если захватывать аудио напрямую с аудио рендерера ДО системного микшера!
Интерестно! Оригинально!
Как это реализовано: добавлен код захвата в DirectX 11 рендерер и DirectSound рендерер. Результат отрисовки графики напрямую передаётся в Н264 видео кодировщик через DirectX 11 видео текстуру — это позволяет использовать аппаратное ускорение кодирования видео на графическом ускорителе. Аудио поток направляется в аудио кодировщик ААС встроенный в Windows.
Управление захвата состоит из двух частей:
Настройка кодирования:
![](https://habrastorage.org/r/w1560/webt/yw/vd/su/ywvdsud17xrfppexxc7u2-tinh4.png)
Настройка стриминга начинается с выбора режима захвата — «Стриминг». В этом режиме можно настроить скорость данных для видео и аудио потоков в соответствии с доступной скоростью Интернет соединения. Отдельно можно выбрать стриминговый сервис или НАБРАТЬ В РУЧНУЮ полный адрес стримингового сервера — к примеру СОБСТВЕННОГО сервера на базе MonaServer. Важно отметить, что поддерживается не только открытое соединение, но и защищенное подключение (SSL)! Стриминговый сервис Facebook (да, есть такое) опубликовал следующее объявление:
«С 1 ноября 2019 г. мы прекращаем поддержку URL-адресов RTMP-сервера. После этого незащищенные URL не смогут использоваться для видеотрансляций. Обновите настройки устройства видеокодирования и используйте защищенные URL RTMPS» — я решил что поддержка RTMPS перспективна и потратил время на «прикручивание» OpenSSL к RTMP библиотеке. И код РАБОТАЕТ!!! Facebook принимает стрим по защищённому соединению!
Стрим начинается с нажатия на кнопку записи/стриминга:
![](https://habrastorage.org/r/w1560/webt/xo/ew/be/xoewbeahbitpdffz8lpbagb0jdw.png)
Настройка микшера становится доступной после начала записи/стриминга:
![](https://habrastorage.org/r/w1560/webt/h_/hr/rs/h_hrrsebqopsg3runhhxptjjxve.png)
На панели «Медиа» становится доступной вкладка «Медиа источники» — эта вкладка включает источники видео и аудио потоков доступные для микширования. Дополнительно к веб-камерам и микрофонам можно добавить JPG/PNG/GIF(анимированые) файлы.
Для микрофонов можно управлять пропорцией смешивания аудио потоков. Выбор микрофона осуществляется нажатием на check button, управление смешиванием производится слайдером.
![](https://habrastorage.org/r/w1560/webt/6y/hr/k8/6yhrk8g_wh0mpzjlt0-idt9g2a8.png)
Для видео источника можно управлять смешиванием видео потоков. Выбор камеры осуществляется нажатием на check button, выбор размера изображения с камеры выбирается через выподающее меню.
![](https://habrastorage.org/r/w1560/webt/wf/lq/bt/wflqbt1ruogthoguy7or_8-ejok.png)
Прозрачностью (или не прозрачностью) смешивания можно управлять через отдельный слайдер.
![](https://habrastorage.org/r/w1560/webt/xh/ww/md/xhwwmdlz11iadtjifp-8pquxg38.png)
Положение и размер смешивания видео потоков может быть изменено во время стриминга в любой момент:
![](https://habrastorage.org/r/w1560/webt/em/g5/wx/emg5wxz_g5okwcbwhh7mhzhwvvo.png)
Демонстрация стриминга:
В настоящий момент программа доступна по ссылке: Omega Red и представлена на GitHub: OmegaRed.
P.S. Качество видео на стриме фиговое — у меня Интернет по ADSL — устойчивый стрим на YouTube только при скорости видео потока до 256 Kbit — плеваться в экран не надо — не поможет.
Я продолжаю тему программного эмулятора для PlayStation 2 и PlayStation Portable — Omega Red. Более подробно:
- PS2/PSP эмулятор + Google Drive + YouTube = «безумие» продолжается
- Как я подружил PlayStation 2 и PlayStation Portable (спойлер — объединил в один эмулятор)
- Красный Омега PS2 эмулятор
Данную публикацию я написал в связи с новым функционалом, добавленным мной в проект — стриминговое вещание живого видео и аудио игрового процесса с эмулятора на известные стриминговые сервисы Интернета.
Добро пожаловать под «кат».
![](https://habrastorage.org/webt/yw/vd/su/ywvdsud17xrfppexxc7u2-tinh4.png)
Для начала отмечу следующее — идея встроить поддержку Интернет вещания возникла из другого моего проекта — CaptureManager SDK. Я эксперементировал с вещанием с веб-камеры и получил работоспособный код. И «пришла» идея — встроить этот код в эмулятор игровой приставки!
Задача интерестна следующими аспектами: захват видео и аудио. Захват с камеры достаточно прост, но что делать с захватом видео с рендерера эмулятора!?! Можно найти код для захвата всего рабочего стола — но это так ПРОСТО. А что, если захватывать графику напрямую с графического рендерера! Подобная идея и с захватом аудио — обычно захват аудио проводится с системного микшера как дубликация аудио потока на акустику-спикеры. А что, если захватывать аудио напрямую с аудио рендерера ДО системного микшера!
Интерестно! Оригинально!
Как это реализовано: добавлен код захвата в DirectX 11 рендерер и DirectSound рендерер. Результат отрисовки графики напрямую передаётся в Н264 видео кодировщик через DirectX 11 видео текстуру — это позволяет использовать аппаратное ускорение кодирования видео на графическом ускорителе. Аудио поток направляется в аудио кодировщик ААС встроенный в Windows.
Управление захвата состоит из двух частей:
- настройка кодирования и выбора стримингового сервиса Интернета для трансляции живого видео;
- настройка микшера — смешивание живого видео с дополнительными источниками (веб-камера, JPG/PNG/GIF(анимированые) файлов).
Настройка кодирования:
![](https://habrastorage.org/webt/yw/vd/su/ywvdsud17xrfppexxc7u2-tinh4.png)
Настройка стриминга начинается с выбора режима захвата — «Стриминг». В этом режиме можно настроить скорость данных для видео и аудио потоков в соответствии с доступной скоростью Интернет соединения. Отдельно можно выбрать стриминговый сервис или НАБРАТЬ В РУЧНУЮ полный адрес стримингового сервера — к примеру СОБСТВЕННОГО сервера на базе MonaServer. Важно отметить, что поддерживается не только открытое соединение, но и защищенное подключение (SSL)! Стриминговый сервис Facebook (да, есть такое) опубликовал следующее объявление:
«С 1 ноября 2019 г. мы прекращаем поддержку URL-адресов RTMP-сервера. После этого незащищенные URL не смогут использоваться для видеотрансляций. Обновите настройки устройства видеокодирования и используйте защищенные URL RTMPS» — я решил что поддержка RTMPS перспективна и потратил время на «прикручивание» OpenSSL к RTMP библиотеке. И код РАБОТАЕТ!!! Facebook принимает стрим по защищённому соединению!
Стрим начинается с нажатия на кнопку записи/стриминга:
![](https://habrastorage.org/webt/xo/ew/be/xoewbeahbitpdffz8lpbagb0jdw.png)
Настройка микшера становится доступной после начала записи/стриминга:
![](https://habrastorage.org/webt/h_/hr/rs/h_hrrsebqopsg3runhhxptjjxve.png)
На панели «Медиа» становится доступной вкладка «Медиа источники» — эта вкладка включает источники видео и аудио потоков доступные для микширования. Дополнительно к веб-камерам и микрофонам можно добавить JPG/PNG/GIF(анимированые) файлы.
Для микрофонов можно управлять пропорцией смешивания аудио потоков. Выбор микрофона осуществляется нажатием на check button, управление смешиванием производится слайдером.
![](https://habrastorage.org/webt/6y/hr/k8/6yhrk8g_wh0mpzjlt0-idt9g2a8.png)
Для видео источника можно управлять смешиванием видео потоков. Выбор камеры осуществляется нажатием на check button, выбор размера изображения с камеры выбирается через выподающее меню.
![](https://habrastorage.org/webt/wf/lq/bt/wflqbt1ruogthoguy7or_8-ejok.png)
Прозрачностью (или не прозрачностью) смешивания можно управлять через отдельный слайдер.
![](https://habrastorage.org/webt/xh/ww/md/xhwwmdlz11iadtjifp-8pquxg38.png)
Положение и размер смешивания видео потоков может быть изменено во время стриминга в любой момент:
![](https://habrastorage.org/webt/em/g5/wx/emg5wxz_g5okwcbwhh7mhzhwvvo.png)
Демонстрация стриминга:
В настоящий момент программа доступна по ссылке: Omega Red и представлена на GitHub: OmegaRed.
P.S. Качество видео на стриме фиговое — у меня Интернет по ADSL — устойчивый стрим на YouTube только при скорости видео потока до 256 Kbit — плеваться в экран не надо — не поможет.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой эмулятор следует добавить в Omega Red?
21.74% PS1 — мечтаю стримить MGS5
39.13% Nintendo64 — мечтаю стримить The Legend of Zelda: Ocarina of Time9
60.87% PS5 — как тебе такое, Илон Маск?14
Проголосовали 23 пользователя. Воздержались 15 пользователей.