Несколько потоков Libstreaming распознаются только как сеанс первого клиента RTSP
Я использую Live555 в качестве клиента RTSP для получения видеопотока RTSP H264 с сервера Android LibStreaming MajorKernelPanic. Я сталкиваюсь с проблемой отображения более одного видеопотока с RTSP-сервера Android указанного типа, который обрабатывается другим RTSP-клиентом. Проблема очевидна, если использовать VLC, который также получает кадр RTSP H264 через Live555.
Первый VLC (RTSP-клиент) правильно отображает видео.
Другие 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);
Вам просто нужно сделать его переменным для поддержки нескольких экземпляров.
Надежда может помочь вам решить вашу проблему.