PJSUA2开发文档--第四章 端点ENDPOINT

4.端点ENDPOINT

Endpoint类是一个单例类,应用程序必须在此类实例之前创建一个并且最多只能创建一个,然后才能执行任何操作。同样,一旦这个类被销毁,应用程序就不能调用该库的任何API。这个类是PJSUA2的核心类,它提供了以下功能:

  • 启动和关机
  • 配置的定制,如核心UA(用户代理)SIP配置,媒体配置和日志配置

本章将介绍上述功能。

要使用Endpoint类,通常应用程序不需要进行子类化(再写继承于该类的子类,简称子类化(subclass)),除非:

  • 应用程序希望实现/重载端点回调方法来获取如传输状态更改或NAT检测完成等事件,或者
  • 应用程序使用Endpoint.utilTimerSchedule()API调度计时器。在这种情况下,应用程序需要实现onTimer()回调以在定时器到期时获取通知。

4.1 实例化端点

在其他任何事情之前,必须实例化Endpoint类:

Endpoint *ep = new Endpoint;

一旦端点被实例化,可使用Endpoint.instance()静态方法获取端点实例。

4.2 创建库

通过调用其libCreate()方法来创建库:

try
{
    ep->libCreate();
}
catch(Error& err)
{
    cout << "Startup error: " << err.info() << endl;
}

如果发生错误,libCreate()方法将引发异常,因此我们需要使用try / catch子句来捕获异常。

4.3 初始化库并配置设置

EpConfig类提供端点配置,允许自定义以下设置:

  • UAConfig,指定核心SIP用户代理设置。
  • MediaConfig,指定各种媒体全局设置
  • LogConfig来自定义日志设置。

请注意,可以在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;
}

上面的代码片段使用默认设置初始化库。

4.4 创建一个或多个传输

在发送或接收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,稍后将对此进行说明),也许可以在应用程序想要的时候向用户显示传输列表。

4.5 创建安全传输(TLS)

要创建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;
}

4.5 启动库

现在我们启动库了。我们需要启动库完成初始化阶段,例如完成初始的STUN地址解析,初始化/启动声音设备等。要启动库,请调用libStart()方法:

try
{
    ep->libStart();
}
catch(Error& err)
{
    cout << "Startup error: " << err.info() << endl;
}

4.6 关闭库

应用程序退出后,库需要关闭,以便将资源释放回操作系统。虽然可以通过删除端点实例(内部调用libDestroy())来完成,最好是手动调用它,因为在Java或Python中,垃圾回收有问题,如前所述:

ep->libDestroy();
delete ep;

4.7 类引用

4.7.1 Endpoint

class pj::Endpoint

Endpoint (端点)表示pjsua库的一个实例

在应用程序中只能有一个pjsua库的实例,因此这个类是一个单例

公共功能(函数)

Endpoint()    //默认构造函数 
virtual ~Endpoint()//虚析构函数
Version libVersion() const//得到库的版本
void libCreate()  //实例化pjsua应用程序。调用任何其他函数之前,应用程序必须调用此函数,以确保底层库被正确初始化。一旦此函数返回成功,应用程序必须在退出前调用libDestroy()
pjsua_state libGetState() const //获取库状态。返回 库状态 
void libInit(const EpConfig &prmEpConfig) //使用指定的设置初始化pjsua。所有设置都是可选的,并且在未指定配置时将使用默认值。请注意,在调用此函数之前必须调用create()。 
  参数  prmEpConfig -端点配置
void libStart() // 在所有的初始化完成后,调用该函数,以便可以做其他检查设置。应用程序可以在init()之后的任何时间调用此函数。
void libRegisterThread(const string &name)//将由外部或自身API创建的线程注册到库。请注意,每次调用此函数时,它将分配一些内存来存储线程描述,这只会在库被销毁时被释放。 
  参数name 要分配给线程的可选名称
bool libIsThreadRegistered()//检查该线程是否已经被注册到库中。需要注意的是此功能只适用于使用libRegisterThread()注册的库的主线程与工作线程和外部/自身线程。
void libStopWorkerThreads()//停止所有工作线程
int libHandleEvents(unsigned msec_timeout)//对pjsua进行事件轮询,如果需要,可以阻塞调用者线程指定的最大间隔(以毫秒为单位)。如果它在pjsua_config结构里配置了工作线程(thread_cnt域),应用程序通常不需要调用这个函数,因为轮询将由这些工作线程来完成。如果EpConfig :: UaConfig :: mainThreadOnly启用,并从主线程调用此函数(默认情况下,主线程是调用libCreate()的线程),此功能也将扫描并在列表中运行任何挂起的作业。
   返回  投票期间处理的事件数。负值表示错误,应用程序可以以(status = -return_value)方式检索错误。
  参数  msec_timeout - 最长时间等待,以毫秒为单位。 
void libDestroy(unsigned prmFlags = 0) //销毁pjsua. 建议使用应用程序在调用此功能之前执行正常shutdown(例如从SIP服务器注销帐户,终止预订订阅和挂断主动调用).但是如果发现有活动会话,此函数将执行所有这些操作以终止活动会话。此功能将等待(block)几秒钟等待远程的回复。如果没有跟踪它的状态,Application.可以多次安全地调用此函数。 
  参数  prmFlags,  pjsua_destroy_flag 枚举值的组合
string utilStrError(pj_status_t prmErr) 检索指定状态代码的错误字符串。

参数 prmErr -错误代码。

void utilLogWrite(int prmLevelconst string &prmSenderconst string &prmMsg)写一个日志消息

参数 prmLevel -日志详细程度(1-5)

prmSender -日志发送方。

prmMsg -日志消息。

void utilLogWrite(LogEntry &e)

Write a log entry.

Parameters
  • e -

    The log entry.

pj_status_t 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.

Return
PJ_SUCCESS on success, or the appropriate error code.
See
utilVerifyUri()
Parameters
  • prmUri -

    The URL string.

pj_status_t 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.

Return
PJ_SUCCESS on success, or the appropriate error code.
See
pjsua_verify_sip_url()
Parameters
  • prmUri -

    The URL string.

Token utilTimerSchedule(unsigned prmMsecDelayToken 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.

Return
Token to identify the timer, which could be given to utilTimerCancel().
Parameters
  • prmMsecDelay -

    The time interval in msec.

  • prmUserData -

    Arbitrary user data, to be given back to application in the callback.
void utilTimerCancel(Token prmToken)

Cancel previously scheduled timer with the specified timer token.

Parameters
void 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.

Parameters
  • job -

    The job class.

IntVector utilSslGetAvailableCiphers()

Get cipher list supported by SSL/TLS backend.

void 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.

pj_stun_nat_type 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.

void natUpdateStunServers(const StringVector &prmServers, bool prmWait)

Update the STUN servers list.

The libInit() must have been called before calling this function.

Parameters
  • 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:

    • “pjsip.org” (domain name)
    • “sip.pjsip.org” (host name)
    • “pjsip.org:33478” (domain name and a non- standard port number)
    • “10.0.0.1:3478” (IP address and port number)
  • 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.
void natCheckStunServers(const StringVector &prmServers, bool prmWaitTokenprmUserData)

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.

See
natCancelCheckStunServers()
Parameters
  • 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:

    • “pjsip.org” (domain name)
    • “sip.pjsip.org” (host name)
    • “pjsip.org:33478” (domain name and a non- standard port number)
    • “10.0.0.1:3478” (IP address and port number)
  • 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.
void 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.

Parameters
  • 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.
TransportId transportCreate(pjsip_transport_type_e typeconst TransportConfig &cfg)

Create and start a new SIP transport according to the specified settings.

Return
The transport ID.
Parameters
  • type -

    Transport type.

  • cfg -

    Transport configuration.
IntVector 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.

Return
Array of transport IDs.
TransportInfo transportGetInfo(TransportId id)

Get information about transport.

Return
Transport info.
Parameters
  • id -

    Transport ID.

void 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.

Parameters
  • id -

    Transport ID.

  • enabled -

    Enable or disable the transport.
void 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.

Parameters
  • id -

    Transport ID.

void 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.

Parameters
  • tp -

    The transport.

void hangupAllCalls(void)

Terminate all calls.

This will initiate call hangup for all currently active calls.

void mediaAdd(AudioMedia &media)

Add media to the media list.

Parameters
  • media -

    media to be added.

void mediaRemove(AudioMedia &media)

Remove media from the media list.

Parameters
  • media -

    media to be removed.

bool mediaExists(const AudioMedia &media) const

Check if media has been added to the media list.

Return
True if media has been added, false otherwise.
Parameters
  • media -

    media to be check.

unsigned mediaMaxPorts() const

Get maximum number of media port.

Return
Maximum number of media port in the conference bridge.
unsigned mediaActivePorts() const

Get current number of active media port in the bridge.

Return
The number of active media port.
const AudioMediaVector &mediaEnumPorts() const

Enumerate all media port.

Return
The list of media port.
AudDevManager &audDevManager()

Get the instance of Audio Device Manager.

Return
The Audio Device Manager.
VidDevManager &vidDevManager()

Get the instance of Video Device Manager.

Return
The Video Device Manager.
const CodecInfoVector &codecEnum()

Enum all supported codecs in the system.

Return
Array of codec info.
void codecSetPriority(const string &codec_id, pj_uint8_t priority)

Change codec priority.

Parameters
  • 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.
CodecParam codecGetParam(const string &codec_id) const

Get codec parameters.

Return
Codec parameters. If codec is not found, Error will be thrown.
Parameters
  • codec_id -

    Codec ID.

void codecSetParam(const string &codec_idconst CodecParam param)

Set codec parameters.

Parameters
  • codec_id -

    Codec ID.

  • param -

    Codec parameter to set. Set to NULL to reset codec parameter to library default settings.
const CodecInfoVector &videoCodecEnum()

Enum all supported video codecs in the system.

Return
Array of video codec info.
void videoCodecSetPriority(const string &codec_id, pj_uint8_t priority)

Change video codec priority.

Parameters
  • 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.
VidCodecParam getVideoCodecParam(const string &codec_id) const

Get video codec parameters.

Return
Codec parameters. If codec is not found, Error will be thrown.
Parameters
  • codec_id -

    Codec ID.

void setVideoCodecParam(const string &codec_idconst VidCodecParam &param)

Set video codec parameters.

Parameters
  • codec_id -

    Codec ID.

  • param -

    Codec parameter to set.
void resetVideoCodecParam(const string &codec_id)

Reset video codec parameters to library default settings.

Parameters
  • codec_id -

    Codec ID.

virtual void onNatDetectionComplete(const OnNatDetectionCompleteParam &prm)

Callback when the Endpoint has finished performing NAT type detection that is initiated with natDetectType().

Parameters
  • prm -

    Callback parameters containing the detection result.

virtual void 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().

Parameters
  • prm -

    Callback parameters.

virtual void onTransportState(const OnTransportStateParam &prm)

This callback is called when transport state has changed.

Parameters
  • prm -

    Callback parameters.

virtual void onTimer(const OnTimerParam &prm)

Callback when a timer has fired.

The timer was scheduled by utilTimerSchedule().

Parameters
  • prm -

    Callback parameters.

virtual void 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.

Parameters
  • prm -

    Callback parameters.

Public Static Functions

static Endpoint &instance()

Retrieve the singleton instance of the endpoint.

string utilStrError( pj_status_t prmErr 

检索指定状态代码的错误字符串。

参数
  • prmErr -

    错误代码。

void utilLogWrite( int prmLevelconst string&prmSenderconst string&prmMsg 

写一个日志消息。

参数
  • prmLevel -

    日志详细程度(1-5)

  • prmSender -

    日志发送方。
  • prmMsg -

    日志消息。
void utilLogWriteLogEntry

写一个日志条目。

参数
  • e -

    日志条目。

pj_status_t utilVerifySipUriconst string&prmUri 

这是一个效用函数,用于验证是否给出了有效的SIP URL。

如果URL是有效的SIP / SIPS方案,则将返回PJ_SUCCESS。

返回
PJ_SUCCESS成功,或相应的错误代码。
看到
utilVerifyUri()
参数
  • prmUri -

    URL字符串。

pj_status_t utilVerifyUriconst string&prmUri 

这是一个效用函数,用于验证是否给出了有效的URI。

utilVerifySipUri()不同,如果给出tel:URI,此函数将返回PJ_SUCCESS。

返回
PJ_SUCCESS成功,或相应的错误代码。
看到
pjsua_verify_sip_url()
参数
  • prmUri -

    URL字符串。

令牌 utilTimerSchedule(未签名的prmMsecDelay令牌 prmUserData 

安排具有指定间隔的时间和用户数据。

当间隔经过时,将调用onTimer()回调。请注意,回调可能由不同的线程执行,具体取决于是否启用了工作线程。

返回
令牌识别定时器,可以给予utilTimerCancel()
参数
  • prmMsecDelay -

    时间间隔,单位为毫秒。

  • prmUserData -

    任意用户数据,被回馈给应用程序在回调。
void utilTimerCancelTokenprmToken 

使用指定的定时器令牌取消先前定时的定时器。

参数
void utilAddPendingJobPendingJob * job 

注册要由主线程执行的待处理作业的实用程序。

如果EpConfig :: UaConfig :: mainThreadOnly为false,该作业将立即执行。

参数
  • job -

    工作班。

IntVectorutilSslGetAvailableCiphers()

获取SSL / TLS后端支持的密码列表。

void natDetectType( void )

这是一个在这个端点前面检测NAT类型的效用函数。

一旦成功调用,此函数将异步完成,并在onNatDetectionComplete()中报告结果。

在检测到NAT并调用回调后,应用程序可以通过调用natGetType()获取检测到的NAT类型。应用程序还可以在稍后再次调用natDetectType()来执行NAT检测。

请注意,必须启用STUN才能成功运行此功能。

pj_stun_nat_type natGetType()

获取natDetectType()函数检测到的NAT类型。

natDetectType()已成功完成并且已调用onNatDetectionComplete()回调函数后,此函数将仅返回有用的NAT类型。

异常:如果在检测过程中调用此函数,将引发PJ_EPENDING异常。

void natUpdateStunServersconst StringVectorprmServers,bool prmWait 

更新STUN服务器列表。

libInit()必须在调用这个函数之前已被调用。

参数
  • prmServers -

    STUN服务器数组尝试。端点将尝试解析并联系每个STUN服务器条目,直到找到可用的条目。每个条目可能是域名,主机名,IP地址,并且可能包含可选的端口号。例如:

    • “pjsip.org”(域名)
    • “sip.pjsip.org”(主机名)
    • “pjsip.org:33478”(域名和非标准端口号)
    • “10.0.0.1:3478”(IP地址和端口号)
  • prmWait -

    指定函数是否应该阻塞,直到得到结果。在这种情况下,函数将在分辨率完成时阻塞,并且在该函数返回之前调用onNatCheckStunServersComplete()
void natCheckStunServersconst StringVectorprmServers,bool prmWaitTokenprmUserData 

辅助功能,用于解析和联系每个STUN服务器条目(依次)以查找哪个可用。

libInit()必须在调用这个函数之前已被调用。

看到
natCancelCheckStunServers()
参数
  • prmServers -

    STUN服务器数组尝试。端点将尝试解析并联系每个STUN服务器条目,直到找到可用的条目。每个条目可能是域名,主机名,IP地址,并且可能包含可选的端口号。例如:

    • “pjsip.org”(域名)
    • “sip.pjsip.org”(主机名)
    • “pjsip.org:33478”(域名和非标准端口号)
    • “10.0.0.1:3478”(IP地址和端口号)
  • prmWait -

    指定函数是否应该阻塞,直到得到结果。在这种情况下,函数将在分辨率完成时阻塞,并且在该函数返回之前调用回调函数。
  • prmUserData -

    任意用户数据要在回调中传回应用程序。
void natCancelCheckStunServers令牌 令牌,bool notify_cb = false )

取消与指定令牌匹配的待决STUN分辨率。

异常:如果没有匹配的PJ_ENOTFOUND或其他错误。

参数
  • token -

    令牌匹配。这个令牌给了natCheckStunServers()

  • notify_cb -

    布尔值,用于控制是否为已取消的分辨率调用回调。当调用回调时,结果中的状态将被设置为PJ_ECANCELLED。
TransportIdtransportCreate( pjsip_transport_type_e typeconst TransportConfigcfg 

根据指定的设置创建并启动新的SIP传输。

返回
运输ID。
参数
  • type -

    运输类型。

  • cfg -

    运输配置。
IntVectortransportEnum()

枚举系统中当前创建的所有传输。

此函数将返回所有传输ID,然后应用程序可以调用transportGetInfo()函数来检索有关传输的详细信息。

返回
传输ID数组。
TransportInfotransportGetInfoTransportIdid 

获取有关运输的信息。

返回
交通信息
参数
  • id -

    运输ID。

void transportSetEnableTransportIdid,bool enabled 

禁用传输或重新启用它。

默认情况下,传输始终在创建后启用。禁用传输不一定关闭套接字,它只会丢弃传入的消息,并阻止传输被用于发送传出的消息。

参数
  • id -

    运输ID。

  • enabled -

    启用或禁用传输。
void transportCloseTransportIdid 

关闭运输。

系统将等待所有事务关闭,同时防止新用户使用传输,并在其使用次数达到零时关闭传输。

参数
  • id -

    运输ID。

void transportShutdownTransportHandletp 

启动此运输手柄的正常关机程序。

在正常关机启动后,运输不能获得新的参考。然而,当前使用传输的现有对象仍然可以使用该传输来发送和接收数据包。所有的物品释放他们对这种运输工具的参考后,运输工具将立即销毁。

注意:从onTransportState()回调获取句柄后,应用程序通常会使用此API 。

参数
  • tp -

    运输。

void hangupAllCalls( void )

终止所有呼叫

这将启动所有当前活动呼叫的呼叫挂断。

void mediaAddAudioMediamedia 

将媒体添加到媒体列表。

参数
  • media -

    要添加的媒体

void mediaRemoveAudioMediamedia 

从媒体列表中删除媒体。

参数
  • media -

    要移除的媒体

布尔mediaExistsconst的 AudioMedia媒体) const的

检查媒体是否已添加到媒体列表。

返回
如果添加了媒体,则为真,否则为false。
参数
  • media -

    媒体要检查

无符号mediaMaxPorts() const的

获取媒体端口的最大数量。

返回
会议桥中媒体端口的最大数量。
无符号mediaActivePorts() const的

获取桥梁中当前活动媒体端口的数量。

返回
活动媒体端口的数量。
常量 AudioMediaVectormediaEnumPorts() const的

枚举所有媒体端口。

返回
媒体端口列表。
AudDevManageraudDevManager()

获取音频设备管理器的实例。

返回
音频设备管理器。
VidDevManagervidDevManager()

获取视频设备管理器的实例。

返回
视频设备管理器。
const CodecInfoVectorcodecEnum()

枚举系统中所有支持的编解码器。

返回
编解码器信息数组。
void codecSetPriorityconst string&codec_id,pj_uint8_t priority 

更改编解码优先级

参数
  • codec_id -

    编解码器ID,它是唯一标识编解码器的字符串(如“speex / 8000”)。

  • priority -

    编解码器优先级0-255,其中0表示禁用编解码器。
CodecParamcodecGetParam常量字符串和codec_id )常量

获取编解码器参数

返回
编解码器参数。如果没有找到编解码器,则会抛出错误
参数
  • codec_id -

    编解码器ID。

void codecSetParamconst string&codec_idconst CodecParamparam 

设置编解码器参数

参数
  • codec_id -

    编解码器ID。

  • param -

    编解码器参数设置。设置为NULL以将编解码器参数重置为库默认设置。
const CodecInfoVectorvideoCodecEnum()

枚举所有支持的视频编解码器在系统中。

返回
视频编解码器信息数组。
void videoCodecSetPriorityconst string&codec_id,pj_uint8_t priority 

更改视频编解码器优先级。

参数
  • codec_id -

    编解码器ID,其是唯一标识编解码器的字符串(例如“H263 / 90000”)。有关详细信息,请参阅pjsua手册或pjmedia编解码器参考。

  • priority -

    编解码器优先级0-255,其中0表示禁用编解码器。
VidCodecParamgetVideoCodecParam常量字符串和codec_id )常量

获取视频编解码器参数。

返回
编解码器参数。如果没有找到编解码器,则会抛出错误
参数
  • codec_id -

    编解码器ID。

void setVideoCodecParamconst string&codec_idconst VidCodecParamparam 

设置视频编解码器参数。

参数
  • codec_id -

    编解码器ID。

  • param -

    编解码器参数设置。
void resetVideoCodecParamconst string&codec_id 

将视频编解码器参数重置为库默认设置。

参数
  • codec_id -

    编解码器ID。

虚拟 void onNatDetectionCompleteconst OnNatDetectionCompleteParamprm 

端点完成使用natDetectType()启动的NAT类型检测时的回调。

参数
  • prm -

    包含检测结果的回调参数。

虚拟 void onNatCheckStunServersCompleteconst OnNatCheckStunServersCompleteParamprm 

Endpoint完成执行调用libInit()或调用natCheckStunServers()natUpdateStunServers()时启动的STUN服务器检查时的回调。

参数
  • prm -

    回调参数

虚拟 void onTransportStateconst OnTransportStateParamprm 

传输状态发生变化时调用此回调。

参数
  • prm -

    回调参数

虚拟 void onTimerconst OnTimerParamprm 

计时器触发时回调。

计时器由utilTimerSchedule()调度

参数
  • prm -

    回调参数

虚拟 void onSelectAccountOnSelectAccountParamprm 

应用程序可以使用此回调来覆盖用于处理传入消息的帐户。

最初,使用的帐户将由图书馆自动计算。如果应用程序没有实现此回调,则该初始帐户将被使用,或者从此回调返回时应用程序设置无效的帐户。

请注意,目前需要帐号分配的传入消息是INVITE,MESSAGE,SUBSCRIBE和未经请求的NOTIFY。这个回调可以在SIP事件本身的回叫之前被调用,即:来电,寻呼机,订阅或者非请求事件。

参数
  • prm -

    回调参数

公共静态功能

static Endpointinstance()

检索端点的单例实例。

时间: 2024-11-03 23:42:08

PJSUA2开发文档--第四章 端点ENDPOINT的相关文章

PJSUA2开发文档--第五章 帐户(号)Accounts

第五章 帐户(号) 帐户提供正在使用该应用程序的用户身份.一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址(Address of Record ,AOR),并且用作传出请求中的From头. 帐户可能有也可能没有与之相关联的客户注册.帐户也与路由集和一些认证凭证相关联,这些凭证在使用该帐户发送SIP请求消息时使用.帐户还具有状态,当它们订阅的该帐户存在时,该状态将被报告给远程peer(对等体),或者如果为该帐户启用了存在发布,则该状态被发布到存在服

PJSUA2开发文档--第六章 媒体 Media类

6. 媒体(Media) 媒体对象是能够产生媒体或接受媒体的对象. Media的重要子类是AudioMedia,它代表音频媒体.PJSUA2支持多种类型的音频媒体对象: 捕获设备的AudioMedia,用于从声音设备捕获音频. 播放设备的AudioMedia,可以播放音频到声音设备. 呼叫音频媒体,用于向远程人员发送和接收音频. AudioMediaPlayer,播放WAV文件. AudioMediaRecorder将音频录制到WAV文件. 将来可能会添加更多的媒体对象. 6.1 音频会议桥 会

PJSUA2开发文档--第七章 呼叫 Calls类

7   呼叫Calls 呼叫由Call类处理 7.1 子类化Call类 要使用Call类,应用程序应创建子类,如: class MyCall : public Call { public: MyCall(Account &acc, int call_id = PJSUA_INVALID_ID) : Call(acc, call_id) { } ~MyCall() { } // Notification when call's state has changed. virtual void onC

手机客户端接口开发文档模板整理

这是个人整理的手机开发文档模板,方便自己以后编写文档. 大体内容如下,详细在个人csdn中下载: 移动端转发短信上传温湿度信息 移动端负责后台接收温湿度传感器通过短信发来的温湿度和经纬度信息,移动端后台接收后上传web服务器,当然传感器也可通过wifi直接上传web服务器.返回小写true或者false. 请求URL: http://192.168.1.101:8080/RFID/addTransTemperature.action?phoneNumber=123&temperature=12.

微信开发文档

1. 选择功能设置 填写JS安全域名 下载 .....txt.传到服务器上 2.下一步进入基本配置 AppID(应用ID)  wxc8d0f11aba2b1ec0 AppSecret(应用密钥) 0937eb071d48a6b944ccc3e67ad0b25e 3.修改服务器配置 配置令牌 token 开始开发---接入指南 页面最下方 代码示例 下载 wx_sample.php 去开发者中心 进入开发者文档 进入微信网页开发 进入微信JS-SDK开发文档 页面的最下方 示例代码 下载完成后 打

软件开发文档

软件开发文档 软件开发文档是软件开发使用和维护过程中的必备资料.它能提高软件开发的效率,保证软件的质量,而且在软件的使用过程中有指导,帮助,解惑的作用,尤其在维护工作中,文档是不可或缺的资料. 软件文档可以分为开发文档和产品文档两大类. 开发文档包括:<功能要求>.<投标方案>.<需求分析>.<技术分析>.<系统分析>.<数据库文档>.<功能函数文档>.<界面文档>.<编译手册>.< QA 文

ECMall模板开发文档

ECMall 模板开发文档 前 言 欢迎阅读 ECMall 模板制作教程,通过阅读本教程可快速上手 ECMall 模板的使用和制作. ECMall 模板制 作要求用户具备 XML . XHTML 和 CSS 基础知识:至少掌握一种文本编辑器或网页制作工具 ( 如: EditPlus,Dreamweaver,Textmate 等 ) : 本教程还将及一些模板代码, 如从没有了解过 Smarty 建议阅读 Smarty 帮助手册. 第一节 -ECMall 模板机制介绍 通过阅读本节你将了解: 1.

onvif 开发文档【2】

二: onvif 开发环境的搭建 下边这张图来自于网上,对我们熟悉onvif开发描述的十分清晰,我就是顺着这个思路走下去的. 从上边的介绍中,我们基本知道onvif是个什么协议,其中十分关键一点是这种协议的展现形式是webservice.让我们通过下图对webservice的调用过程有一个初步的了解. 对基于webservice格式存在接口,我们第一步要首先寻找webserive对应的wsdl文件在那里?当然去onvif的官方网站去找了.要搭建开发平台的第一步就是从onvif的官方网站获取wsd

Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来)

在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.. 在广泛使用的侧边滑动导航开源库 --SlidingLayer其实就是使用到了Scroller类进行的实现,下载地址:GITHUB  ,下面要讲的不是这个库,而是这个库的实现过程中使用到的---Scroller类,懂了之后你看库的源码就知道,原来它是这样实现的. Scroller类使用过程中,懂得以下机制可能会对开发更有帮助: 1