首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止Live555重用会话

停止Live555重用会话
EN

Stack Overflow用户
提问于 2017-10-18 22:52:19
回答 1查看 863关注 0票数 0

我正在使用Live555从远程连接上的IP网络摄像头获取数据。有时,流会有短暂的中断(这可能是网络服务质量问题),然而,每次发生这种情况时,live555都会死亡,而不是成功地重新启动连接。调试输出如下所示:

代码语言:javascript
复制
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放弃现有的会话并重新开始,而不是放弃?我确实有一个cron作业,它可以检测live555何时停止并重新启动它,但当我这样做时,会有敲门问题,所以如果我能说服live555来补偿相机固件中的错误,它会更干净。

我很乐意为live555代码打补丁,并在必要时进行重建!

EN

回答 1

Stack Overflow用户

发布于 2017-10-21 21:52:49

如果您查看playCommon.cpp的代码,您可以看到

代码语言:javascript
复制
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的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46813139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档