2017-10-18 10 views
0

私はLive555を使用してリモート接続のIPウェブカムからデータを取得しています。時々、ストリーム(ネットワークQOSの問題の可能性があります)への短い中断がありますが、正常に接続を再開するのではなく、これが発生するたびにlive555が終了します。デバッグ出力は次のようになります。Live555のセッションを再利用しないようにします

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 

理由のLive555ではアウトベイル既存のセッションのためのストリームを再起動しようとしたときにカメラが500エラーをスローためであると思われます。新しいセッションの開始は機能しているので、live555に既存のセッションを破棄し、ただ単に諦めるのではなく、再開するよう指示する方法はありますか?私はlive555が停止して再起動したことを検出するcronジョブを持っていますが、カメラファームウェアのバグを補うためにlive555を説得できれば、これを行うとノックが発生します。

私はlive555コードを修正し、必要に応じて再構築しています。

答えて

0

あなたがplayCommon.cppのコードに見れば、あなたはあなたのログに見ると、それはPLAYを送信し、セッションを再開doesnot

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

を見ることができました。 この動作を変更するには、openRTSPのコードを変更する必要があります。

関連する問題