精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
这个部分将描述RTP角色,这个角色主要用于向客户端发送数据,以及在客户会话关闭时进行处理。
服务器在调用QTSS_Play函数的时候就会调用模块的RTP Send Packets角色。RTP Send Packets角色的责任是向客户端发送媒体数据,并告诉服务器什么时候模块的RTP Send Packets角色应该再次被调用。
在被调用的时候,RTP Send Packets角色就会收到一个QTSS_RTPSendPackets_Params结构,该结构定义如下:
typedef struct
{
QTSS_ClientSessionObject inClientSession;
SInt64 inCurrentTime;
QTSS_TimeVal outNextPacketTime;
} QTSS_RTPSendPackets_Params;
inClientSession
这是一个QTSS_ClientSessionObject对象,代表客户会话。如果需要客户会话的属性信息,请参见“qtssClientSessionObjectType”部分。
inCurrentTime
当前时间,以服务器的时间单位计算。
outNextPacketTime
间隔时间,以毫秒为单位。在这个角色返回之前,模块需要设定一个合适的outNextPacketTime值,这个值是当前时刻和服务器再次为当前会话调用RTP Send Packets角色的时刻之间的时间间隔。
任何时候,只要模块为客户会话调用QTSS_Play函数,就会激活该会话的RTP Send Packets角色。模块调用QTSS_Write或者QTSS_WriteV来向客户发送数据。
在模块处理RTP Send Packets角色的时候,服务器保证不会调用该模块中任何引用到客户会话的角色,这里的客户会话由inClientSession来表示。
希望自己的RTP Send Packets角色被调用的模块必须在其Register角色中调用QTSS_AddRole函数,并将角色的实参指定为QTSS_RTPSendPackets_Role常数。
在处理完成这个角色之后,模块通常应该返回QTSS_NoErr。
服务器对模块的Client Session Closing角色的调用,使得模块可以在客户会话的关闭时进行必要的处理。
在被调用的时候,Client Session Closing角色会收到一个QTSS_ClientSessionClosing_Params结构,该结构定义如下:
typedef struct
{
QTSS_ClientClosing inReason;
QTSS_ClientSessionObject inClientSession;
} QTSS_ClientSessionClosing_Params;
inReason
描述会话关闭的原因。会话被关闭的原因可能是因为客户端发送一个RTSP拆卸(tear down)请求(qtssCliSesClosClientTeardown),也可能是因为会话超时,或者客户端没有发出拆卸请求(qtssCliSesClosClientDisconnect)的情况下断开连接。
inClientSession
这是一个QTSS_ClientSessionObject object对象,表示正在关闭的客户会话。
在任何时候,只要由inClientSession指定的客户会话即将被拆卸,则Client Session Closing角色就会被调用。
在模块处理Client Session Closing角色时,服务器保证不调用该模块中其它引用到客户会话的角色,这里的客户会话角色由inClientSession表示。
希望自己的Client Session Closing角色被调用的模块必须在其Register角色中调用QTSS_AddRole函数,并将角色的实参指定为QTSS_ClientSessionClosing_Role角色。
在处理完成这个角色之后,模块通常应该返回QTSS_NoErr。