Как вести трансляцию из приложения Windows 10 на Youtube?

Я играю с YouTube Live Stream API. Пока это работает нормально, но следующим шагом является передача данных веб-камеры на YouTube через RTMP.

В (превосходной) документации в Google Dev она описывает жизнь трансляции. Тем не менее, все шаги подробно описаны, кроме того, который мне интересен:

Шаг 3.2. Запустите видео

Начните передавать видео в ваш видеопоток.

Я смог использовать Open Broadcasting Software для потоковой передачи на вручную созданное событие YouTube Live, но я не знаю, как это сделать из моего приложения для Windows 10. Я посмотрел на класс MediaElement и смог сделать предварительный просмотр веб-камеры в своем приложении. Но я могу найти только методы для сохранения в файл.

Также найдена информация о FFMPEG, который, вероятно, должен быть в состоянии выполнить эту работу, но я не могу найти библиотеку / DLL для использования FFMPEG в моем приложении.

Мне просто нужно руководство, где искать дальше, потому что сейчас я просто не знаю, что делать.

/ edit: Я наткнулся на MPlatform SDK, который звучит именно так, как я хочу, но стоит 5000 долларов.... Не для хобби:(

2 ответа

Решение

Итак, как вы упомянули, FFmpeg действительно поддерживает потоковую передачу (вывод) через RTMP. Я не уверен, что вы пытаетесь транслировать, поскольку в зависимости от этого решение будет несколько более или менее сложным. Два основных случая:

  1. если вы пытаетесь транслировать существующий файл или что-то с экрана, вы можете просто использовать ffmpeg в качестве исполняемого файла командной строки в вашем приложении C#.
  2. если вы передаете потоковые данные в произвольном формате, это немного сложнее, и вам придется вручную вызывать libavformat/libavcodec.

Итак, во-первых, получите несколько сборок FFmpeg для Windows, например, от zeranoe. Если вы собираетесь идти по маршруту 1, просто вызовите ffmpeg.exe в вашем приложении, и все готово. Если вы хотите пойти по пути 2, загрузите соответствующие библиотеки в свой проект и следуйте инструкциям по написанию файлов с использованием libavcodec/libavformat. Я могу дать более подробную информацию, если вы скажете мне, какие данные вы хотите записать. Затем просто используйте любой из подходов, чтобы открыть поток вывода rtmp://, и все будет хорошо. (Используйте h264 в качестве видеокодека и aac в качестве аудиокодека, и убедитесь, что ваша сборка имеет поддержку x264, что делает zeranoe.)

Точно так же как @Ronald и @rogerdpack заявили - ffmpeg, вероятно, ваш лучший выбор.

Предполагая, что вы хотите захватить и обработать видео, прежде чем публиковать его на YouTube, воспользуйтесь подсказкой другого профессионального программного обеспечения.

Живое потоковое приложение VMix, которое, я уверен, также написано в.Net/WPF, использует следующий подход:

  • Захватывает видео поток, используя библиотеку Windows DirectShow или любой другой метод, который они поддерживают (у них много типов источников)
  • Внутренне обрабатывает видео, используя любой фильтр, который им нужен.
  • Представить результирующий поток данных A/V как виртуальное устройство захвата DirectShow
  • Раскрутите ffmpeg как дочерний процесс Windows с помощью переключателей командной строки, указывающих на захват с виртуального устройства и на публикацию на любом RTMP-сервере.

Если вы можете обойтись просто с помощью VMix - сделайте это, это довольно дешево для своей базовой версии. Это то, что я все равно сделал по тому же пути, что и ты.

Другие вопросы по тегам