Подтвердить что ты не робот

Программно конвертировать видео в FLV

В настоящее время я работаю над веб-приложением, которое должно принимать видео, загруженное пользователями в любом формате (.avi,.mov и т.д.), и конвертировать их в FLV для воспроизведения в флеш-проигрывателе.

Поскольку сайт основан на OpenCms, лучшим решением будет готовый плагин для OpenCms, который позволил бы загружать и воспроизводить видео, выполняющие операцию перекодирования в фоновом режиме, но только набор классов Java для перекодирования будет отлично, а затем я мог бы сделать форму загрузки и воспроизведение частью самостоятельно.

4b9b3361

Ответ 1

В основном у вас есть два варианта, если вы хотите размещать, перекодировать и передавать FLV файлы (и не хотите покупать приложение для транскодирования видео): вы можете позвонить в FFMpeg/MEncoder или использовать внешний веб-сервис. Вы также можете полностью устранить проблему, разрешив им встраивать видео YouTube на свой сайт.

Если вы перейдете в локальный маршрут FFMpeg, я бы предложил просто использовать ProcessBuilder и создать командную строку для выполнения FFMpeg. Таким образом, вы получаете полный контроль над тем, что выполняется, вы избегаете JNI, который является абсолютным кошмаром для работы, и вы сохраняете код, специфичный для ОС, из вашего приложения. Вы можете найти FFMPeg со всеми колоколами и свистками для практически любой платформы. Там есть хороший шанс уже на вашем сервере.

Самое приятное в маршруте "Local FFMPeg" заключается в том, что вам не нужно платить за какой-либо дополнительный хостинг, и все работает локально, хотя администратор хостинга может начать жаловаться, если вы используете сумасшедший объем диска и CPU. Есть несколько других вопросов StackOverflow, которые рассказывают о некоторых из gotchas, использующих FFMpeg, чтобы создать flvs, которые вы можете играть в флеш-плеер.

Маршрут веб-сервиса хорош, потому что задействована меньшая настройка. Я не использовал Hey! Watch, но выглядит многообещающим. PandaStream легко настраивается, и он работает хорошо, плюс вы получаете все свои видео на S3 без каких-либо дополнительных усилий.

Ответ 2

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

Я еженедельно провожу свою установку на 30+ концертных вечеринках, и она всегда выходит как качественный материал. Единственная сложная часть для меня заключалась в том, чтобы скомпилировать ее для обработки самых разных видеоформатов. С яркой стороны это мне очень тяжело.

Ответ 3

Вы можете кодировать видео на Java с помощью Xuggler, который является Java API, который изначально использует код FFmpeg C за кулисами.

Ответ 4

Это может быть слегка касательным, но я нашел Panda Stream как очень полезное решение для всех видов проблем с кодированием видео.

Все, что вам нужно сделать, - загрузить видеофайл в экземпляр Amazon EC2 с Panda, и он будет кодировать видео в нужные вам форматы и качество и выдаст обратный вызов вашему серверу приложений с подробностями, когда это будет сделано, Затем вы можете использовать прилагаемый проигрыватель Flash Video или собственный плеер для воспроизведения видео на вашем сайте.

Он очень масштабируемый (благодаря Amazon EC2 и S3), экономически выгодное и настраиваемое решение по сравнению с вашим собственным.

Очень рекомендуется.

Update:

Архитектура Panda выглядит следующим образом:

Архитектура Panda Поток http://pandastream.com/images/panda_arch.gif

  • Страница отображает Panda форму загрузки в iframe или всплывающем окне
  • Загрузка видео с индикатором выполнения AJAX
  • Обратный вызов API при завершении кодирования
  • Видео, переданное пользователю

Ответ 5

Существует библиотека библиотека с открытым исходным кодом, используемая MPlayer, называемая mencoder, который поддерживает FLV, а также множество других кодеков.

Существует Java GUI, вы можете видеть, как было сделано

Это тоже может помочь.

Кажется, я не могу найти какой-либо пример, который не вызывается из консоли, поэтому он может быть вам не полезен.: S

Изменить Также рассмотрите этот вопрос.

Ответ 6

Вы можете попробовать использовать онлайн-сервис, например HeyWatch, чтобы конвертировать ваше видео. Никогда не использовали его, но они требуют

"прозрачная загрузка, отправка видео прозрачно с вашего сайта"

Не Java-решение, но вам не нужно беспокоиться о том, на какой ОС находится ваше веб-приложение.

Если ОС не была проблемой, я согласен с ответом theBadDawg. Я не знаю и не повезло найти чистое Java-решение.

Ответ 7

Кодирование файлов в одном формате в другой требует много времени на разработку, чтобы получить право, поэтому в декодерах/кодировщиках так мало возможностей, которые способны выполнить эти умения. Те, которые хорошо известны и используются наиболее часто, - ffmpeg и mencoder.

Что бы вы могли захотеть, это посмотреть, работает ли платформа, на которой вы работаете (Windows/Mac OS X/Other unix), базовый набор вызовов API, которые вы можете использовать, которые способны декодировать файлы, и повторно -кодировать их. Windows имеет DirectShow, а Mac OS X - Quicktime. Не уверен, что вы можете получить доступ к этим API с помощью Java.

У FFMpeg есть доступная оболочка Java: FFMPEG Java, а также FOBS, который имеет JNI, доступный для их оболочки С++ вокруг ffmpeg. Последнее, что я нашел jFFmpeg, однако есть некоторые сообщения, которые я нашел в Google, предлагая, что проект может быть неактивным.

Лучше всего будет либо mencoder из mplayer, либо ffmpeg. Ffmpeg может быть установлен как отдельный двоичный код, а затем вызван из другого кода, используя команды "shell" по умолчанию. Если вы, тем не менее, не можете выполнять команды, вам может потребоваться использовать веб-сайт онлайн-конверсии, как предположил Марк Робинсон.

Ответ 9

Если вы хотите сделать это с помощью java, вы можете сделать это очень легко, используя Xuggle.

У них отличный сайт, объясняющий, как делать все

документация находится здесь: http://build.xuggle.com/view/Stable/job/xuggler_jdk5_stable/javadoc/java/api/index.html

и отличный учебник, рассказывающий вам, как делать то, что вы хотите, здесь: http://blog.xuggle.com/2009/06/05/introduction-to-xuggler-mediatools/

Они обеспечивают простой способ сделать то, что вы хотите в первом учебнике, которое является простым транскодированием.

Я обнаружил, что он работает нормально для кодирования в flv. То, что он делает за кулисами, - это использование ffmpeg, поэтому все, что будет срабатывать ffmpeg, также завершится неудачей с помощью xuggle.

Соответствующий пример java-кода:

 // create a media reader
 IMediaReader reader = ToolFactory.makeReader("videofile.flv");

 // add a viewer to the reader, to see the decoded media
 reader.addListener(ToolFactory.makeWriter("output.mov", reader));

 // read and decode packets from the source file and
 // and dispatch decoded audio and video to the writer
 while (reader.readPacket() == null)
   ;

Что я получил от http://wiki.xuggle.com/MediaTool_Introduction

Если вам нужен полноценный рабочий код clojure... вот он:)

(import '(com.xuggle.mediatool ToolFactory))
(import '(com.xuggle.mediatool IMediaDebugListener IMediaDebugListener$Event))

    (defn readerRecurse
      "calls .readPacket until there nothing left to do2"
      [reader]
      (if (not (nil? (.readPacket reader))) ; here .readPacket actually does the processing as a side-effect.
        true                                   ; it returns null when it has MORE ro process, and signals an error when done... 
        (recur reader)))


    (defn convert
      "takes video and converts it to a new type of video"
      [videoInput videoOutput]
      (let [reader (ToolFactory/makeReader videoInput)]
        (doto reader
          (.addListener (ToolFactory/makeWriter videoOutput reader))
          (.addListener (ToolFactory/makeDebugListener (into-array [IMediaDebugListener$Event/META_DATA]))))
        (readerRecurse reader)))

теперь все, что вам нужно сделать, это что-то вроде:

(convert "/path/to/some_file.stupid_extention" "/path/to/awesome.flv")

и все готово!

Ответ 10

Вам также может быть интересно узнать, что теперь мы выпустили Panda в качестве размещенной службы, что упрощает настройку и масштабирование:)

http://pandastream.com

Ответ 11

yea, ffmpeg является лучшим для этой работы... Мы используем ffmpeg для конвертирования видео в течение длительного времени, и он работает со всеми видеоформатами. Существуют многочисленные варианты..