2017-10-18 7 views
0

J'utilise Live555 pour extraire des données d'une webcam IP sur une connexion à distance. De temps en temps, il y a de brèves interruptions du flux (ce qui peut être un problème de QOS réseau), cependant, live555 meurt chaque fois que cela se produit au lieu de redémarrer avec succès la connexion. La sortie de débogage ressemble à ceci:Arrêtez Live555 de la session de réutilisation

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 

Il semblerait que la raison LIVE555 renfloue est parce que la caméra jette une erreur 500 lors d'une tentative de relancer le flux pour une session existante. Depuis le début d'une nouvelle session, est-il possible de dire à live555 de se débarrasser de la session existante et de recommencer au lieu de simplement abandonner? J'ai un travail cron qui détecte quand live555 s'est arrêté et redémarre, mais il y a des problèmes quand je fais cela, donc ce serait beaucoup plus propre si je pouvais persuader live555 de compenser le bug dans le firmware de la caméra.

Je suis heureux de patcher le code live555 et de le reconstruire si nécessaire!

Répondre

0

Si vous regardez le code de playCommon.cpp, vous pouvez voir

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); 
    } 
} 

Comme vous le voyez dans votre journal, il envoie un PLAY et doesnot réamorcer la session. Afin de changer ce comportement, vous devez modifier le code de openRTSP.