Как вести трансляцию из приложения 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. Я не уверен, что вы пытаетесь транслировать, поскольку в зависимости от этого решение будет несколько более или менее сложным. Два основных случая:
- если вы пытаетесь транслировать существующий файл или что-то с экрана, вы можете просто использовать ffmpeg в качестве исполняемого файла командной строки в вашем приложении C#.
- если вы передаете потоковые данные в произвольном формате, это немного сложнее, и вам придется вручную вызывать 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 - сделайте это, это довольно дешево для своей базовой версии. Это то, что я все равно сделал по тому же пути, что и ты.