Ваша оболочка (возможно, bash) делает свое собственное экранирование, и это вас путает. Вы можете использовать команду echo, чтобы увидеть, что передается, или легко написать специальную программу (обычно называемую «showargs» или аналогичную):
$ echo "s/\\\/\//" s/\\/\// $ echo "s/\\/\//" s/\/\//
Вы также можете использовать одинарные кавычки, которые иначе говоря, в bash.
У Вас в основном есть два варианта, если Вы хотите разместить, транскодировать и поток flv файлы (и не хотят покупать приложение транскодирования видео): можно обратиться к FFMpeg/MEncoder, или можно использовать внешний веб-сервис. Вы могли также обойти проблему полностью, позволив им встроить видео YouTube в Ваш сайт.
, Если бы Вы идете 'локальным путем FFMpeg', я предложил бы просто использовать ProcessBuilder и создать командную строку для выполнения FFMpeg. Тем путем Вы получаете полный контроль над тем, что выполняется, Вы избегаете JNI, который является абсолютным кошмаром для работы с, и Вы не допускаете определенный для ОС код в свое приложение. Можно найти FFMPeg со всеми дополнительными свойствами для в значительной степени любой платформы. Существует хороший шанс, это уже находится на Вашем сервере.
хорошая вещь о 'Локальном FFMPeg' маршрут состоит в том, что Вы не должны платить ни за какой дополнительный хостинг, и все работает локально, хотя Ваш размещающий администратор мог бы начать жаловаться, используете ли Вы сумасшедшую сумму диска и ЦП. Существуют некоторые другие вопросы о StackOverflow, которые говорят о некоторых из эти глюки с помощью FFMpeg для создания flvs, который можно на самом деле играть в Flash player.
маршрут веб-сервиса хорош, потому что существует меньше включенной установки. Я не использовал Эй! Смотрите , но это выглядит многообещающим. PandaStream легко настроить, и он работает хорошо, плюс Вы получают все Ваши видео на S3 без дополнительного усилия.
Существует большой вызов инструмента с открытым исходным кодом FFmpeg, который я использую для транскодирования моих видео. Я использую PHP, выполняющий вызовы оболочки, чтобы заставить его ожить, но я не могу предположить, что было бы слишком трудно заставить это играть по правилам с Java. (Возможно, это могло быть хорошей начальной точкой для Вас.)
я подаю свою установку 30 + пакеты концерта еженедельно, и она всегда выходит как качественный материал. Единственная хитрая часть для меня компилировала его для обработки большого разнообразия форматов видео. С другой стороны это предоставило мне тяжелый подъем, в котором я нуждаюсь.
Это может быть немного тангенциальным, но я нашел Поток Panda быть очень полезным решением всех видов проблем кодирования видео.
Все, что необходимо сделать, должно загрузить видеофайл на экземпляр Amazon EC2 рабочая Panda, и это закодирует видео к нужным форматам и качеству и выпустит обратный вызов к серверу приложений с деталями, когда это будет сделано. Можно тогда использовать связанный плеер Флеш-видео или собственный плеер для игры видео на сайте.
Это - очень масштабируемое (благодаря Amazon EC2 & S3), экономически эффективное и настраиваемое решение по сравнению с прокруткой Вашего собственного.
Наиболее рекомендуемый.
Обновление:
архитектура Panda следующие:
(источник: pandastream.com )
Существует библиотека с открытым исходным кодом, пользовавшаяся MPlayer, названным mencoder, который поддерживает FLV, а также много других кодеков.
существует Java GUI, который Вы видели, как был сделан
, Это могло помочь также.
я, кажется, не могу найти любой пример не названным от консоли, таким образом, это не может быть полезно для Вас. :S
Редактирование Также смотрят на этот вопрос .
Вы могли попытаться использовать онлайн-сервис как HeyWatch для преобразования видео. Никогда не использовал его, но они заявление
"прозрачная загрузка, отправьте видео прозрачно от Вашего веб-сайта"
Не решение Java, но Вы не должны были бы волноваться, о каком ОС идет Ваше веб-приложение.
, Если ОС не была проблемой, я соглашаюсь с ответом , theBadDawg дал. Я не знаю об и имел не любую удачу, находящую чистое решение Java.
FFMpeg является лучшим когда дело доходит до видео транскодирования.
можно использовать обертки Java для ffmpeg - http://fmj-sf.net/ffmpeg-java/getting_started.php http://sourceforge.net/projects/jffmpeg/
Кодирование файлов в одном формате другому занимает много времени разработки для разбираний, который является, почему существует так мало с точки зрения декодеров/кодеров, которые могут выполнить те подвиги. Те, которые известны и использовали большинство, являются ffmpeg и mencoder.
то, Что можно хотеть изучить, должно видеть, имеет ли платформа, на которой Вы работаете (Unix Windows/Mac OS X/Other) базовый набор вызовов API, можно использовать, который может декодировать файлы и повторно закодировать их. Windows имеет DirectShow, и Mac OS X имеет Quicktime. Не уверенный, если можно получить доступ к ним Java использования API все же.
FFMpeg действительно имеет обертку Java в наличии: FFMPEG Java, и существует также БРЕЛОКИ , который имеет JNI в наличии для их обертки C++ вокруг ffmpeg. Последний, который я нашел jFFmpeg, однако существует некоторые сообщения, которые я нашел с Google, предполагающим, что проект не может быть живым больше.
Ваш лучший выбор был бы или mencoder от mplayer и или ffmpeg. Ffmpeg можно установить как отдельный двоичный файл и затем назвать из другого кода с помощью команд "оболочки" по умолчанию. Если Вы однако не в состоянии выполнить команды, Вы, возможно, должны посмотреть на использование веб-сайта преобразования онлайн как предложенный Mark Robinson.
Из темы msdn на упорядочивание настраиваемых действий :
Как и в случае стандартных действий, настраиваемые действия, запланированные в InstallUISequence или AdminUISequence запускается, только если внутренний пользовательский интерфейс настроен на полный уровень.
Итак, я предполагаю, что ваше настраиваемое действие запланировано в последовательности пользовательского интерфейса, а не в InstallExecuteSequence
. Попробуйте запланировать настраиваемое действие в InstallExecuteSequence
следующим образом:
<InstallExecuteSequence>
<Custom Action='LaunchApplication' After='InstallFiles'/>
</InstallExecuteSequence>
где «LaunchApplication» следует заменить на Id
вашего элемента CustomAction
.
edit : я просмотрел инструкции , которым вы следовали, и не вижу настраиваемого действия для запуска приложения, запланированного в какой-либо последовательности. Он запускается только из действия пользовательского интерфейса (нажатие кнопки «Готово»). Это объясняет, почему он никогда не выполняется во время автоматической установки.
edit : полный образец (это немного небрежно, поскольку он также пытается выполнить настраиваемое действие при удалении, восстановлении и т. Д., Но по какой-то причине я не мог получить "
Если вы хотите сделать это с помощью 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's 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")
и готово!
Вам также может быть интересно услышать, что мы выпустили Panda в качестве размещаемой службы, что упрощает настройку и масштабирование :)