好吧,
-
当我的OpenRtsp客户端与服务器失去连接时,我会处理旧客户端和其他参数,然后重新创建新客户端。
-
客户端发送选项,描述请求成功,但之后失败。。。我无法创建会话和子会话,因此出现访问违规错误。。
如何正确重置旧的OpenRtspClient,以便获得新的"品牌"RTSPClient?
我当前重置旧客户端的方法:
我只是修改了playCommon类中的"shutdown"方法。我没有派蒂尔敦。。。
void ResetOurClient(){
if (env != NULL) {
env->taskScheduler().unscheduleDelayedTask(sessionTimerTask);
env->taskScheduler().unscheduleDelayedTask(arrivalCheckTimerTask);
env->taskScheduler().unscheduleDelayedTask(interPacketGapCheckTimerTask);
env->taskScheduler().unscheduleDelayedTask(qosMeasurementTimerTask);
}
closeMediaSinks();
Medium::close(session);
delete ourAuthenticator;
Medium::close(ourClient);
}
和我的重新启动代码:
void StartOurClient()
{
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
char* streamURL = "XXXXXXXXX";
// Create our client object:
ourClient = createClient(*env, streamURL, verbosityLevel, progName);
if (ourClient == NULL) {
*env << "Failed to create " << clientProtocolName
<< " client: " << env->getResultMsg() << "n";
shutdown();
}
if (sendOptionsRequest) {
// Begin by sending an "OPTIONS" command:
getOptions(continueAfterOPTIONS);
} else {
continueAfterOPTIONS(NULL, 0, NULL);
}
// All subsequent activity takes place within the event loop:
env->taskScheduler().doEventLoop(&continuesStream); // does not return
}
(由OP在问题编辑中回答。转换为社区wiki答案。请参阅没有答案的问题,但在评论中解决了问题(或在聊天中扩展(
OP写道:
有一个静态变量
setUpIter
。。。setupstreams
方法中的[MediaSubsessionIterator* setupIter = NULL;]
。。。因此使其成为全局非静态变量,并使其成为ReStart
处的NULL