darwin之ClientSession

1.ClientSession何物?

rtsp客户端,从rtsp服务器上获取rtp流。

class ClientSession : public Task派生于task,同时内部关联了一个socket。

darwin之ClientSession

2.如何获取数据

SInt64 ClientSession::Run()用来接收所有的rtsp消息:在Run中,类似于状态机的形式运行。

在构造函数中初始话状态机的值。

在Run函数中判断状态值,调用不同的函数:SendDescribe,SendTCPSetup,SendPlay,SendOptions等 。

darwin之ClientSession


darwin之ClientSession

3.RTSPClient如何接收数据,是 阻塞的还是非阻塞的,如何与任务机制关联上 ?

所有的函数都会调用 DoTransaction函数,再起内部发送数据,非阻塞,直接返回 。

在Run函数中判断其返回值,如果是发送了,但发送状态未返回 ,则下一个Run函数再次判断 。

当(theErr == EINPROGRESS) || (theErr == EAGAIN)时 ,再次RequestEvent,并且 Run返回0,立即再次调用 下一个Run,查看是否获取到数据 。

darwin之ClientSession

darwin之ClientSession