Порекомендуйте библиотеку и язык программирования для кодирования видео

Я хочу написать мыльный веб-сервис, как Coconut

Coconut::Job.create(
  "api_key" => "k-api-key",
  "vars" => {"cdn" => "s3://accesskey:secretkey@mybucket", "vid" => 1234},
  "source" => "mysite.com/media/video.mp4",
  "outputs" => {
    "mp4" => "$cdn/videos/$vid/video.mp4",
    "webm" => "$cdn/videos/$vid/video.webm",
    "hls" => "$cdn/hls/$vid/video.m3u8",
    "dash" => "$cdn/dash/$vid/video.mpd",
    "jpg:300x" => "$cdn/previews/$vid/thumbs_%1d.jpg, number=3",
    "gif:150x" => "$cdn/previews/$vid/animated.gif"
  }
)

Теперь я хочу написать что-то вроде этого, но у меня есть две мысли, чтобы выбрать java или что-то вроде PHP, потому что мои оригинальные коды написаны на PHP, кажется, что наиболее используемая библиотека - это ffmpeg. для PHP я нашел эту библиотеку https://github.com/PHP-FFMpeg/PHP-FFMpeg для Java, я нашел следующие библиотеки: JAVE,JMF,SMF.

Буду признателен, если кто-нибудь скажет мне, какой язык и какую библиотеку и почему эта библиотека (скорость или функции или...)

1 ответ

Решение

Исходя из вашего запроса, язык сервера практически не имеет значения в тех, которые вы упомянули. Бит, который делает хруст, это ffMpeg, и это самое главное. Поскольку у вас уже есть элемент управления / интерфейс в PHP, оставайтесь с ним.

Предложение помочь: не используйте библиотеку ffMPEG. Создайте свои собственные команды и используйте exec для запуска. Причины: - это проще (и это все, что делает библиотека в любом случае) - ffMPEG имеет gazillion опций / шагов настройки, которые иногда невозможно встроить в библиотеку - однако вы должны убедиться, что ваша команда "безопасна"

Если вы смотрите на другие языки, вы можете сделать гораздо хуже, чем NodeJS; есть разумная библиотека для ffMPEG (хотя см. примечание о том, что передача параметров может быть невозможна для сверхсложных вещей), и преимущество в том, что NodeJS может передавать управление другим запросам, когда запущен ffMPEG (PHP, JAVA и др. сохранят запрос открыть и удерживать, когда работает ffMPEG).

Недостатком NodeJS является то, что если вы используете CTRL-C приложение, то вы не сможете изящно управлять ffMPEG с помощью SigTerm. Но это становится все более продвинутым, и простое решение не состоит в том, чтобы ctrl-C приложение:)

Также обратите внимание, что ffMPEG должен запускаться только по одному (на ядро ​​процессора), как общее правило. Удерживайте задачи ffMPEG в очереди и обрабатывайте только по одной за раз. Это означает, что вы можете использовать PHP для обработки HTTP-запросов и помещения в очередь, а также другой язык для запуска ffMPEG (но, опять же, может остаться с PHP, но NodeJS будет лучше выполнять это, но не как службу).

Проверьте очереди REDIS и / или RabbitMQ для вариантов очереди, кросс-совместимых с NodeJS и PHP.

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