Я пытаюсь предоставить сайт, работающий как Youtube. Чтобы предоставить пользователям возможность загружать свои видео на мой сервер с несколькими битрейтами через FFMPEG. Но когда FFMPEG создает мультибитрейтные видеофайлы из одного видео, загрузка сервера используется по максимуму. Это означает, что даже я использую самый сильный процессор на рынке, лишь несколько человек могут загрузить свои видео. Поэтому, пожалуйста, посоветуйте мне, как снизить нагрузку на процессор, когда FFMPEG делает мультибитрейтные видео.

1 ответ1

3

Самый простой ответ: если вы используете Linux или аналогичный, используйте команду nice при запуске ffmpeg.

Вы используете nice с любой стандартной командой, и она регулирует приоритет процессора команды.

Так что если вы в настоящее время используете

ffmpeg -i uploaded.mpg -vcodec copy  out1.mpg

(Кроме, очевидно, с более интересными аргументами), вы можете просто сделать

nice ffmpeg -i uploaded.mpg -vcodec copy  out1.mpg

,

Изменить: я видел, что вы используете Windows Server 2008.

В Windows заменой команды nice является использование команды START с параметрами.

Стоит прочитать эту страницу: http://technet.microsoft.com/en-us/library/cc770297.aspx

Таким образом, вы можете использовать что-то вроде:

start /wait /low /b  ffmpeg [your arguments here]
  • /wait означает запустить команду в конце и дождаться ее завершения. В противном случае он запустит ffmpeg и сразу же вернется - возможно, запустив еще одну копию ffmpeg, чтобы создать альтернативный битрейт, если вы создали подобный цикл.

  • /low бит, который говорит, что запустить процесс с низким приоритетом

  • /b означает не открывать окно командной строки, которое вам не нужно на вашем сервере.

НО

Это, вероятно, не лучший ответ. Лучшим ответом будет обработка видео на другом сервере (или серверах). Вам нужно будет совместно использовать базу данных и дисковое хранилище. Когда кто-то загружает видео, его необходимо пометить для конвертации. Затем ваша ферма рендеринга может выполнять задачи рендеринга одну за другой, сохраняя на диск и обновляя базу данных доступными битрейтами.

Разделение рендеринга таким образом имеет два преимущества:

  1. Это означает, что ваш веб-сервер не увяз в обработке видео и поэтому остается отзывчивым для пользователей
  2. Вы можете добавить больше серверов для рендеринга, если хотите (или использовать облачные сервисы).

Это идет с большой частью работы все же.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .