Всем привет!
Последние три месяца мы работаем над проектом телеконференции. Мы решили, что веб-приложение, использующее такие технологии, как Flex, будет лучшим подходом для такого требовательного проекта. Поскольку сложность программного обеспечения и требования поставщиков телекоммуникационных услуг возросли, проблемы, с которыми мы столкнулись, заслуживают внимания. Одной из проблем был запрос передачи живого видео от агента, который использует наше программное обеспечение, на свой сервер RTSP . Проблема, с которой мы столкнулись, заключается в том, что Flex использует протокол RTMP для передачи видео и аудио, и нам нужно было что-то быстрое, чтобы выполнить повторную потоковую передачу, не изобретая колесо.
В этой статье мы попытаемся дать достаточно информации, чтобы справиться со сложной проблемой, перетоков RTMP в RTSP для живого потока. Наше решение основано на потоковом сервере wowza, который поддерживает RTMP и RTSP, и xuggler, который обеспечивает мощь FFMPEG в Java-приложениях.
Wowza поддерживает ретрансляцию RTMP в RTSP для живых потоков H.264, но не для H.263 . По умолчанию видео, снятое с объекта ActionScript Camera, кодируется в формате H.263 . Мы предоставим код, основанный на xuggler, который выполняет перекодирование H.263 в H.264 в режиме реального времени, и опубликуем поток H.264 в Wowza .
Прежде всего нам нужно настроить xuggler . Нам нужна последняя версия FFMPEG и H.264, поэтому необходимо извлечь xuggler из репозитория svn.
|
1
|
svn checkout http://xuggle.googlecode.com/svn/trunk/java/xuggle-xuggler xuggle-xuggler |
Затем мы должны установить некоторые параметры окружающей среды.
Linux
|
1
2
3
|
export XUGGLE_HOME=/usr/local/xugglerexport PATH=$XUGGLE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$XUGGLE_HOME/lib:$LD_LIBRARY_PATH |
MAC
|
1
2
3
|
export XUGGLE_HOME=/usr/local/xugglerexport PATH=$XUGGLE_HOME/bin:$PATHexport DYLD_LIBRARY_PATH=$XUGGLE_HOME/lib:$DYLD_LIBRARY_PATH |
Windows
- Установите XUGGLE_HOME в каталог по вашему выбору (убедитесь, что каталог существует на диске). При сборке вы должны убедиться, что ваш XUGGLE_HOME находится на диске C: и находится в пути без пробелов. Сожалею. Это ограничение не применяется, если вы используете установщик.
- Добавить % XUGGLE_HOME% \ bin ; в начале вашей переменной среды PATH.
- При желании, установите % XUGGLE_REPO% в каталог, в который вы хотите, чтобы ant установил опубликованные файлы ivy jar (если вы его не установите, по умолчанию в вашем каталоге сборки будет использоваться dist / ivy).
Затем мы должны собрать и установить xuggler .
|
1
2
|
ant run-testssudo ant install |
Теперь у вас установлен xuggler в $ XUGGLE_HOME
После завершения установки мы должны написать код, который делает свое дело.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.javacodegeeks.xuggler;import org.apache.commons.cli.CommandLine;import org.apache.commons.cli.Options;import org.apache.commons.cli.ParseException;import com.xuggle.xuggler.Converter;public class Transcoder { /** * @param args */ public static void main(String[] args) { String inputStream = "rtmp://wowzahost/live/streamLive3H.263"; String outputStream = "rtmp://wowzahost/live/streamLive3H.264"; String[] parameters = new String[] { "--acodec", "libfaac", "--vcodec", "libx264", "--vpreset", "/usr/local/xuggler/share/ffmpeg/libx264-ultrafast.ffpreset", inputStream, outputStream }; Converter converter = new Converter(); Options options = converter.defineOptions(); CommandLine cmdLine; try { cmdLine = converter.parseOptions(options, parameters); converter.run(cmdLine); System.out.println("Finish!!!"); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } }} |
Обращает на себя внимание
- В каталоге $ XUGGLE_HOME / share / ffmpeg вы найдете все доступные пресеты для x264. Лучшее качество означает большую задержку. Вам нужно будет выбрать то, что подходит для ваших нужд.
- Вам не придется менять acodec и vcodec
- Последняя версия FFMPEG может читать и записывать потоки RTMP .
Пример проекта доступен здесь .
Спасибо за уделенное время. Надеюсь, вы найдете эту статью интересной.
Наилучшие пожелания
./pat