2017-10-18 2 views
0

Ich benutze Live555, um Daten von einer IP-Webcam auf einer Remote-Verbindung zu ziehen. Von Zeit zu Zeit gibt es kurze Unterbrechungen des Streams (was ein Netzwerk-QOS-Problem sein könnte), Live55 stirbt jedoch jedes Mal, wenn dies geschieht, anstatt die Verbindung erfolgreich neu zu starten. Die Debug-Ausgabe sieht wie folgt aus:Stop Live555 von der Wiederverwendung der Sitzung

Closing session, because we stopped receiving packets.itrate=N/A speed=1.37x 
Created new TCP socket 3 for connection 
Connecting to 10.8.1.14, port 10111 on socket 3... 
...remote connection opened 
Sending request: PLAY rtsp://mycamera.test/live/ch0/ RTSP/1.0 
CSeq: 6 
User-Agent: /bin/openRTSP (LIVE555 Streaming Media v2017.07.18) 
Session: 1487641045855494467 
Range: npt=0.000- 

Received 199 new bytes of response data. 
Received a complete PLAY response: 
RTSP/1.0 500 Internal Server Error 
Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development;) 
Cseq: 6 
Session: 1487641045855494467 
Connection: Close 

Failed to start playing session: 500 Internal Server Error 
Created new TCP socket 3 for connection 
Connecting to 10.8.1.14, port 10111 on socket 3... 
...remote connection opened 
Sending request: TEARDOWN rtsp://mycamera.test/live/ch0/ RTSP/1.0 
CSeq: 7 
User-Agent: /bin/openRTSP (LIVE555 Streaming Media v2017.07.18) 
Session: 1487641045855494467 

Received 180 new bytes of response data. 
Received a complete TEARDOWN response: 
RTSP/1.0 200 OK 
Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development;) 
Cseq: 7 
Session: 1487641045855494467 
Connection: Close 

Es scheint, dass der Grund LIVE555 bürgt heraus, weil die Kamera einen 500-Fehler führt, wenn versucht wird, den Strom für eine bestehende Sitzung neu zu starten. Seit dem Start einer neuen Sitzung gibt es eine Möglichkeit, live55 zu sagen, dass die bestehende Sitzung verworfen und neu gestartet werden soll, anstatt einfach aufzugeben. Ich habe einen Cron-Job, der erkennt, wenn Live555 gestoppt hat und neu startet, aber es gibt Probleme, wenn ich das mache, also wäre es viel sauberer, wenn ich live555 überreden könnte, den Fehler in der Kamera-Firmware zu kompensieren.

Ich bin froh, den Live555-Code zu patch und Wiederaufbau wenn nötig!

Antwort

0

Wenn Sie den Code von playCommon.cpp aussehen, könnten Sie

void sessionAfterPlaying(void* /*clientData*/) { 
    if (!playContinuously) { 
    shutdown(0); 
    } else { 
    // We've been asked to play the stream(s) over again. 
    // First, reset state from the current session: 
    if (env != NULL) { 
     env->taskScheduler().unscheduleDelayedTask(periodicFileOutputTask); 
     env->taskScheduler().unscheduleDelayedTask(sessionTimerTask); 
     env->taskScheduler().unscheduleDelayedTask(arrivalCheckTimerTask); 
     env->taskScheduler().unscheduleDelayedTask(interPacketGapCheckTimerTask); 
     env->taskScheduler().unscheduleDelayedTask(qosMeasurementTimerTask); 
    } 
    totNumPacketsReceived = ~0; 

    startPlayingSession(session, initialSeekTime, endTime, scale, continueAfterPLAY); 
    } 
} 

sehen Wie Sie in Ihrem Protokoll sehen, hat es eine PLAY senden und doesnot die Session reinitiate. Um dieses Verhalten zu ändern, müssen Sie den Code von openRTSP ändern.

Verwandte Themen