Я написал небольшой веб-сайт / сервис, который может загружать видео с веб-сайта (в настоящее время Youtube), конвертировать его на лету в mp3-файл и отправлять этот файл обратно в качестве ответа.
Например, когда вы запрашиваете http://localhost:8000/v=http://www.youtube.com/watch?v=HhoewflkQu0,, он загружает это видео и отвечает на аудиослой, закодированный в MP3.
Это все работает очень хорошо, моя проблема в том, что это очень медленно, и я не могу понять, почему.
Упрощенный скрипт ведет себя так:
Загрузите видео и запишите его на стандартный ввод ffmpeg, и стандартный вывод перейдет к ответу.
Видео (MP4, FLV) -> FFMPEG -> MP3
Я использовал curl, чтобы выяснить, насколько быстро работает скрипт:
$ curl http://localhost:8000/v=http://www.youtube.com/watch?v=HhoewflkQu0
Я получаю только около 5-10 тыс.
Так почему же это так медленно?
- Сервер, с которого я загружаю видео, работает медленно.
- Медленное преобразование (из-за медленного процессора).
- Передача данных между node.js -> FFMPEG медленная.
Я попытался загрузить видео в обычном менеджере загрузок, и я получил около 320 Кб, что является моей обычной скоростью загрузки, поэтому первое, что не является узким местом.
К пунктам 2 и 3 я попытался записать локальный файл в stdin, и у меня получилось около 600 КБ, так что это тоже не так.
Так почему мой сценарий такой медленный и что я могу сделать, чтобы сделать его быстрее?
https://gist.github.com/1304637
Заранее спасибо.