锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / Darwin服务器 / DarwinQTSS回调例程
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

QTSS回调例程


这个部分描述QTSS的回调例程,模块可以调用这些例程来从服务器端获取信息,分配和回收内存,创建对象,设置属性值,以及管理客户及RTSP会话。回调例程组织为如下几个部分:

QTSS工具回调例程

模块调用下面这些回调例程来注册角色,分配和释放内存,获取服务器内部定时器的值,以及将一个内部定时器的值转换为当前时间:

  • QTSS_AddRole
  • QTSS_New
  • QTSS_Delete
  • QTSS_Milliseconds
  • QTSS_MilliSecsTo1970Secs

QTSS_AddRole

增加一个角色。

QTSS_Error QTSS_AddRole(QTSS_Role inRole);

参数描述

inRole

输入参数,是一个类型为QTSS_Role的值,指定即将被加入的角色。

result

结果码。如果QTSS_AddRole函数在除了Register之外的角色中被调用,可能的返回值为QTSS_NoErr和QTSS_OutOfState;如果模块正在注册RTSP Request角色,而已经有一个模块注册了该角色,则返回QTSS_RequestFailed;如果指定的角色不存在,则返回QTSS_BadArgument。

讨论

QTSS_AddRole回调例程告诉服务器可以调用您的模块中由inRole参数指定的角色。

QTSS_AddRole回调例程只能在模块的Register角色中调用。对于当前版本的服务器,您可以增加下面这些角色:QTSS_ClientSessionClosing_Role,QTSS_ErrorLog_Role,QTSS_Initialize_Role, QTSS_OpenFilePreprocess_Role,QTSS_OpenFile_Role,QTSS_RTSPFilter_Role,QTSS_RTSPRoute_Role, QTSS_RTSPPreProcessor_Role,QTSS_RTSPRequest_Role,QTSS_RTSPPostProcessor_Role, QTSS_RTPSendPackets_Role,QTSS_RTCPProcess_Role,QTSS_Shutdown_Role。

QTSS_New

分配内存。

void* QTSS_New(FourCharCode inMemoryIdentifier,UInt32 inSize);

参数描述

inMemoryIdentifier

输入参数,是一个类型为FourCharCode的值,与当前进行的内存分配操作相关联。服务器可以跟踪已分配的内存,使开发者更加容易调试内存泄露。

inSize

输入参数,是一个类型为UInt32的值,指定要分配的内存的字节数。

result

无。

讨论

QTSS_New回调例程用于分配内存。只要需要动态分配内存,QTSS模块就应该调用QTSS_New函数。

如果要删除QTSS_New分配的内存,请调用QTSS_Delete函数。

QTSS_Delete

释放内存。

void* QTSS_Delete(void* inMemory);

参数描述

inMemory

输入参数,是一个指向任意值的指针,在这里指定即将被释放的内存的数量,以字节计。

result

无。

讨论

QTSS_Delete回调例程释放先前由QTSS_New函数分配的内存。

QTSS_Milliseconds

获取服务器内部时钟的当前值。

QTSS_TimeVal QTSS_Milliseconds();

参数描述

result

服务器内部时钟的当前值,以毫秒计,从1970年1月1日午夜12点开始算起。

讨论

QTSS_Milliseconds回调例程用于获取服务器内部时钟当前值,从1970年1月1日午夜12点开始算起。如果没有特别的提醒,服务器属性中所有的毫秒值都是来自这个时钟。

QTSS_MilliSecsTo1970Secs

将来自服务器内部时钟的时间值转换为当前时间。

time_t QTSS_MilliSecsTo1970Secs(QTSS_TimeVal inQTSS_Milliseconds);

参数描述

inQTSS_Milliseconds

输入参数,是一个类型为QTSS_TimeVal的值,通过调用QTSS_Milliseconds()函数得到。

result

类型为time_t的值,包含当前时间。

讨论

QTSS_MilliSecsto1970Secs回调例程将QTSS_Milliseconds函数得到的值转换为当前时间。

QTSS对象回调例程

模块调用对象回调例程来操作对象。这些回调函数如下:

  • QTSS_CreateObjectType
  • QTSS_CreateObjectValue
  • QTSS_LockObject
  • QTSS_UnLockObject

QTSS_CreateObjectType

创建一个对象类型。

QTSS_Error QTSS_CreateObjectType(QTSS_ObjectType* outType);

参数描述

outType

输入参数,是一个指针,指向类型为QTSS_ObjectType的值。

result

结果码。可能的返回值之一是QTSS_NoErr,如果已经存在的对象类型太多,返回QTSS_FailedRequest,如果调用QTSS_CreateObjectType时指定名字的属性已经存在,则返回QTSS_OutOfState。

讨论

QTSS_CreateObjectType回调例程创建一个新的对象类型,并提供一个指向该类型的指针。可以通过调用QTSS_AddStaticAttribute函数来将静态属性添加到该对象类型中,实例属性则可以加入到这个新建对象类型的对象实例中。

QTSS_AddStaticAttribute回调例程只能在Register角色中调用。通过QTSS_SetValue函数可以设置已添加属性的值,通过QTSS_RemoveValue函数则可以删除已添加的属性。

这个回调函数只能在Register角色中调用。

QTSS_CreateObjectValue

创建一个新的对象,其值将作为另一对象的属性值。

QTSS_Error QTSS_CreateObjectValue(QTSS_Object inObject,
QTSS_AttributeID inID,QTSS_ObjectType inType,UInt32* outIndex,QTSS_Object* outCreatedObject);

参数描述

inObject

输入参数,是一个指针,指向类型为QTSS_ObjectType的值,该值指定了一个对象,本函数创建的对象将成为该对象的属性值。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定一个属性ID,本函数创建的对象将被设置为这个ID对应的属性的值。

inType

输入参数,是一个类型为QTSS_ObjectType的值,指定即将创建的对象的对象类型。

outIndex

输出参数,是一个指针,指向类型为UInt32的值,该值包含被创建对象的索引。

outCreatedObject

输出参数,是一个指针,指向类型为QTSS_ObjectTypes的值,即新创建的对象。

result

结果码。可能的返回值之一是QTSS_NoErr,如果参数不正确,返回QTSS_BadArgument,如果inID参数指定的属性为只读属性,则返回QTSS_ReadOnly。

讨论

QTSS_CreateObjectValue回调例程创建一个对象,并将该对象设置为某个现有对象的属性值。由inObject指定的对象为“父”对象。

如果inObject参数指定的对象在之后被QTSS_LockObject函数锁住了,则outCreatedObject参数指定的对象也会被锁住。

QTSS_LockObject

锁定一个对象。

QTSS_Error QTSS_LockObject(QTSS_Object inObject);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将被锁定的对象。

result

结果码。可能的返回值之一是QTSS_NoErr,如果指定的对象实例不存在,则返回QTSS_BadArgument。

讨论

QTSS_LockObject回调例程锁定指定的对象,使其它线程对该对象属性的访问被阻塞。在对被属性指向的变量执行非原子更新—比如调用QTSS_SetValuePtr函数来设定属性值—或者获取非抢占访问安全的属性值之前,请调用QTSS_LockObject函数。

调用QTSS_UnLockObject函数来为对象解除锁定。

由QTSS_CreateObjectValue函数创建的对象在其父对象被锁定的时候也会被锁定。

QTSS_UnLockObject

解锁一个对象。

QTSS_Error QTSS_UnLockObject(QTSS_Object inObject);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将被解锁的对象。

result

结果码。可能的返回值之一是QTSS_NoErr,如果指定的对象实例不正当,则返回QTSS_BadArgument。

讨论

QTSS_UnLockObject回调例程对先前被QTSS_LockObject函数加锁的对象进行解锁。

QTSS属性回调例程

模块调用属性回调函数来操作属性。属性回调函数列举如下:

  • QTSS_AddInstanceAttribute
  • QTSS_AddStaticAttribute
  • QTSS_GetAttrInfoByID
  • QTSS_GetAttrInfoByIndex
  • QTSS_GetAttrInfoByName
  • QTSS_GetNumAttributes
  • QTSS_GetValue
  • QTSS_GetValueAsString
  • QTSS_GetValuePtr
  • QTSS_IDForAttr
  • QTSS_RemoveInstanceAttribute
  • QTSS_RemoveValue
  • QTSS_SetValuePtr
  • QTSS_StringToValue
  • QTSS_TypeStringToType
  • QTSS_TypeToTypeString
  • QTSS_ValueToString

QTSS_AddInstanceAttribute

向对象的实例中添加一个实例属性。

QTSS_Error QTSS_AddInstanceAttribute(QTSS_Object inObject,char* inAttrName,
void* inUnused,QTSS_AttrDataType inAttrDataType);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将添加实例属性的对象。

inAttrName

输入参数,是一个指向字节数组的指针,表示即将添加的属性名称。

inUnused

总是为NULL。

QTSS_AttrDataType

输入参数,是一个类型为QTSS_AttrDataType的值, 指定即将添加的属性的数据类型。

result

结果码。可能的返回值之一是QTSS_NoErr;如果QTSS_AddInstanceAttribute函数在除了Register角色之外的其它角色中调用,返回QTSS_OutOfState;如果指定的对象类型不存在,属性名称太长,或者某个参数没有指定,返回QTSS_BadArgument;如果指定名称的属性已经存在,则返回QTSS_AttrNameExists。

讨论

QTSS_AddInstanceAttribute回调例程向inObject参数指定的对象实例添加一个属性。这个回调函数只能在Register角色中调用。

在往模块创建的对象添加属性时,您必须首先调用QTSS_LockObject函数来锁定对象,然后进行属性的添加,最后调用QTSS_UnLockObject函数。

所有已添加的实例属性的值都是可读,可写,和抢占访问安全的,因此可以调用QTSS_GetValueAsString和QTSS_GetValuePtr函数来访问。您也可以调用QTSS_GetValue函数来获取已经添加的静态属性值,但是这样做效率比较低。

添加静态属性比添加实例属性效率更高,因此我们强烈推荐添加静态属性,而不是动态属性。

典型情况下,模块在首次安装的时候进行实例属性的添加,并调用QTSS_SetValue函数来设定属性值,以便将缺省的预置信息设置到模块的预置对象中。在服务器随后的运行过程中,预置信息就已经存在于相应的模块预置对象中了,因此模块只需要调用QTSS_GetValue,QTSS_GetValueAsString,或者QTSS_GetValuePtr函数来获取预置的值就可以了。调用QTSS_GetValuePtr函数来获取属性值是最为有效和推荐的方法,调用QTSS_GetValue函数比调用QTSS_GetValuePtr函数效率低一些,而调用QTSS_GetValueAsString函数又比调用QTSS_GetValue函数效率低。

调用QTSS_RemoveValue函数可以删除已添加完成的属性的值。

和静态属性不同,实例属性是可以被删除的。调用QTSS_RemoveInstanceAttribute函数可以将对象实例的实例属性删除。

QTSS_AddStaticAttribute

向对象类型中添加一个静态属性。

QTSS_Error QTSS_AddStaticAttribute(QTSS_ObjectType inObjectType,const char* inAttributeName,void* inUnused,QTSS_AttrDataType inAttrDataType);

参数描述

inType

输入参数,是一个类型为QTSS_ObjectType的值,指定即将添加属性的对象类型。

inAttributeName

输入参数,是一个指向字节数组的指针,表示即将添加的属性名称。

inUnused

总是为NULL。

QTSS_AttrDataType

输入参数,是一个类型为QTSS_AttrDataType的值, 指定即将添加的属性的数据类型。

result

结果码。可能的返回值之一是QTSS_NoErr;如果QTSS_AddStaticAttribute函数在除了Register角色之外的其它角色中调用,返回QTSS_OutOfState;如果指定的对象类型不存在,属性名称太长,或者某个参数没有指定,返回QTSS_BadArgument;如果指定名称的属性已经存在,则返回QTSS_AttrNameExists。

讨论

QTSS_AddStaticAttribute回调例程向inType参数指定的对象类型的所有对象加入指定的属性。这个回调函数只能在Register角色中调用。静态属性一旦被加入,就不能在服务器运行的过程中删除。

在往模块创建的对象添加属性时,您必须首先调用QTSS_LockObject函数来锁定对象,然后进行属性的添加,最后调用QTSS_UnLockObject函数。

添加静态属性比添加实例属性效率更高,因此我们强烈推荐添加静态属性,而不是动态属性。

所有添加了的静态属性的值都是可读,可写,和抢占访问安全的,可以调用QTSS_SetValue或者QTSS_SetValuePtr函数来设定属性的值。

可以调用QTSS_GetValuePtr,QTSS_GetValue或者QTSS_GetValueAsString函数来获取添加完成的静态属性值。调用QTSS_GetValuePtr函数来获取属性值是最为有效和推荐的方法,调用QTSS_GetValue函数比调用QTSS_GetValuePtr函数效率低一些,而调用QTSS_GetValueAsString函数又比调用QTSS_GetValue函数效率低。

调用QTSS_RemoveValue函数可以删除已添加的静态属性的值。

QTSS_GetAttrInfoByID

通过属性ID得到属性的信息。

QTSS_Error QTSS_GetAttrInfoByID(QTSS_Object inObject,QTSS_AttributeID inAttrID,QTSS_AttrInfoObject* outAttrInfoObject);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定被查询的属性所在的对象。

inAttrID

输入参数,是一个类型为QTSS_AttributeID的值,指定被查询的属性。

outAttrInfoObject

输出参数,是一个指针,指向类型为QTSS_AttrInfoObject的值,用于存放由inAttrID参数指定的属性的信息。

result

结果码。可能的返回值之一是QTSS_NoErr;如果指定的对象不存在,返回QTSS_BadArgument;如果指定的属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_GetAttrInfoByID回调例程通过一个属性ID获得一个QTSS_AttrInfoObject对象,该对象可用于获取属性名称,属性的数据类型,读写属性值的权限,以及获取属性值的操作是否抢占访问安全等信息。

QTSS_GetAttrInfoByIndex

通过遍历获取某个对象的所有属性信息。

QTSS_Error QTSS_GetAttrInfoByIndex(QTSS_Object inObject,UInt32 inIndex,QTSS_AttrInfoObject* outAttrInfoObject);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定被查询的属性信息所属的对象。

inIndex

输入参数,是一个类型为UInt32的值,指定被查询的属性的索引。在开始遍历时将inIndex设置为0,在下次调用QTSS_GetAttrInfoByIndex函数的时候,将inIndex递加1,以获取下一个属性的信息。调用QTSS_GetNumAttributes函数可以获得inObject对象中具有的属性数量。

outAttrInfoObject

输出参数,是一个指针,指向类型为QTSS_AttrInfoObject的值,可以通过这种对象取得由inAttrName参数指定的属性的信息。

result

结果码。可能的返回值之一是QTSS_NoErr;如果指定的对象不存在,返回QTSS_BadArgument;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_GetAttrInfoByIndex回调例程通过一个属性ID得到一个QTSS_AttrInfoObject对象,可以通过该对象取得属性的名称和ID,属性的数据类型,以及读写属性值的权限。

无论对于静态属性还是实例属性,QTSS_GetAttrInfoByIndex回调例程都返回QTSS_AttrInfoObject类型的值。

QTSS_GetAttrInfoByName

通过属性名称获取属性的信息。

QTSS_Error QTSS_GetAttrInfoByName(QTSS_Object inObject,char* inAttrName,QTSS_AttrInfoObject* outAttrInfoObject);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定被查询的属性信息所属的对象。

inAttrName

输入参数,是一个指针,指向一个C字符串,该字符串中包含被查询的属性的名称。

outAttrInfoObject

输出参数,是一个指针,指向类型为QTSS_AttrInfoObject的值,可以通过这种对象取得由inAttrName参数指定的属性的信息。

result

结果码。可能的返回值之一是QTSS_NoErr;如果指定的对象不存在,返回QTSS_BadArgument;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_GetAttrInfoByName回调例程通过属性名称得到一个QTSS_AttrInfoObject对象,可以通过该对象取得属性的名称和ID,属性的数据类型,读写属性值的权限,以及获取属性值的操作是否抢占访问安全。

无论对于静态属性还是实例属性,QTSS_GetAttrInfoByName回调例程都返回QTSS_AttrInfoObject类型的值。

QTSS_GetNumAttributes

获取对象的属性数目。

QTSS_Error QTSS_GetNumAttributes(QTSS_Object inObject,UInt32* outNumAttributes);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定要计数的属性所属的对象。

outNumAttributes

输出参数,是一个指针,指向类型为UInt32的值,该值包含对象属性的数目。

result

结果码。可能的返回值之一是QTSS_NoErr;如果指定的对象不存在,返回QTSS_BadArgument。

讨论

QTSS_GetNumAttributes回调例程获取由inObject参数指定的对象的属性数目。有了属性数目,您就可以知道在获取对象的所有属性信息时应该调用QTSS_GetAttrInfoByIndex函数的次数。

QTSS_GetValue

将属性值拷贝到一个缓冲区中。

QTSS_Error QTSS_GetValue (QTSS_Object inObject,QTSS_AttributeID inID,UInt32 inIndex,

void* ioBuffer,Int32* ioLen);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定要得到的属性值所属的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定被查询的属性的ID。

inIndex

输入参数,是一个类型为UInt32的值,指定要获取哪个属性值(如果属性可能有多个值的话);对于单值属性,这个参数为0。

ioBuffer

作为输入参数,是一个缓冲区的指针;作为输出参数,ioBuffer中含有由inID参数指定的属性的值。如果缓冲区太小,不能容纳相应的值,则ioBuffer为空。

ioLen

作为输入参数,是一个类型为UInt32的值,指定ioBuffer的长度。作为输出参数,ioLen包含ioBuffer缓冲区中有效数据的长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果由inIndex指定的索引不存在,返回QTSS_BadIndex;如果属性值的长度比ioLen参数指定的长,返回QTSS_NotEnoughSpace;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_GetValue回调例程将指定的属性值拷贝到一个例程外部提供的缓冲区中。

调用QTSS_GetValue函数比调用QTSS_GetValuePtr函数速度慢,效率低。

QTSS_GetValueAsString

获取属性值,并转换为C字符串。

QTSS_Error QTSS_GetValueAsString (QTSS_Object inObject,QTSS_AttributeID inID,UInt32 inIndex,char** outString);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定要得到的属性值所属的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定被查询的属性的ID。

inIndex

输入参数,是一个类型为UInt32的值,指定要获取哪个属性值(如果属性可能有多个值的话);对于单值属性,这个参数为0。

outString

作为输入参数,是一个内存地址指针;作为输出参数,outString指向由inID指定的属性的值,格式为字符串。

result

结果码。可能的返回值之一是QTSS_NoErr;如果某个参数不正当,返回QTSS_BadArgument;如果由inIndex指定的索引不存在,返回QTSS_BadIndex。

讨论

QTSS_GetValueAsString回调例程获取指定属性的值,并转换为C字符串格式,存储在由outString参数指定的内存位置上。

当您不再需要outString时,需要调用QTSS_Delete函数来释放为其分配的内存。

QTSS_GetValueAsString回调例程既可以用来获取抢占访问安全的属性的值,也可以用于访问非抢占访问安全的属性。然而,调用QTSS_GetValueAsString函数的效率比调用QTSS_GetValue函数低,而调用QTSS_GetValue函数又比调用QTSS_GetValuePtr函数效率低。

调用QTSS_GetValue函数是获取非抢占访问安全的属性值的推荐方法,而调用QTSS_GetValuePtr函数则是获取抢占访问安全的属性值的推荐方法。

QTSS_GetValuePtr

获取一个指向属性值的指针。

QTSS_Error QTSS_GetValuePtr (QTSS_Object inObject,QTSS_AttributeID inID,UInt32 inIndex,void** outBuffer,UInt32* outLen);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定要获取的属性值所属的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定被查询的属性的ID。

inIndex

输入参数,是一个类型为UInt32的值,指定要获取哪个属性值(如果属性可能有多个值的话);对于单值属性,这个参数为0。

outBuffer

作为输入参数,是一个内存地址指针;作为输出参数,outBuffer指向由inID指定的属性的值。

outLen

输出参数,是一个指针,指向类型为UInt32的值,表示outBuffer指向的有效字节数。

result

结果码。可能的返回值之一是QTSS_NoErr;如果inID指定的属性不是抢占访问安全的,返回QTSS_NotPreemptiveSafe;如果参数不正当,返回QTSS_BadArgument;如果由inIndex指定的索引不存在,返回QTSS_BadIndex;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_GetValuePtr回调例程获取一个指向属性值的指针。调用QTSS_GetValuePtr函数是最快和最有效的获取属性值的方法,并且产生错误的可能性较少。

在调用QTSS_GetValuePtr函数获取非抢占访问安全的属性值之前,您必须调用QTSS_LockObject函数来锁定对象,在得到值之后,调用QTSS_UnLockObject函数进行解锁。

如果您在获取非抢占访问安全的属性值时,不希望锁定和解锁对象,则可以改用QTSS_GetValue或者QTSS_GetValueAsString函数来获取属性值。

QTSS_IDForAttr

获取静态属性的ID。

QTSS_Error QTSS_IDForAttr(QTSS_ObjectType inType,const char* inAttributeName,QTSS_AttributeID* outID);

参数描述

inType

输入参数,是一个类型为QTSS_ObjectType 的值,指定即将获取的属性ID所在的对象类型。

inAttributeName

输入参数,是一个指向字节数组的指针,表示即将获取的ID所在的属性的名称。

outID

作为输入参数,是一个指针,指向类型为QTSS_AttributeID的值;作为输入参数,outID包含由inAttributeName参数指定的属性的ID。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正确,返回QTSS_BadArgument。

讨论

QTSS_IDForAttr回调例程从指定的对象类型中获取指定的静态属性ID。属性ID在调用QTSS_GetValue,QTSS_GetValueAsString,和QTSS_GetValuePtr函数获取属性值时可以使用。

如果需要获取实例属性的ID,请调用QTSS_GetAttrInfoByName或者QTSS_GetAttrInfoByIndex函数。

QTSS_RemoveInstanceAttribute

从一个对象实例中删除一个实例属性。

QTSS_Error QTSS_RemoveInstanceAttribute(QTSS_Object inObject,QTSS_AttributeID inID);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将被删除的实例属性所在的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定即将被删除的属性的ID。

result

结果码。可能的返回值之一是QTSS_NoErr;如果指定的对象实例不存在,返回QTSS_BadArgument;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_RemoveInstanceAttribute回调例程从inObject参数指定的对象中删除由inID参数指定的实例属性。

QTSS_RemoveInstanceAttribute回调例程可以在所有的角色中调用。

QTSS_RemoveValue

从一个属性中删除指定的值。

QTSS_Error QTSS_RemoveValue (QTSS_Object inObject,QTSS_AttributeID inID,UInt32 inIndex);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将删除属性值的属性所在的对象。

inValueLen

输入参数,是一个类型为QTSS_AttributeID的值,包含一个属性ID,这个ID对应的属性的值即将被删除。

inIndex

输入参数,是一个类型为UInt32的值,指定要被删除的属性值。属性值的索引是从0开始的数字。

result

结果码。可能的返回值之一是QTSS_NoErr;如果InObject,inID,或者inIndex参数包含的值无效,返回QTSS_BadArgument;如果属性是只读的,返回QTSS_ReadOnly ;如果指定的属性不存在,则返回QTSS_BadIndex。

讨论

QTSS_RemoveValue回调例程删除指定属性的值。在删除之后,剩下的属性值会重新编号。

QTSS_SetValue

设置一个属性的值。

QTSS_Error QTSS_SetValue (QTSS_Object inObject,QTSS_AttributeID inID,UInt32 inIndex,const void* inBuffer,UInt32 inLen);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将设定属性值的属性所在的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定被设置属性值的属性的ID。

inIndex

输入参数,是一个类型为UInt32的值,指定将要设置哪个属性值(如果该属性可能有多个值的话),对于单值属性,这个参数为0。

inBuffer

输入参数,是一个缓冲区指针,包含用于设置的值。在QTSS_SetValue函数返回之后,您就可以释放inBuffer指向的缓冲区。

inLen

输入参数,是一个类型为UInt32的值,指定inBuffer中有效数据的长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果由inIndex指定的索引不存在,返回QTSS_BadIndex;如果参数不正当,返回QTSS_BadArgument;如果属性为只读,返回QTSS_ReadOnly;如果属性不存在,则返回QTSS_AttrDoesntExist。

讨论

QTSS_SetValue回调例程显式设置指定属性的值。另外一种设置属性值的方法是调用QTSS_SetValuePtr函数

QTSS_SetValuePtr

将已经存在的变量设置为一个属性的值。

QTSS_Error QTSS_SetValue (QTSS_Object inObject,QTSS_AttributeID inID,const void* inBuffer,

UInt32 inLen);

参数描述

inObject

输入参数,是一个类型为QTSS_Object的值,指定即将设定属性值的属性所在的对象。

inID

输入参数,是一个类型为QTSS_AttributeID的值,指定被设置属性值的属性的ID。

inBuffer

输入参数,是一个缓冲区指针,包含用于设置的值。

inLen

输入参数,是一个类型为UInt32的值,指定inBuffer中有效数据的长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果属性为只读,则返回QTSS_ReadOnly。

讨论

QTSS_SetValuePtr回调例程使模块可以将属性值设置为模块变量的值。它是QTSS_SetValue回调例程的另一个选择。

在调用QTSS_SetValuePtr函数之后,模块必须保证如果inID指定的属性存在,则inBuffer指定的缓冲区也存在。

如果inBuffer指向的缓冲区没有以原子操作的方式更新,则在更新inBuffer缓冲区之前,应该调用QTSS_LockObject函数来进行保护。

QTSS_StringToValue

将一个C字符串格式的属性数据类型转换为一个QTSS_AttrDataType格式的值。

QTSS_Error QTSS_StringToValue(const char* inValueAsString,const QTSS_AttrDataType inType,void* ioBuffer,UInt32* ioBufSize);

参数描述

inValueAsString

输入参数,是一个字符数组的指针,数组中含有即将被转换的值。

inType

输入参数,是一个类型为QTSS_AttrDataType的值,指定一个属性数据类型,inValueAsString参数指向的值将被转换为这种数据类型。

ioBuffer

作为输入参数,是一个缓冲区的指针;作为输出参数,该缓冲区中含有从inValueAsString参数转换得到的属性数据类型。上层模块必须在调用QTSS_StringToValue函数之前为ioBuffer分配内存。

ioBufSize

作为输入参数,是一个类型为UInt32的值,指定ioBuffer缓冲区的长度。作为输出参数,ioBufSize指向ioBuffer中有效数据的长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果inValueAsString或者inType参数没有包含有效值,返回QTSS_BadArgument;如果ioBuffer指向的缓冲区太小,不能容纳转换后的值,则返回QTSS_NotEnoughSpace。

讨论

QTSS_StringToValue回调例程将一个C字符串格式的属性数据类型转换为一个QTSS_AttrDataType格式的值。

当不再需要ioBuffer指向的缓冲区时,应该释放相应的内存。

QTSS_TypeStringToType

根据C字符串格式的数据类型串得到相应的属性数据类型。

QTSS_Error QTSS_TypeStringToType(const char* inTypeString,QTSS_AttrDataType* outType);

参数描述

inTypeString

输入参数,是一个指向字符数组的指针,数组中含有C字符串格式的属性数据类型。

outType

输出参数,是一个指针,指向类型为QTSS_AttrDataType值,该值中含有属性数据类型。

result

结果码。可能的返回值之一是QTSS_NoErr;如果inTypeString参数中没有包含可返回属性数据类型的值,则返回QTSS_BadArgument。

讨论

QTSS_TypeStringToType回调例程根据C字符串格式的数据类型串得到相应的属性数据类型。

QTSS_TypeToTypeString

获取属性数据类型的C字符串格式的名称。

QTSS_Error QTSS_TypeToTypeString(constQTSS_AttrDataType inType,char** outTypeString);

参数描述

inType

输入参数,是一个指针,指向类型为QTSS_AttrDataType的值,该值中包含即将以C字符串格式返回的属性数据类型。

outType

作为输入参数,是一个指向内存地址的指针;作为输出参数,outType指向一个包含属性数据类型的C字符串。

result

结果码。可能的返回值之一是QTSS_NoErr;如果inType参数没有包含正当的属性数据类型,则返回QTSS_BadArgument。

讨论

QTSS_TypeToTypeString回调例程从QTSS_AttrDataType格式的值中获取其C字符串格式的名称。

QTSS_ValueToString

将一个格式为QTSS_AttrDataType的属性数据类型转换为C字符串格式的值。

 

QTSS_Error QTSS_ValueToString(const void* inValue,const UInt32 inValueLen,const QTSS_AttrDataType inType,char** outString);

参数描述

inValue

输入参数,是一个缓冲区指针,该缓冲区中含有即将从QTSS_AttrDataType格式转换为C字符串的值。.

inValueLen

输入参数,是一个类型为UInt32的值,指定inValue参数指向的值的长度。

inType

输入参数,是一个类型为QTSS_AttrDataType的值,指定inValue参数指向的值的属性数据类型。

outString

输出参数,是一个指向内存位置的指针,该内存中含有C字符串格式的属性数据类型。

result

结果码。可能的返回值之一是QTSS_NoErr;如果inValue,inValueLen,或者inType参数中不包含正当值,则返回QTSS_BadArgument。

讨论

QTSS_ValueToString回调例程将一个格式为QTSS_AttrDataType的属性数据类型转换为C字符串格式的值

流回调例程

本部分描述模块对流执行I/O时使用的回调例程。服务器在内部以异步的方式执行 I/O,因此如果没有特别提到的话,QTSS流回调例程不能阻塞,如果数据不能被写入,则返回QTSS_WouldBlock。流回调例程列举如下:

  • “QTSS_Advise”
  • “QTSS_Read”
  • “QTSS_Seek”
  • “QTSS_RequestEvent”
  • “QTSS_SignalStream”
  • “QTSS_Write”
  • “QTSS_WriteV”
  • “QTSS_Flush”

QTSS_Advise

通知文件系统模块流的指定部分很快将会被读取。

QTSS_Error QTSS_Advise(QTSS_StreamRef inRef,UInt64 inPosition,UInt32 inAdviseSize);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定一个流,可以通过调用QTSS_OpenFileObject函数来得到。

inPosition

输入参数,相对于流的起始位置的字节偏移量,表示即将被读取的部分的起始点。

inAdviseSize

输入参数,即将被读取的部分的字节长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;也可能返回QTSS_RequestFailed。

讨论

QTSS_Advise回调例程通知文件系统模块指定部分的流很快将会被读取。文件系统模块可能会率先读取,以便在未来调用QTSS_Read读取指定流的时候能够更快地响应。

QTSS_Read

从一个流中读取数据。

QTSS_Error QTSS_Read(QTSS_StreamRef inRef,void* ioBuffer,UInt32 inBufLen, UInt32* outLengthRead);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定即将读取数据的流。调用QTSS_OpenFileObject函数可以得到您希望读取的文件的流引用。

ioBuffer

输入参数,是一个指针,指向存放读取数据的缓冲区。

inBufLen

输入参数,是一个类型为UInt32的值,指定ioBuffer缓冲区的长度。

outLenRead

输出参数,是一个指针,指向类型为UInt32的值,表示读取的字节数。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果读操作被阻塞,则返回QTSS_WouldBlock;如果读操作失败,则返回QTSS_RequestFailed。

讨论

QTSS_Read回调例程从一个流中读取数据,放入缓冲区。

QTSS_Seek

设置流的位置。

QTSS_Error QTSS_Seek(QTSS_StreamRef inRef,UInt64 inNewPosition);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定即将设置位置的流。调用QTSS_OpenFileObject函数可以得到流引用。

inNewPosition

输入参数,是一个相对于流起始位置的字节偏移量,流将会被设置到这个位置上。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果定位操作失败,则返回QTSS_RequestFailed。

讨论

QTSS_Seek回调例程将一个流设置到inNewPosition参数指定的位置上。

QTSS_RequestEvent

请求当指定事件发生时得到通知。

QTSS_Error QTSS_RequestEvent(QTSS_StreamRef inStream,QTSS_EventType inEventMask);

参数描述

inStream

输入参数,是一个类型为QTSS_StreamRef的值,例程请求的就是这个参数指定的流的事件通知。

inEventMask

输入参数,是一个类型为QTSS_EventType的值,指定一个掩码,例程请求的就是该掩码代表的事件的通知。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果调用失败,则返回QTSS_RequestFailed。

讨论

QTSS_RequestEvent回调例程使调用者在指定流的指定事件发生时得到通知。在调用QTSS_RequestEvent函数之后,上层模块应该从当前的模块角色中尽快返回。服务器保留上层模块的当前状态,当事件发生时,服务器以调用QTSS_RequestEvent函数时所在的角色调用相应的模块。

QTSS_SignalStream

当流变为可进行I/O操作的状态时,将这个状态变化信息通知事件的接收方。

QTSS_Error QTSS_SignalStream(QTSS_StreamRef inStream,QTSS_EventType inEventMask);

参数描述

inStream

输入参数,是一个类型为QTSS_StreamRef的值,表示状态发生变化(变为可进行I/O操作)的流。

inEventMask

输入参数,是一个类型为QTSS_EventType的值,它指定一个掩码,表示流是否变为可读,可写,或者可读写。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果这个函数在不允许异步事件的角色中调用,返回QTSS_OutOfState;如果调用失败,则返回QTSS_RequestFailed。

讨论

QTSS_SignalStream回调例程告诉服务器inStream表示的流可以进行I/O操作了。目前只有文件系统模块有理由调用QTSS_SignalStream函数。

QTSS_Write

向一个流写入数据。

QTSS_Error QTSS_Write(QTSS_StreamRef inRef,void* inBuffer,UInt32 inLen,UInt32* outLenWritten,UInt32 inFlags);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定即将写入数据的流。

inBuffer

输入参数,是一个缓冲区指针,指向即将写入的数据。

inLen

输入参数,是一个类型为UInt32的值,指定inBuffer缓冲区中数据的长度。

outLenWritten

输出参数,是一个指针,指向类型为UInt32的值,表示即将写入的字节数。

inFlags

输入参数,是一个类型为UInt32的值,可能的值请参见讨论部分。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果流的接受方已经不再处于连接状态,返回QTSS_NotConnected;如果流的缓冲数据在这个时刻不能完全被写入,则返回QTSS_WouldBlock。

讨论

QTSS_Write回调例程将一个缓冲区中的数据写入到一个流。

下面的枚举定义了inFlags参数可能的常数值:

enum

{
    qtssWriteFlagsIsRTP = 0x00000001,
    qtssWriteFlagsIsRTCP= 0x00000002

};

在向RTP流写入数据的时候,这些标志是相互关联的,它们告诉服务器写入的数据应该通过RTP通道(qtssWriteFlagsIsRTP)发送,还是应该通过指定RTP流的RTCP通道发送(qtssWriteFlagsIsRTCP)。

QTSS_WriteV

通过iovec结构将数据写入到流中。

QTSS_Error QTSS_WriteV(QTSS_StreamRef inRef,iovec* inVec,UInt32 inNumVectors,UInt32 inTotalLength,UInt32* outLenWritten);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定即将写入数据的流。

inVec

输入参数,是一个指向iovec结构的指针。iovec结构的第一个成员必须为空。

inNumVectors

输入参数,是一个类型为UInt32的值,指定向量的数目。

inTotalLength

输入参数,是一个类型为UInt32的值,指定inVec的总长度。

outLenWritten

输出参数,是一个指针,指向类型为UInt32的值,表示被写入的字节数。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数为NULL,返回QTSS_BadArgument;如果写操作即将被阻塞,则返回QTSS_WouldBlock。

讨论

QTSS_WriteV回调例程通过iovec结构将数据写入到流中,其方式类似于POSIX的writev调用。

QTSS_Flush

强制执行一个立即写操作。

QTSS_Error QTSS_Flush(QTSS_StreamRef inRef);

参数描述

inRef

输入参数,是一个类型为QTSS_StreamRef的值,指定即将对缓冲数据进行写操作的流。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数为NULL,返回QTSS_BadArgument;如果流的缓冲数据在这个时刻不能完全被写入,则返回QTSS_WouldBlock。

讨论

QTSS_Flush回调例程强行对流的任何缓冲数据执行立即写操作。某些流引用,比如QTSSRequestRef,在发送数据之前先进行缓冲。

文件系统回调例程

模块可以将本部分描述的回调例程用于打开和关闭一个文件对象。

  • “QTSS_OpenFileObject”
  • “QTSS_CloseFileObject”

QTSS_OpenFileObject

打开一个文件。

QTSS_Error QTSS_OpenFileObject(char* inPath,QTSS_OpenFileFlags inFlags,QTSS_Object* outFileObject);

参数描述

inPath

输入参数,是一个以null结尾的C字符串,表示即将被打开的文件在本地文件系统中的全路径。

inFlags

输入参数,是一个类型为QTSS_OpenFileFlags的值,指定描述如何打开文件的标志。

outFileObject

输出参数,是一个指针,指向类型为QTSS_Object的值,打开后的文件对应的文件对象将存放在这里。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果指定的文件不存在,则返回QTSS_FileNotFound。

讨论

QTSS_OpenFileObject回调例程打开指定的文件并返回相应的文件对象。文件对象的属性之一是一个流引用,可以传递给QTSS流回调例程,以便读写文件数据,或者执行其它文件操作。

QTSS_CloseFileObject

关闭一个文件。

QTSS_Error QTSS_CloseFileObject(QTSS_Object inFileObject);

参数描述

inFileObject

输入参数,是一个类型为QTSS_Object的值,表示即将被关闭的文件。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument。

讨论

QTSS_CloseFileObject回调例程用于关闭指定的文件。

服务回调例程

模块可以通过本部分描述的回调例程来注册和调用服务。服务回调例程如下:

  • QTSS_AddService
  • QTSS_IDForService
  • QTSS_DoService

QTSS_AddService

增加一个服务。

QTSS_Error QTSS_AddService(const char* inServiceName,QTSS_ServiceFunctionPtr inFunctionPtr);

参数描述

inServiceName

输入参数,是一个字符串指针,包含即将新增的服务的名称。

inFunctionPtr

输入参数,是一个指针,指向提供新增服务的代码模块。

result

结果码。可能的返回值之一是QTSS_NoErr;如果QTSS_AddService不是在Register角色中被调用,返回QTSS_OutOfState;如果inServiceName太长,或者某个参数为NULL,则返回QTSS_BadArgument。

讨论

QTSS_AddService回调例程使指定的服务可以被其它模块调用。

这个回调函数只能在Register角色中调用。

QTSS_IDForService

通过解析服务的名称得到服务ID。

QTSS_Error QTSS_IDForService(const char* inTag,QTSS_ServiceID* outID);

参数描述

inTag

输入参数,是一个字符串指针,包含被解析的服务名称。

outID

作为输入参数,是一个指针,指向类型为QTSS_ServiceID的值;作为输出参数,QTSS_ServiceID含有由inTag参数指定的服务的ID。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_IDForService回调例程通过outID参数返回由inTag参数指定的服务的ID。您可以以这个服务ID为参数调用QTSS_DoService函数,来激活serviceID代表的服务。

QTSS_DoService

激活一个服务。

QTSS_Error QTSS_DoService(QTSS_ServiceID inID,QTSS_ServiceFunctionArgsPtr inArgs);

参数描述

inID

输入参数,是一个类型为QTSS_ServiceID的值,指定即将被激活的服务。您可以调用QTSS_IDForAttr函数来获取您希望激活的服务的ID。

inArgs

输入参数,是一个类型为QTSS_ServiceFunctionArgsPtr的值,指向传递给服务的参数。

result

即为服务返回的结果码,如果inID不正当,则返回QTSS_IllegalService。

讨论

QTSS_DoService回调例程激活inID参数指定的服务。

RTSP报头回调例程

为了给需要发送RTSP响应的模块提供便利,服务器提供了一些工具函数,用于正确地格式化RTSP响应,本部分将描述这些函数。RTSP报头回调函数如下:

  • QTSS_AppendRTSPHeader
  • QTSS_SendRTSPHeaders
  • QTSS_SendStandardRTSPResponse

QTSS_AppendRTSPHeader

将信息附加到一个RTSP报头中。

QTSS_Error QTSS_AppendRTSPHeader(QTSS_RTSPRequestObject inRef,QTSS_RTSPHeader inHeader,const char* inValue,UInt32 inValueLen);

参数描述

inRef

输入参数,是一个类型为QTSS_RTSPRequestObject的值,表示一个RTSP流。

inHeader

输入参数,是一个类型为QTSS_RTSPHeader的值。

inValue

输入参数,是一个指向字节数组的指针,数组中包含即将被附加信息的报头。

inValueLen

输入参数,是一个类型为UInt32的值,包含inValue参数指向的正当数据的长度。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_AppendRTSPHeader回调例程将报头信息附加到RTSP报头中。在调用QTSS_AppendRTSPHeader函数之后,可以紧接着调用QTSS_SendRTSPHeaders函数来发送整个报头。

QTSS_SendRTSPHeaders

发送一个RTSP报头。

QTSS_Error QTSS_SendRTSPHeaders(QTSS_RTSPRequestOjbect inRef);

参数描述

inRef

输入参数,是一个类型为QTSS_RTSPRequestObject的值,表示一个RTSP流。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_SendRTSPHeaders回调例程发送一个RTSP报头。当模块调用QTSS_SendRTSPHeaders函数的时候,服务器会使用请求的当前状态码发送一个正确的RTSP状态行。服务器还会发送正确的CSeq报头,会话ID报头,以及连接报头。

QTSS_SendStandardRTSPResponse

向客户端发送一个RTSP响应。

QTSS_Error QTSS_SendStandardRTSPResponse(QTSS_RTSPRequestObject inRTSPRequest,
QTSS_Object inRTPInfo,UInt32 inFlags);

参数描述

inRTSPRequest

输入参数,是一个类型为QTSS_RTSPRequestObject的值,表示一个RTSP流。

inRTPInfo

输入参数,是一个类型为QTSS_Object的值。这里是指QTSS_ClientSessionObject或QTSS_RTPStreamObject对象,取决于要发送的响应。

inFlags

输入参数,是一个类型为UInt32的值。如果您希望服务器在RTP-Info报头中附加seq号,时间戳,以及SSRC信息,可将inFlags参数设置为qtssPlayRespWriteTrackInfo。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_SendStandardRTSPResponse回调例程将一个标准的响应写入到由inRTSPRequest参数指定的流。具体发送什么响应取决于不同的响应方法。

下面的枚举为inFlags参数定义了qtssPlayRespWriteTrackInfo常数:

enum

{
    qtssPlayRespWriteTrackInfo = 0x00000001

};

这个函数支持下面这些响应方法:

  • DESCRIBE。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,SessionID,Connection报头。写入一个Content-Base报头,其中内容基准是RTSP请求中提供的URL。写入一个类型为application/sdp的Content-Type报头。inRTPInfo参数必须是一个QTSS_ClientSessionObject对象。
  • ANNOUNCE。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,Connection报头。inRTPInfo参数必须是一个QTSS_ClientSessionObject对象。
  • SETUP。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,SessionID,Connection报头。写入一个带有客户端和服务器端的Transport h报头(如果连接建立在UDP协议之上)。inRTPInfo参数必须是一个QTSS_RTPStreamObject对象。
  • PLAY。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,SessionID,Connection报头。inRTPInfo参数必须是一个QTSS_ClientSessionObject对象。如果您希望服务器在RTP-Info报头中附加seq号,时间戳,以及SSRC信息,可将inFlags参数设置为qtssPlayRespWriteTrackInfo。
  • PAUSE。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,SessionID,Connection报头。inRTPInfo参数必须是一个QTSS_ClientSessionObject对象。
  • TEARDOWN。这个响应方法根据RTSP请求的信息,写入状态行,CSeq,SessionID,Connection报头。inRTPInfo参数必须是一个QTSS_ClientSessionObject对象。

RTP回调例程

QTSS模块可以产生和发送RTP数据包,以响应RTSP请求。典型情况下,RTP数据包在对客户端的SETUP请求的响应中发送。对于一个特定的会话,目前只有一个模块可以产生数据包。RTP回调例程如下:

  • QTSS_AddRTPStream
  • QTSS_Play
  • QTSS_Pause
  • QTSS_Teardown

QTSS_AddRTPStream

使一个模块可以向客户端发送RTP数据包。

QTSS_Error QTSS_AddRTPStream(QTSS_ClientSessionObject inClientSession,QTSS_RTSPRequestObject inRTSPRequest,QTSS_RTPStreamObject* outStream,QTSS_AddStreamFlags inFlags);

参数描述

inClientRequest

输入参数,是一个类型为QTSS_ClientSessionObject的值,标识RTP数据包的发送功能即将被打开的客户会话。

inRTSPRequest

输入参数,是一个类型为QTSS_RTSPRequestObject的值。

outStream

输出参数,是一个指针,指向类型为QTSS_RTPStreamObject的值,该值含有新创建的流。

inFlags

输入参数,是一个类型为QTSS_AddStreamFlags的值,指定流的选项。

result

结果码。可能的返回值之一是QTSS_NoErr;如果QTSS_RTPStreamObject对象不能被创建,返回QTSS_RequestFailed;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_AddRTSPStream回调例程使一个模块可以向客户端发送RTP数据包,以响应RTSP请求。多次调用QTSS_AddRTSPStream函数可以向会话中加入多个流。

如果希望开始播放一个流,可以调用QTSS_Play函数。

QTSS_Play

开始播放与客户会话相关联的流。

QTSS_Error QTSS_Play(QTSS_ClientSessionObject inClientSession,QTSS_RTSPRequestObject inRTSPRequest,QTSS_PlayFlags inPlayFlags);

参数描述

inClientSession

输入参数,是一个类型为QTSS_ClientSessionObject的值,标识一个客户会话,该会话的RTP数据包的发送功能已经在之前调用QTSS_AddRTPStream函数打开。

inRTSPRequest

输入参数,是一个类型为QTSS_RTSPRequestObject的值。

inPlayFlags

输入参数,是一个类型为QTSS_PlayFlags的值。将inPlayFlags参数设置为qtssPlaySendRTCP常数会使服务器在播放的过程中自动产生RTCP发送方报告。否则,模块会负责产生具体描述播放特征的发送方报告。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,返回QTSS_BadArgument;如果会话中没有加入流,则返回QTSS_RequestFailed。

讨论

QTSS_Play回调例程开始播放与指定客户会话相关联的流。

只有调用了QTSS_AddRTPStream函数的模块才能调用QTSS_Play函数。

在调用QTSS_Play函数之前,模块应该为当前这个RTP流设置下面这些QTSS_RTPStreamObject对象的属性:

  • qtssRTPStrFirstSeqNumber,这个属性应该设置为最后一个PLAY请求发出之后的第一个数据包的序列号。服务器通过这个序列号生成一个正确的RTSP PLAY响应。
  • qtssRTPStrFirstTimestamp,这个属性应该设置为最后一个PLAY请求发出之后为这个流生成的第一个RTP数据包的时间戳。服务器通过这个时间戳生成一个正确的RTSP PLAY响应。
  • qtssRTPStrTimescale,这个属性应该设置为轨道的时间比例尺。

在调用QTSS_Play函数之后,模块的RTP Send Packets角色就会被调用。

您可以调用QTSS_Pause函数来暂停流的播放,或者调用QTSS_Teardown来关闭客户会话。

QTSS_Pause

暂停一个正在播放的流。

QTSS_Error QTSS_Pause(QTSS_ClientSessionObject inClientSession);

参数描述

inClientSession

输入参数,是一个类型为QTSS_ClientSessionObject的值,标识即将被暂停的客户会话。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_Pause回调例程暂停流的播放。只有调用了QTSS_AddRTPStream函数的模块才能调用QTSS_Pause函数。

QTSS_Teardown

关闭一个客户会话。

QTSS_Error QTSS_Teardown(QTSS_ClientSessionObject inClientSession);

参数描述

inClientSession

输入参数,是一个类型为QTSS_ClientSessionObject的值,标识即将被关闭的客户会话。

result

结果码。可能的返回值之一是QTSS_NoErr;如果参数不正当,则返回QTSS_BadArgument。

讨论

QTSS_Teardown回调例程用于关闭一个客户会话。

只有调用了QTSS_AddRTPStream函数的模块才能调用QTSS_Teardown函数。

调用QTSS_Teardown会使上层模块的Client Session Closing角色被调用,调用时传入由inClientSession参数标识的客户会话。


友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内