Ошибка VLCJ при перекодировании RTSP в формат HTTP OGG - PullRequest
1 голос
/ 18 апреля 2020

Я работаю над решением для отображения IP-камеры в компоненте HTML в моем приложении реакции. Я транскодирую прямую трансляцию видео RTSP с помощью VL C в OGG, и мое приложение может успешно найти и отобразить видео. Я использую эту выходную строку потока в VL C для этого:

sout=#transcode{vcodec=theo,vb=800,scale=1,width=600,height=480,acodec=mp3}:http{mux=ogg,dst=127.0.0.1:8080/stream.ogg} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep

Мой источник - простой URL-адрес RTSP rtsp: // Username:Password@IP/axis-media/media.amp?videocodec=h264

Проблема возникает, так как теперь я нужно сделать это в java. Ниже приведен полный код полностью урезанного сервера, который должен был начать транскодирование VL C с использованием VLCJ:

public static void main(String[] args) {
    //if (args.length < 1) return;
    int connectionCount = 0;
    MediaPlayerFactory mFactory;
    MediaPlayer mPlayer;
    try (ServerSocket serverSocket = new ServerSocket(0)) {

        System.out.println("Server is listening on port " + serverSocket.getLocalPort());

        while (true && connectionCount == 0) {
            Socket socket = serverSocket.accept();
            System.out.println("New client connected");
            connectionCount++;
            System.out.println("Current connection count: " + Integer.toString(connectionCount));
            mFactory = new MediaPlayerFactory();
            mPlayer = mFactory.mediaPlayers().newMediaPlayer();

            String mrl = "LEFT OFF FOR PRIVACY BUT A FUNCTIONAL RTSP LINK";

            String options = "sout=#transcode{vcodec=theo,vb=800,scale=1,width=600,height=480,acodec=mp3}:http{mux=ogg,dst=127.0.0.1:8080/desktop.ogg} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep";

            mPlayer.media().play(mrl, options);

            new ServerThread(socket, mPlayer).start();
        }

    } catch (IOException ex) {
        System.out.println("Server exception: " + ex.getMessage());
        ex.printStackTrace();
    }
}

}

Так что проблема в том, что строка транскодирования работает идеально в VL C, но выдает эту ошибку в Java. Я удостоверяюсь, что никакие другие потоки VL C не работают в то время. Я не знаю, почему это будет работать безупречно в одном, а не в другом. Ошибка ниже:

[000001bbede1d960] ошибка вывода основного потока: сбой цепочки потоков для `transcode {vcodec = theo, vb = 800, scale = 1, width = 600, height = 480, acodec = mp3}: http {mux = ogg, dst = 127.0.0.1: 8080 / desktop.ogg}: no-sout-rtp-sap: no-sout-standard-sap: ttl = 1: sout-keep '[000001bb96c930d0] ошибка основного ввода: невозможно запускать выходной экземпляр потока, прерывая

1 Ответ

1 голос
/ 18 апреля 2020

Если в строке sout есть пробелы, это на самом деле отдельные параметры - так что-то вроде этого:

String[] options = {
  "sout=#transcode{vcodec=theo,vb=800,scale=1,width=600,height=480,acodec=mp3}:http{mux=ogg,dst=127.0.0.1:8080/desktop.ogg}",
  ":no-sout-rtp-sap",
  ":no-sout-standard-sap",
  ":ttl=1",
  ":sout-keep"
};
mPlayer.media().play(mrl, options);
...