darwin之ClientSession
1.ClientSession何物?
rtsp客户端,从rtsp服务器上获取rtp流。
class ClientSession : public Task派生于task,同时内部关联了一个socket。
2.如何获取数据
SInt64 ClientSession::Run()用来接收所有的rtsp消息:在Run中,类似于状态机的形式运行。
在构造函数中初始话状态机的值。
在Run函数中判断状态值,调用不同的函数:SendDescribe,SendTCPSetup,SendPlay,SendOptions等 。
3.RTSPClient如何接收数据,是 阻塞的还是非阻塞的,如何与任务机制关联上 ?
所有的函数都会调用 DoTransaction函数,再起内部发送数据,非阻塞,直接返回 。
在Run函数中判断其返回值,如果是发送了,但发送状态未返回 ,则下一个Run函数再次判断 。
当(theErr == EINPROGRESS) || (theErr == EAGAIN)时 ,再次RequestEvent,并且 Run返回0,立即再次调用 下一个Run,查看是否获取到数据 。