Несколько потоков Libstreaming распознаются только как сеанс первого клиента RTSP

Я использую Live555 в качестве клиента RTSP для получения видеопотока RTSP H264 с сервера Android LibStreaming MajorKernelPanic. Я сталкиваюсь с проблемой отображения более одного видеопотока с RTSP-сервера Android указанного типа, который обрабатывается другим RTSP-клиентом. Проблема очевидна, если использовать VLC, который также получает кадр RTSP H264 через Live555.

  1. Первый VLC (RTSP-клиент) правильно отображает видео.

  2. Другие VLC (также RTSP-клиент) ничего не отображают, но их кадр отображается в первом видеоокне VLC.

Эта проблема возникает на указанном сервере RTSP, но не на другой IP-камере.

Интересно, как live555 может определить, к какому сеансу относится фрейм данных RTSP.

Я обнаружил, что проблема может быть обнаружена в следующем коде Libstreaming.

        response.attributes = "Transport: RTP/AVP/UDP;"
                +(InetAddress.getByName(destination).isMulticastAddress()?"multicast":"unicast")
                +";destination="+mSession.getDestination()+
                ";client_port="+p1+"-"+p2+
                ";server_port="+src[0]+"-"+src[1]+
                ";ssrc="+Integer.toHexString(ssrc)+
                ";mode=play\r\n" +
                "Session: "+ "1185d20035702ca" + "\r\n" +
                "Cache-Control: no-cache\r\n";

в настройках отклика RTSP-сервера и

    else if (request.method.equalsIgnoreCase("PLAY")) {
        String requestAttributes = "RTP-Info: ";
        if (mSession.trackExists(0)) requestAttributes += "url=rtsp://"+mClient.getLocalAddress().getHostAddress()+":"+mClient.getLocalPort()+"/trackID="+0+";seq=0,";
        if (mSession.trackExists(1)) requestAttributes += "url=rtsp://"+mClient.getLocalAddress().getHostAddress()+":"+mClient.getLocalPort()+"/trackID="+1+";seq=0,";
        requestAttributes = requestAttributes.substring(0, requestAttributes.length()-1) 
                            + "\r\nSession: 1185d20035702ca\r\n";

в запросе PLAY.

Сначала я думал, что смогу сделать жестко закодированный идентификатор сеанса (1185d20035702ca) после "Сеанса: " в динамический, затем проблема решена, но после того, как я изменил его, проблема все еще остается там.

Успешное изменение идентификатора сеанса проверяется Wireshark.

Любые связанные предложения приветствуются. Благодарю.

1 ответ

Решение

Libstreaming жестко закодировал порт назначения для видео

video.setDestinationPorts(5006);

Вам просто нужно сделать его переменным для поддержки нескольких экземпляров.

Надежда может помочь вам решить вашу проблему.

Другие вопросы по тегам