标签:调度 工具 target bfd move 方法 uac 无符号 消息
Endpoint类是一个单例类,应用程序必须在此类实例之前创建一个并且最多只能创建一个,然后才能执行任何操作。同样,一旦这个类被销毁,应用程序就不能调用该库的任何API。这个类是PJSUA2的核心类,它提供了以下功能:
本章将介绍上述功能。
要使用Endpoint类,通常应用程序不需要进行子类化(再写继承于该类的子类,简称子类化(subclass)),除非:
在其他任何事情之前,必须实例化Endpoint类:
Endpoint *ep = new Endpoint;
一旦端点被实例化,可使用Endpoint.instance()静态方法获取端点实例。
通过调用其libCreate()方法来创建库:
try
{
ep->libCreate();
}
catch(Error& err)
{
cout << "Startup error: " << err.info() << endl;
}
如果发生错误,libCreate()方法将引发异常,因此我们需要使用try / catch子句来捕获异常。
EpConfig类提供端点配置,允许自定义以下设置:
请注意,可以在AccountConfig中根据每个帐户进一步指定一些设置。
要自定义设置,请创建EpConfig类的实例,并在端点初始化期间指定它们(稍后将对此进行说明),例如:
EpConfig ep_cfg;
ep_cfg.logConfig.level = 5;
ep_cfg.uaConfig.maxCalls = 4;
ep_cfg.mediaConfig.sndClockRate = 16000;
接下来,通过调用libInit()初始化库:
try
{
EpConfig ep_cfg;
// Specify customization of settings in ep_cfg
ep->libInit(ep_cfg);
}
catch(Error& err)
{
cout << "Initialization error: " << err.info() << endl;
}
上面的代码片段使用默认设置初始化库。
在发送或接收SIP消息之前,应用程序需要创建一个或多个传输:
try
{
TransportConfig tcfg;
tcfg.port = 5060;
TransportId tid = ep->transportCreate(PJSIP_TRANSPORT_UDP, tcfg);
}
catch(Error& err)
{
cout << "Transport creation error: " << err.info() << endl;
}
transportCreate()方法返回新创建的传输ID,它传递 传输类型和TransportConfig对象 来定制传输设置,如绑定地址和侦听端口号。没有这个,默认情况下,传输将绑定到INADDR_ANY和任何可用的端口。
除了创建无用户帐户(使用Account.create())以外,没有真正使用传输ID,稍后将对此进行说明),也许可以在应用程序想要的时候向用户显示传输列表。
要创建TLS传输,您可以使用与上述相同的方法。您可以通过修改字段TransportConfig.tlsConfig来进一步自定义TLS传输,例如设置证书文件或选择使用的密码。
try {
TransportConfig tcfg;
tcfg.port = 5061;
// Optional, set CA/certificate/private key files.
// tcfg.tlsConfig.CaListFile = "ca.crt";
// tcfg.tlsConfig.certFile = "cert.crt";
// tcfg.tlsConfig.privKeyFile = "priv.key";
// Optional, set ciphers. You can select a certain cipher/rearrange the order of ciphers here.
// tcfg.ciphers = ep->utilSslGetAvailableCiphers();
TransportId tid = ep->transportCreate(PJSIP_TRANSPORT_TLS, tcfg);
}
catch(Error& err)
{
cout << "Transport creation error: " << err.info() << endl;
}
现在我们启动库了。我们需要启动库完成初始化阶段,例如完成初始的STUN地址解析,初始化/启动声音设备等。要启动库,请调用libStart()方法:
try
{
ep->libStart();
}
catch(Error& err)
{
cout << "Startup error: " << err.info() << endl;
}
应用程序退出后,库需要关闭,以便将资源释放回操作系统。虽然可以通过删除端点实例(内部调用libDestroy())来完成,最好是手动调用它,因为在Java或Python中,垃圾回收有问题,如前所述:
ep->libDestroy();
delete ep;
class pj::
Endpoint
在应用程序中只能有一个pjsua库的实例,因此这个类是一个单例
公共功能(函数)
Endpoint
() //默认构造函数 ~Endpoint
()//虚析构函数libVersion
() const//得到库的版本libCreate
() //实例化pjsua应用程序。调用任何其他函数之前,应用程序必须调用此函数,以确保底层库被正确初始化。一旦此函数返回成功,应用程序必须在退出前调用libDestroy()。libGetState
() const //获取库状态。返回 库状态 libInit
(const EpConfig &prmEpConfig) //使用指定的设置初始化pjsua。所有设置都是可选的,并且在未指定配置时将使用默认值。请注意,在调用此函数之前必须调用create()。 prmEpConfig
-端点配置libStart
() // 在所有的初始化完成后,调用该函数,以便可以做其他检查设置。应用程序可以在init()之后的任何时间调用此函数。libRegisterThread
(const string &name)//将由外部或自身API创建的线程注册到库。请注意,每次调用此函数时,它将分配一些内存来存储线程描述,这只会在库被销毁时被释放。 name
要分配给线程的可选名称libIsThreadRegistered
()//检查该线程是否已经被注册到库中。需要注意的是此功能只适用于使用libRegisterThread()注册的库的主线程与工作线程和外部/自身线程。libStopWorkerThreads
()//停止所有工作线程libHandleEvents
(unsigned msec_timeout)//对pjsua进行事件轮询,如果需要,可以阻塞调用者线程指定的最大间隔(以毫秒为单位)。如果它在pjsua_config结构里配置了工作线程(thread_cnt域),应用程序通常不需要调用这个函数,因为轮询将由这些工作线程来完成。如果EpConfig :: UaConfig :: mainThreadOnly启用,并从主线程调用此函数(默认情况下,主线程是调用libCreate()的线程),此功能也将扫描并在列表中运行任何挂起的作业。msec_timeout
- 最长时间等待,以毫秒为单位。 libDestroy
(unsigned prmFlags = 0) //销毁pjsua. 建议使用应用程序在调用此功能之前执行正常shutdown(例如从SIP服务器注销帐户,终止预订订阅和挂断主动调用).但是如果发现有活动会话,此函数将执行所有这些操作以终止活动会话。此功能将等待(block)几秒钟等待远程的回复。如果没有跟踪它的状态,Application.可以多次安全地调用此函数。 prmFlags,
pjsua_destroy_flag 枚举值的组合utilStrError
(pj_status_t prmErr) 检索指定状态代码的错误字符串。参数 prmErr -错误代码。
utilLogWrite
(int prmLevel, const string &prmSender, const string &prmMsg)写一个日志消息参数 prmLevel -日志详细程度(1-5)
prmSender -日志发送方。
prmMsg -日志消息。
utilLogWrite
(LogEntry &e)Write a log entry.
e
-
The log entry.
utilVerifySipUri
(const string &prmUri)This is a utility function to verify that valid SIP url is given.
If the URL is a valid SIP/SIPS scheme, PJ_SUCCESS will be returned.
prmUri
-
The URL string.
utilVerifyUri
(const string &prmUri)This is a utility function to verify that valid URI is given.
Unlike utilVerifySipUri(), this function will return PJ_SUCCESS if tel: URI is given.
prmUri
-
The URL string.
utilTimerSchedule
(unsigned prmMsecDelay, Token prmUserData)Schedule a timer with the specified interval and user data.
When the interval elapsed, onTimer() callback will be called. Note that the callback may be executed by different thread, depending on whether worker thread is enabled or not.
prmMsecDelay
-
The time interval in msec.
prmUserData
-
Arbitrary user data, to be given back to application in the callback.
utilTimerCancel
(Token prmToken)Cancel previously scheduled timer with the specified timer token.
prmToken
-
The timer token, which was returned from previous utilTimerSchedule() call.
utilAddPendingJob
(PendingJob *job)Utility to register a pending job to be executed by main thread.
If EpConfig::UaConfig::mainThreadOnly is false, the job will be executed immediately.
job
-
The job class.
utilSslGetAvailableCiphers
()Get cipher list supported by SSL/TLS backend.
natDetectType
(void)This is a utility function to detect NAT type in front of this endpoint.
Once invoked successfully, this function will complete asynchronously and report the result in onNatDetectionComplete().
After NAT has been detected and the callback is called, application can get the detected NAT type by calling natGetType(). Application can also perform NAT detection by calling natDetectType() again at later time.
Note that STUN must be enabled to run this function successfully.
natGetType
()Get the NAT type as detected by natDetectType() function.
This function will only return useful NAT type after natDetectType() has completed successfully and onNatDetectionComplete() callback has been called.
Exception: if this function is called while detection is in progress, PJ_EPENDING exception will be raised.
natUpdateStunServers
(const StringVector &prmServers, bool prmWait)Update the STUN servers list.
The libInit() must have been called before calling this function.
prmServers
-
Array of STUN servers to try. The endpoint will try to resolve and contact each of the STUN server entry until it finds one that is usable. Each entry may be a domain name, host name, IP address, and it may contain an optional port number. For example:
prmWait
-
Specify if the function should block until it gets the result. In this case, the function will block while the resolution is being done, and the callback onNatCheckStunServersComplete() will be called before this function returns.
natCheckStunServers
(const StringVector &prmServers, bool prmWait, TokenprmUserData)Auxiliary function to resolve and contact each of the STUN server entries (sequentially) to find which is usable.
The libInit() must have been called before calling this function.
prmServers
-
Array of STUN servers to try. The endpoint will try to resolve and contact each of the STUN server entry until it finds one that is usable. Each entry may be a domain name, host name, IP address, and it may contain an optional port number. For example:
prmWait
-
Specify if the function should block until it gets the result. In this case, the function will block while the resolution is being done, and the callback will be called before this function returns.
prmUserData
-
Arbitrary user data to be passed back to application in the callback.
natCancelCheckStunServers
(Token token, bool notify_cb = false)Cancel pending STUN resolution which match the specified token.
Exception: PJ_ENOTFOUND if there is no matching one, or other error.
token
-
The token to match. This token was given to natCheckStunServers()
notify_cb
-
Boolean to control whether the callback should be called for cancelled resolutions. When the callback is called, the status in the result will be set as PJ_ECANCELLED.
transportCreate
(pjsip_transport_type_e type, const TransportConfig &cfg)Create and start a new SIP transport according to the specified settings.
type
-
Transport type.
cfg
-
Transport configuration.
transportEnum
()Enumerate all transports currently created in the system.
This function will return all transport IDs, and application may then call transportGetInfo() function to retrieve detailed information about the transport.
transportGetInfo
(TransportId id)Get information about transport.
id
-
Transport ID.
transportSetEnable
(TransportId id, bool enabled)Disable a transport or re-enable it.
By default transport is always enabled after it is created. Disabling a transport does not necessarily close the socket, it will only discard incoming messages and prevent the transport from being used to send outgoing messages.
id
-
Transport ID.
enabled
-
Enable or disable the transport.
transportClose
(TransportId id)Close the transport.
The system will wait until all transactions are closed while preventing new users from using the transport, and will close the transport when its usage count reaches zero.
id
-
Transport ID.
transportShutdown
(TransportHandle tp)Start graceful shutdown procedure for this transport handle.
After graceful shutdown has been initiated, no new reference can be obtained for the transport. However, existing objects that currently uses the transport may still use this transport to send and receive packets. After all objects release their reference to this transport, the transport will be destroyed immediately.
Note: application normally uses this API after obtaining the handle from onTransportState() callback.
tp
-
The transport.
hangupAllCalls
(void)Terminate all calls.
This will initiate call hangup for all currently active calls.
mediaAdd
(AudioMedia &media)Add media to the media list.
media
-
media to be added.
mediaRemove
(AudioMedia &media)Remove media from the media list.
media
-
media to be removed.
mediaExists
(const AudioMedia &media) constCheck if media has been added to the media list.
media
-
media to be check.
mediaMaxPorts
() constGet maximum number of media port.
mediaActivePorts
() constGet current number of active media port in the bridge.
mediaEnumPorts
() constEnumerate all media port.
audDevManager
()Get the instance of Audio Device Manager.
vidDevManager
()Get the instance of Video Device Manager.
codecEnum
()Enum all supported codecs in the system.
codecSetPriority
(const string &codec_id, pj_uint8_t priority)Change codec priority.
codec_id
-
Codec ID, which is a string that uniquely identify the codec (such as “speex/8000”).
priority
-
Codec priority, 0-255, where zero means to disable the codec.
codecGetParam
(const string &codec_id) constGet codec parameters.
codec_id
-
Codec ID.
codecSetParam
(const string &codec_id, const CodecParam param)Set codec parameters.
codec_id
-
Codec ID.
param
-
Codec parameter to set. Set to NULL to reset codec parameter to library default settings.
videoCodecEnum
()Enum all supported video codecs in the system.
videoCodecSetPriority
(const string &codec_id, pj_uint8_t priority)Change video codec priority.
codec_id
-
Codec ID, which is a string that uniquely identify the codec (such as “H263/90000”). Please see pjsua manual or pjmedia codec reference for details.
priority
-
Codec priority, 0-255, where zero means to disable the codec.
getVideoCodecParam
(const string &codec_id) constGet video codec parameters.
codec_id
-
Codec ID.
setVideoCodecParam
(const string &codec_id, const VidCodecParam ¶m)Set video codec parameters.
codec_id
-
Codec ID.
param
-
Codec parameter to set.
resetVideoCodecParam
(const string &codec_id)Reset video codec parameters to library default settings.
codec_id
-
Codec ID.
onNatDetectionComplete
(const OnNatDetectionCompleteParam &prm)Callback when the Endpoint has finished performing NAT type detection that is initiated with natDetectType().
prm
-
Callback parameters containing the detection result.
onNatCheckStunServersComplete
(constOnNatCheckStunServersCompleteParam &prm)Callback when the Endpoint has finished performing STUN server checking that is initiated when calling libInit(), or by calling natCheckStunServers() or natUpdateStunServers().
prm
-
Callback parameters.
onTransportState
(const OnTransportStateParam &prm)This callback is called when transport state has changed.
prm
-
Callback parameters.
onTimer
(const OnTimerParam &prm)Callback when a timer has fired.
The timer was scheduled by utilTimerSchedule().
prm
-
Callback parameters.
onSelectAccount
(OnSelectAccountParam &prm)This callback can be used by application to override the account to be used to handle an incoming message.
Initially, the account to be used will be calculated automatically by the library. This initial account will be used if application does not implement this callback, or application sets an invalid account upon returning from this callback.
Note that currently the incoming messages requiring account assignment are INVITE, MESSAGE, SUBSCRIBE, and unsolicited NOTIFY. This callback may be called before the callback of the SIP event itself, i.e: incoming call, pager, subscription, or unsolicited-event.
prm
-
Callback parameters.
Public Static Functions
instance
()Retrieve the singleton instance of the endpoint.
utilStrError
( pj_status_t prmErr )检索指定状态代码的错误字符串。
prmErr
-
错误代码。
utilLogWrite
( int prmLevel,const string&prmSender,const string&prmMsg )写一个日志消息。
prmLevel
-
日志详细程度(1-5)
prmSender
-
日志发送方。
prmMsg
-
日志消息。
utilLogWrite
(LogEntry&e )写一个日志条目。
e
-
日志条目。
utilVerifySipUri
(const string&prmUri )这是一个效用函数,用于验证是否给出了有效的SIP URL。
如果URL是有效的SIP / SIPS方案,则将返回PJ_SUCCESS。
prmUri
-
URL字符串。
utilVerifyUri
(const string&prmUri )这是一个效用函数,用于验证是否给出了有效的URI。
与utilVerifySipUri()不同,如果给出tel:URI,此函数将返回PJ_SUCCESS。
prmUri
-
URL字符串。
utilTimerSchedule
(未签名的prmMsecDelay,令牌 prmUserData )安排具有指定间隔的时间和用户数据。
当间隔经过时,将调用onTimer()回调。请注意,回调可能由不同的线程执行,具体取决于是否启用了工作线程。
prmMsecDelay
-
时间间隔,单位为毫秒。
prmUserData
-
任意用户数据,被回馈给应用程序在回调。
utilTimerCancel
(Token prmToken )使用指定的定时器令牌取消先前定时的定时器。
prmToken
-
从以前的utilTimerSchedule()调用返回的计时器令牌。
utilAddPendingJob
(PendingJob * job )注册要由主线程执行的待处理作业的实用程序。
如果EpConfig :: UaConfig :: mainThreadOnly为false,该作业将立即执行。
job
-
工作班。
utilSslGetAvailableCiphers
()获取SSL / TLS后端支持的密码列表。
natDetectType
( void )这是一个在这个端点前面检测NAT类型的效用函数。
一旦成功调用,此函数将异步完成,并在onNatDetectionComplete()中报告结果。
在检测到NAT并调用回调后,应用程序可以通过调用natGetType()获取检测到的NAT类型。应用程序还可以在稍后再次调用natDetectType()来执行NAT检测。
请注意,必须启用STUN才能成功运行此功能。
natGetType
()获取natDetectType()函数检测到的NAT类型。
natDetectType()已成功完成并且已调用onNatDetectionComplete()回调函数后,此函数将仅返回有用的NAT类型。
异常:如果在检测过程中调用此函数,将引发PJ_EPENDING异常。
natUpdateStunServers
(const StringVector&prmServers,bool prmWait )更新STUN服务器列表。
该libInit()必须在调用这个函数之前已被调用。
prmServers
-
STUN服务器数组尝试。端点将尝试解析并联系每个STUN服务器条目,直到找到可用的条目。每个条目可能是域名,主机名,IP地址,并且可能包含可选的端口号。例如:
prmWait
-
指定函数是否应该阻塞,直到得到结果。在这种情况下,函数将在分辨率完成时阻塞,并且在该函数返回之前调用onNatCheckStunServersComplete()。
natCheckStunServers
(const StringVector&prmServers,bool prmWait,Token prmUserData )辅助功能,用于解析和联系每个STUN服务器条目(依次)以查找哪个可用。
该libInit()必须在调用这个函数之前已被调用。
prmServers
-
STUN服务器数组尝试。端点将尝试解析并联系每个STUN服务器条目,直到找到可用的条目。每个条目可能是域名,主机名,IP地址,并且可能包含可选的端口号。例如:
prmWait
-
指定函数是否应该阻塞,直到得到结果。在这种情况下,函数将在分辨率完成时阻塞,并且在该函数返回之前调用回调函数。
prmUserData
-
任意用户数据要在回调中传回应用程序。
natCancelCheckStunServers
(令牌 令牌,bool notify_cb = false )取消与指定令牌匹配的待决STUN分辨率。
异常:如果没有匹配的PJ_ENOTFOUND或其他错误。
token
-
令牌匹配。这个令牌给了natCheckStunServers()
notify_cb
-
布尔值,用于控制是否为已取消的分辨率调用回调。当调用回调时,结果中的状态将被设置为PJ_ECANCELLED。
transportCreate
( pjsip_transport_type_e type,const TransportConfig&cfg )根据指定的设置创建并启动新的SIP传输。
type
-
运输类型。
cfg
-
运输配置。
transportEnum
()枚举系统中当前创建的所有传输。
此函数将返回所有传输ID,然后应用程序可以调用transportGetInfo()函数来检索有关传输的详细信息。
transportGetInfo
(TransportId id )获取有关运输的信息。
id
-
运输ID。
transportSetEnable
(TransportId id,bool enabled )禁用传输或重新启用它。
默认情况下,传输始终在创建后启用。禁用传输不一定关闭套接字,它只会丢弃传入的消息,并阻止传输被用于发送传出的消息。
id
-
运输ID。
enabled
-
启用或禁用传输。
transportClose
(TransportId id )关闭运输。
系统将等待所有事务关闭,同时防止新用户使用传输,并在其使用次数达到零时关闭传输。
id
-
运输ID。
transportShutdown
(TransportHandle tp )启动此运输手柄的正常关机程序。
在正常关机启动后,运输不能获得新的参考。然而,当前使用传输的现有对象仍然可以使用该传输来发送和接收数据包。所有的物品释放他们对这种运输工具的参考后,运输工具将立即销毁。
注意:从onTransportState()回调获取句柄后,应用程序通常会使用此API 。
tp
-
运输。
hangupAllCalls
( void )终止所有呼叫
这将启动所有当前活动呼叫的呼叫挂断。
mediaAdd
(AudioMedia&media )将媒体添加到媒体列表。
media
-
要添加的媒体
mediaRemove
(AudioMedia&media )从媒体列表中删除媒体。
media
-
要移除的媒体
mediaExists
(const的 AudioMedia&媒体) const的检查媒体是否已添加到媒体列表。
media
-
媒体要检查
mediaMaxPorts
() const的获取媒体端口的最大数量。
mediaActivePorts
() const的获取桥梁中当前活动媒体端口的数量。
mediaEnumPorts
() const的枚举所有媒体端口。
audDevManager
()获取音频设备管理器的实例。
vidDevManager
()获取视频设备管理器的实例。
codecEnum
()枚举系统中所有支持的编解码器。
codecSetPriority
(const string&codec_id,pj_uint8_t priority )更改编解码优先级
codec_id
-
编解码器ID,它是唯一标识编解码器的字符串(如“speex / 8000”)。
priority
-
编解码器优先级0-255,其中0表示禁用编解码器。
codecGetParam
(常量字符串和codec_id )常量获取编解码器参数
codec_id
-
编解码器ID。
codecSetParam
(const string&codec_id,const CodecParam param )设置编解码器参数
codec_id
-
编解码器ID。
param
-
编解码器参数设置。设置为NULL以将编解码器参数重置为库默认设置。
videoCodecEnum
()枚举所有支持的视频编解码器在系统中。
videoCodecSetPriority
(const string&codec_id,pj_uint8_t priority )更改视频编解码器优先级。
codec_id
-
编解码器ID,其是唯一标识编解码器的字符串(例如“H263 / 90000”)。有关详细信息,请参阅pjsua手册或pjmedia编解码器参考。
priority
-
编解码器优先级0-255,其中0表示禁用编解码器。
getVideoCodecParam
(常量字符串和codec_id )常量获取视频编解码器参数。
codec_id
-
编解码器ID。
setVideoCodecParam
(const string&codec_id,const VidCodecParam&param )设置视频编解码器参数。
codec_id
-
编解码器ID。
param
-
编解码器参数设置。
resetVideoCodecParam
(const string&codec_id )将视频编解码器参数重置为库默认设置。
codec_id
-
编解码器ID。
onNatDetectionComplete
(const OnNatDetectionCompleteParam&prm )端点完成使用natDetectType()启动的NAT类型检测时的回调。
prm
-
包含检测结果的回调参数。
onNatCheckStunServersComplete
(const OnNatCheckStunServersCompleteParam&prm )当Endpoint完成执行调用libInit()或调用natCheckStunServers()或natUpdateStunServers()时启动的STUN服务器检查时的回调。
prm
-
回调参数
onTransportState
(const OnTransportStateParam&prm )传输状态发生变化时调用此回调。
prm
-
回调参数
onTimer
(const OnTimerParam&prm )计时器触发时回调。
prm
-
回调参数
onSelectAccount
(OnSelectAccountParam&prm )应用程序可以使用此回调来覆盖用于处理传入消息的帐户。
最初,使用的帐户将由图书馆自动计算。如果应用程序没有实现此回调,则该初始帐户将被使用,或者从此回调返回时应用程序设置无效的帐户。
请注意,目前需要帐号分配的传入消息是INVITE,MESSAGE,SUBSCRIBE和未经请求的NOTIFY。这个回调可以在SIP事件本身的回叫之前被调用,即:来电,寻呼机,订阅或者非请求事件。
prm
-
回调参数
公共静态功能
instance
()检索端点的单例实例。
标签:调度 工具 target bfd move 方法 uac 无符号 消息
原文地址:http://www.cnblogs.com/mobilecard/p/6713373.html