Статьи

RTMP To RTSP перенаправить с использованием wowza и xuggler

Примечание. Это часть нашей серии « Учебники по разработке Xuggler ».

Всем привет!

Последние три месяца мы работаем над проектом телеконференции. Мы решили, что веб-приложение, использующее такие технологии, как 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/xuggler
export PATH=$XUGGLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$XUGGLE_HOME/lib:$LD_LIBRARY_PATH

MAC

1
2
3
export XUGGLE_HOME=/usr/local/xuggler
export PATH=$XUGGLE_HOME/bin:$PATH
export 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-tests
sudo 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