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 onCallState(OnCallStateParam &prm); // Notification when call's media state has changed.
virtual void onCallMediaState(OnCallMediaStateParam &prm);
};

在其子类中,应用程序可以实现呼叫回调,基本上用于处理与呼叫有关的事件,如呼叫状态更改或来电转接请求。

7.2 呼出 Making Outgoing Calls

拨出电话很简单,只需调用Call对象的makeCall()方法即可。假设在“dest_uri”中将Account对象作为acc变量和目标URI字符串,可以使用下面的代码段发起呼出:

Call *call = new MyCall(*acc);
CallOpParam prm(true); // Use default call settings
try {
call->makeCall(dest_uri, prm);
} catch(Error& err) {
cout << err.info() << endl;
}

上面的代码段创建一个Call对象,并使用默认的呼叫设置启动到dest_uri的呼出。对呼叫的后续操作可以使用呼叫实例中的方法,并且将呼叫的事件报告给回调。有关回调的更多内容将稍后解释。

7.3 接收来电 Receiving Incoming Calls

来电将被报告为Account类的onIncomingCall()。必须从Account类派生一个类来处理来电。

以下是回调实现的示例代码:

void MyAccount::onIncomingCall(OnIncomingCallParam &iprm)
{
Call *call = new MyCall(*this, iprm.callId);
CallOpParam prm;
prm.statusCode = PJSIP_SC_OK;
call->answer(prm);
}

对于来电,如以上所示,在回调函数中创建呼叫实例。应用程序应确保在呼叫生命周期内存储呼叫实例(直到呼叫断开连接)。

7.4 呼叫属性

所有呼叫属性,如状态,媒体状态,远端(远程对等体)信息等都存储为CallInfo类,可以使用Call的getInfo()方法获取。

7.5 呼叫断开

呼叫断开事件是一个特殊的事件,因为一旦报告此事件的回调返回,该调用将不再有效,并且调用对象的任何操作将引发错误异常。因此,建议删除回调中的调用对象。

Call的onCallState()方法报告呼叫断开,可以检测如下:

void MyCall::onCallState(OnCallStateParam &prm)
{
CallInfo ci = getInfo();
if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
/* Delete the call */
delete this;
}
}

7.6 与通话的音频媒体工作

当呼叫的音频媒体准备就绪(或激活)时,只能使用呼叫的音频媒体(例如,连接会议电话中的声音设备的呼叫)。呼叫媒体状态的更改在onCallMediaState()回调中报告,如果呼叫音频媒体已准备就绪(或活动),则Call.getMedia()函数将返回有效的音频媒体。

以下是当媒体处于活动状态时将呼叫连接到声音设备的示例代码:

void MyCall::onCallMediaState(OnCallMediaStateParam &prm)
{
CallInfo ci = getInfo();
// Iterate all the call medias
for (unsigned i = ; i < ci.media.size(); i++) {
if (ci.media[i].type==PJMEDIA_TYPE_AUDIO && getMedia(i)) {
AudioMedia *aud_med = (AudioMedia *)getMedia(i); // Connect the call audio media to sound device
AudDevManager& mgr = Endpoint::instance().audDevManager();
aud_med->startTransmit(mgr.getPlaybackDevMedia());
mgr.getCaptureDevMedia().startTransmit(*aud_med);
}
}
}

当音频媒体变得不活动时(例如当呼叫被保持)时,不需要停止到/从声音设备的音频媒体传输,因为(当音频媒体不再有效时)呼叫的音频媒体将自动从会议桥被移除,这也将自动删除来自或连接到该呼叫的所有连接。

7.7 呼叫操作

可以调用Call对象的操作,例如挂断,保持呼叫,发送re-INVITE等。请参阅Call的参考文档以获取更多信息。

7.8 即时消息(IM)

可以使用Call.sendInstantMessage()在通话中发送IM。Call.onInstantMessageStatus()回调方法报告传出即时消息的传输状态。

除了发送即时消息,还可以使用Call.sendTypingIndication()发送打字指示。

在呼叫中收到的IM和打字指示将在回调函数Call.onInstantMessage()和Call.onTypingIndication()中报告。

或者,您可以通过使用Buddy.sendInstantMessage()和Buddy.sendTypingIndication()发送IM和打电话外的指示。有关更多信息,请参阅文档。

7.9 类参考

7.9.1 Call

公有函数

1)Call(AccountACC,INT CALL_ID = PJSUA_INVALID_ID )

构造函数

2)virtual  ~Call()

析构

3)CallInfogetInfo() const

获取有关此呼叫的详细信息。

返回

呼叫信息。

4)bool isActive() const

检查此呼叫是否具有活动的INVITE会话,并且INVITE会话未被断开。

返回

如果call处于活动状态,则为真。

5)INT getId() const

获取与此呼叫相关联的PJSUA-LIB呼叫ID或索引。

返回

整数大于或等于零。

6)bool hasMedia() const

检查呼叫是否有活动的媒体会话。

返回

如果是,则为真。

7)Media * getMedia(unsigned med_idx ) const

获取指定介质索引的介质。

返回

Media 或NULL(如果invalid 或inactive)

参数

8)pjsip_dialog_cap_status remoteHasCap( INT HTYPE,const string hnameconst string token ) const

检查远端(远程对等体)是否支持指定的功能。

返回

PJSIP_DIALOG_CAP_SUPPORTED如果显式支持指定的功能,请参阅pjsip_dialog_cap_status以获取更多信息。

参数

  • htype - 要检查的标题类型(pjsip_hdr_e),该值可以是:

    • o PJSIP_H_ACCEPT
    • o PJSIP_H_ALLOW
    • o PJSIP_H_SUPPORTED
  • hname -如果htype指定了PJSIP_H_OTHER,则必须在此参数中提供头名称。否则,该值必须设置为空字符串(“”)。
  • token -检查的能力标记。例如,如果HTYPE是PJSIP_H_ALLOW,则令牌指定方法名称; 如果HTYPE是PJSIP_H_SUPPORTED,则令牌指定诸如“100rel”扩展名。

9)void setUserData(Token user_data 

将应用程序特定数据附加到呼叫。

然后,应用程序可以通过调用检查此数据getUserData()

参数

  • user_data -要附加到任意数据。

10)Token getUserData() const

获取附接至该呼叫,先前已经设置与用户数据()setUserData来

返回  用户数据

11)pj_stun_nat_type getRemNatType()

获取远程端点的NAT类型。

natTypeInSdp 在UaConfig中设置时,这是pjsua-lib的专有特征,在SDP中发送NAT类型。

只有从远程接收到SDP之后才能调用此功能。这意味着对于来电,只要来电包含SDP,就可以在收到呼叫时立即调用此功能;对于拨出的呼叫,此功能只能在接收SDP后(通常为200 / OK响应INVITE)才能调用。一般情况下,应用程序应在调用onCallMediaState()时或调用该回调之后才能使用该函数。

返回

NAT类型。

参考

Endpoint:: natGetType(),natTypeInSdp

12)void makeCall(const string dst_uri, const CallOpParamPRM 

拨出电话给指定的URI。

参数

  • dst_uri -要放入To头的URI(通常与目标URI相同)。
  • prm.opt -可选呼叫设置。
  • prm.txOption -可选标题等待添加到发出的INVITE请求。

13)void answer(const  CallOpParamPRM 

通过呼叫设置参数发送对INVITE请求的响应。

根据指定为参数的状态码,此功能可能发送临时响应,建立呼叫或终止呼叫。有关通话设置的注意事项:

  • 如果在此功能的后续呼叫中更改呼叫设置,则仅应用提供的第一个呼叫设置。所以一般来说,应用程序在获取用户的确认之前不会提供呼叫设置。
  • 如果在SDP已发送未提供通话设置,即:答案与状态码183或者2xx,默认调用的设置将被使用,检查CallSetting它的默认值。

参数

prm.opt -可选呼叫设置。

prm.statusCode -状态码,(100-699)。

prm.reason -可选原因短语。如果为空,将使用默认文本。

prm.txOption -要添加到传出响应消息的标题等的可选列表。请注意,此消息数据将在此INVITE请求的所有下一个答案/响应中持续存在。

14)void hangup(const CallOpParamPRM 

通过使用根据呼叫状态适当的方法挂断呼叫。

此功能比3XX-6xx应答应答呼叫(使用不同的答案()),在这个函数会挂断电话,无论状态和呼叫的角色,而答案()只与早期国家来电工程。

参数

prm.statusCode -我们拒绝来电时可以发送的可选状态码。如果值为零,将发送“603 / Decline”。

prm.reason -我们拒绝来电时可以选择发送的原因短语。如果为空,将使用默认文本。

prm.txOption -要添加到传出请求/响应消息的标题等的可选列表。

15)void setHold( const  CallOpParamPRM 

将指定的呼叫置于保持状态。

这将发送re-INVITE与适当的SDP通知遥控器呼叫被搁置。请求本身的最终地位将在报告onCallMediaState()回调,这表示该呼叫的媒体状态已经改变了应用程序。

参数

prm.options -pjsua_call_flag常量的位掩码。目前,只能使用标志PJSUA_CALL_UPDATE_CONTACT。

prm.txOption -与请求一起发送的可选消息组件。

16)void reinvite( const  CallOpParamPRM 

发送re-INVITE。

请求本身的最终地位将在报告onCallMediaState()回调,这表示该呼叫的媒体状态已经改变了应用程序。

参数

prm.opt -可选呼叫设置,如果为空,当前呼叫设置将保持不变。

prm.opt.flag -pjsua_call_flag常量的位掩码。在此指定PJSUA_CALL_UNHOLD将释放呼叫保持。

prm.txOption -与请求一起发送的可选消息组件。

17)void update( const  CallOpParamPRM 

发送UPDATE请求。

参数

prm.opt -可选呼叫设置,如果为空,当前呼叫设置将保持不变。

prm.txOption -与请求一起发送的可选消息组件。

18)void xfer(const string DEST const CallOpParamPRM 

启动呼叫转移到指定的地址。

该功能将发送REFER请求,指示远程呼叫方向指定的目的地/目标发起新的INVITE会话。

如果应用程序有兴趣监视成功性和传输请求的进步,它可以实现onCallTransferStatus()回调,这将报告该呼叫转移请求的进度。

参数

dest -要联系的新目标的URI。URI可以是名称地址或addr-spec格式。

prm.txOption -与请求一起发送的可选消息组件。

19)void xferReplaces( const call & dest_call const CallOpParam & PRM 

发起参加呼叫转移。

此功能会发送REFER请求指示远程呼叫方发起新的INVITE会话的URL destCall。在党dest_call则应从REFER接受者新来电与我们“取代”的号召。

参数

dest_call -呼叫被替换。

prm.options -应用程序可以指定PJSUA_XFER_NO_REQUIRE_REPLACES以阻止在REFER请求创建的传出INVITE请求中包含“Require:replace”。

prm.txOption -与请求一起发送的可选消息组件。

20)void processRedirect( pjsip_redirect_op CMD 

接受或拒绝重定向响应。

应用程序必须调用此函数后,它在信号PJSIP_REDIRECT_PENDING onCallRedirected()回调,以通知呼叫是否接受或拒绝重定向到当前目标。应用程序可以使用PJSIP_REDIRECT_PENDING命令的组合onCallRedirected()回调此功能将呼叫重定向之前要求用户权限。

请注意,如果应用程序选择拒绝或停止重定向(通过分别使用PJSIP_REDIRECT_REJECT或PJSIP_REDIRECT_STOP),则此函数返回之前将调用呼叫断开回调。如果应用程序拒绝对目标的onCallRedirected()回调也可称为前如果有另一个目标试试这个函数返回。

参数

cmd -要应用于当前目标的重定向操作。这种说法的语义相似,在说明书onCallRedirected()回调,除了PJSIP_REDIRECT_PENDING这里不接受。

21)void dialDtmf( const string &digits

使用RFC 2833有效载荷格式将DTMF数字发送到远程。

参数

digits -要发送的DTMF字符串数字。

22)void sendInstantMessage( const  SendInstantMessageParamPRM 

在INVITE会话中发送即时消息。

参数

prm.contentType -MIME类型。

prm.content -消息内容。

prm.txOption -要包括在传出请求中的标题等的可选列表。txOption中的body描述符被忽略。

prm.userData -可选的用户数据,在调用IM回调时将返回。

23)void sendTypingIndication( const  SendTypingIndicationParamPRM 

在INVITE会话中发送IM打字指示。

参数

prm.isTyping -确实是为了向远方指示当地人当前正在键入IM。

prm.txOption -要包括在传出请求中的标题等的可选列表。

24)void sendRequest( const  CallSendRequestParamPRM 

发送任意请求与呼叫。

这对于发送INFO请求是有用的。请注意,应用程序不应该使用此函数发送将更改邀请会话状态的请求,例如re-INVITE,UPDATE,PRACK和BYE。

参数

prm.method -请求的SIP方法。

prm.txOption -可选消息体和/或要包括在传出请求中的头的列表。

字符串dump(布尔with_mediaconst string 缩进

将呼叫和媒体统计信息转储为字符串。

返回

呼叫转储和媒体统计字符串。

参数

with_media -真的也包括媒体信息。

indent -左缩进的空格。

25)INT vidGetStreamIdx() const

获取通话中默认视频流的媒体流索引。

通常这将只是检索呼叫中第一个激活的视频流的流索引。如果没有活动,它将返回第一个不活动的视频流。

返回

Media 流索引为-1,如果没有视频流存在于呼叫中。

26)bool vidStreamIsRunning( INT med_idx,pjmedia_dir DIR ) const

确定指定呼叫的视频流当前是否正在运行(即,

已被创建,启动,不被暂停)。

返回

如果目前正在为指定的方向运行流,则为真。

参数

med_idx -媒体流索引,或-1指定默认的视频媒体。

dir -要检查的方向。

27)void vidSetStream(pjsua_call_vid_strm_op opconst CallVidSetStreamParam &param)

为指定的呼叫添加,删除,修改和/或操纵视频媒体流。

这可能会触发重新启动或更新以发送呼叫。

参数

op -要执行的视频流操作,可能的值是pjsua_call_vid_strm_op。

param -视频流操作的参数(见CallVidSetStreamParam)。

28)StreamInfogetStreamInfo(unsigned med_idx ) const

获取指定媒体索引的媒体流信息。

返回

流信息。

参数

med_idx -媒体流索引。

29)StreamStatgetStreamStat(unsigned med_idx ) const

获取指定媒体索引的媒体流统计信息。

返回

流统计。

参数

med_idx -媒体流索引。

30)MediaTransportInfogetMedTransportInfo(unsigned med_idx ) const

获取指定媒体索引的媒体传输信息。

返回

交通信息。

参数

med_idx -媒体流索引。

31)void processMediaUpdate(OnCallMediaStateParamPRM 

内部功能(由callled 端点(工艺更新调用媒体呼吁媒体状态发生变化时。

32)void processStateChange(OnCallStateParamPRM 

内部功能(通过称为端点)来处理呼叫状态的变化。

33)virtual void onCallState(OnCallStateParamPRM 

呼叫状态发生变化时通知应用程序。

然后,应用程序可以查询通话信息通过调用来获取详细呼叫状态的getInfo()函数。

参数

prm -回调参数

34)virtual void onCallTsxState(OnCallTsxStateParamPRM 

这是一个通用回调,当呼叫中的一个事务已经改变状态时被调用。

例如,应用程序可以实现此回调,以监视传出请求的状态,或者以最终响应回答未处理的传入请求(如INFO)。

参数

prm -回调参数

35)virtual void onCallMediaState(OnCallMediaStateParamPRM 

当通话中的媒体状态发生变化时通知应用程序。

正常应用需要实现这种回调,例如将呼叫的媒体连接到声音设备。当使用ICE时,也会调用此回调来报告ICE协商失败。

参数

prm -回调参数

36)virtual void onCallSdpCreated(OnCallSdpCreatedParamPRM 

当呼叫刚刚创建本地SDP(用于初始或随后的SDP报价/答案)时通知应用程序。

应用程序可以在远程SDP发送和/或协商之前实施此回调来修改SDP,例如,以每个帐户/呼叫基础编解码器优先级应用或添加自定义/专有SDP属性。

参数

prm -回调参数

37)virtual void onStreamCreated(OnStreamCreatedParamPRM 

在创建媒体会话之前,注册到会议桥之前通知应用程序。

如果已将媒体处理端口添加到流中,应用程序可能会返回不同的媒体端口。然后,这个媒体端口将被添加到会议桥。

参数

prm -回调参数

38)virtual void onStreamDestroyed(OnStreamDestroyedParamPRM 

Media 会议从会议桥被注销并被破坏时通知应用程序。

参数

prm -回调参数

39)virtual void onDtmfDigit(OnDtmfDigitParamPRM 

传入DTMF数字时通知应用程序。

参数

prm -回调参数

40)virtual void onCallTransferRequest(OnCallTransferRequestParamPRM 

通知申请被转移(即

REFER被接收)。应用程序可以通过设置代码来决定接受/拒绝传输请求(默认为202)。当此回调未实现时,默认行为是接受转移。

参数

prm -回调参数

41)virtual void onCallTransferStatus(OnCallTransferStatusParamPRM 

通知应用以前发送的呼叫转移请求的状态。

应用程序可以监视呼叫转移请求的状态,例如决定是否终止现有呼叫。

参数

prm -回调参数

42)virtual void onCallReplaceRequest(OnCallReplaceRequestParamPRM 

通过替换标题通知有关INVITE的应用程序。

应用程序可以通过设置非2xx代码来拒绝该请求。

参数

prm -回调参数

43)virtual void onCallReplaced(OnCallReplacedParamPRM 

通知应用程序现有呼叫已被新呼叫替换。

当PJSUA-API使用Replaces标头接收到INVITE请求时,会发生这种情况。

这种回调被调用后,通常PJSUA-API将断开此呼叫并建立一个新的呼叫newCallId

参数

prm -回调参数

44)virtual void onCallRxOffer(OnCallRxOfferParamPRM 

当通话接收到来自遥控器的新报价时通知应用程序(即

接收到使用SDP的re-INVITE / UPDATE)。应用程序可以通过设置代码来决定接受/拒绝报价(默认为200)。如果报价被接受,应用程序可以更新应答的通话设置。当此回调未实现时,默认行为是接受使用当前通话设置的报价。

参数

prm -回调参数

45)virtual void onCallTxOffer(OnCallTxOfferParamPRM 

通话时通知应用程序接收到没有SDP报价的INVITE。

应用程序可以更新呼叫设置(例如:添加音频/视频),或启用/禁用编解码器,或者从回调内更新其他媒体会话设置,但是,如标准(RFC3261第14.2节)所规定的那样,它必须确保更新与需要对等体支持的现有媒体会话(编解码器,传输或其他参数)重叠,这是为了避免对等体拒绝该提议。

当不执行此回调时,默认行为是使用当前活动媒体会话发送SDP报价(每个媒体类型上都有所有启用的编解码器)。

参数

prm -回调参数

46)virtual void onInstantMessage(OnInstantMessageParamPRM 

通知输入MESSAGE请求的应用程序。

参数

prm -回调参数

47)virtual void onInstantMessageStatus(OnInstantMessageStatusParamPRM 

通知应用程序关于传出MESSAGE请求的传送状态。

参数

prm -回调参数

48)virtual void onTypingIndication(OnTypingIndicationParamPRM 

通知应用程序打字指示。

参数

prm -回调参数

49)virtual  pjsip_redirect_op onCallRedirected(OnCallRedirectedParamPRM 

当呼叫即将重新发送INVITE请求到指定的目标时,调用此回调,遵循先前接收到的重定向响应。

应用程序可以接受重定向到指定的目标,仅拒绝此目标,并使会话继续尝试列表中的下一个目标,如果此类目标存在,则完全停止整个重定向过程,并导致会话断开或延迟决定要求用户确认。

此回调是可选的,默认行为是不遵循重定向响应。

返回

为目标执行的行动。将此参数设置为以下值之一:

  • PJSIP_REDIRECT_ACCEPT:立即接受重定向。设置后,呼叫将立即重新发送INVITE请求给目标。
  • PJSIP_REDIRECT_ACCEPT_REPLACE:立即接受重定向,并将To标题替换为当前目标。设置后,呼叫将立即重新发送INVITE请求给目标。
  • PJSIP_REDIRECT_REJECT:立即拒绝此目标。如果存在,则呼叫将继续重试下一个目标,如果没有更多目标尝试,则断开该呼叫。
  • PJSIP_REDIRECT_STOP:停止整个重定向过程,并立即断开通话。该onCallState()回调将PJSIP_INV_STATE_DISCONNECTED状态回调返回后立即调用。
  • PJSIP_REDIRECT_PENDING:如果不能立即作出决定(例如要求用户确认),则设置为此值。然后应用程序必须调用processRedirect(),以接受或在获取用户决定拒绝该重定向。

参数

prm -回调参数

50)virtual void onCallMediaTransportState(OnCallMediaTransportStateParamPRM 

当媒体传输状态更改时,将调用此回调。

参数

prm -回调参数

51)virtual void onCallMediaEvent(OnCallMediaEventParamPRM 

有关媒体事件(例如视频通知)的通知。

这种回调很可能是从媒体线程调用的,所以应用程序不能在这个回调中执行大量的处理。特别是,应用程序不得在此回调中销毁呼叫或媒体。如果应用程序需要执行更复杂的任务来处理事件,则应将任务发布到另一个线程。

参数

prm -回调参数

52)virtual void onCreateMediaTransport(OnCreateMediaTransportParamPRM 

应用程序可以使用此回调来实现呼叫的自定义媒体传输适配器,或者使用完全全新的媒体传输替换媒体传输。

创建新呼叫时调用此回调。图书馆创造了该呼叫的媒体传输,它被设置为mediaTp回调的论据。回调可能会随媒体传输的实例而改变,以便呼叫使用。

参数

prm -回调参数

53)virtual void onCreateMediaTransportSrtp(OnCreateMediaTransportSrtpParamPRM 

当创建SRTP媒体传输时,将调用此回调。

应用程序可以修改SRTP设置srtpOpt指定cryptos和密钥,其将被使用。请注意,应用程序不应该修改字段pjmedia_srtp_setting.close_member_tp,只能修改字段pjmedia_srtp_setting.use初始INVITE。

参数

prm -回调参数

公共静态功能

54)static Call * lookup( INT CALL_ID 

获取呼叫的指定呼叫ID级别。

返回

呼叫实例或NULL,如果没有找到。

参数

call_id -要查找的呼叫ID

7.9.2 设置

55)struct pj::CallSetting

通话设置。

7.9.3 信息和统计

56)struct pj::CallInfo

呼叫信息。

应用程序可以通过调用查询呼叫信息呼叫::的getInfo()

57)struct pj::CallMediaInfo

呼叫媒体信息。

58)struct pj::StreamInfo

媒体流信息。

59)struct pj::StreamStat

媒体流的统计数据。

60)struct pj::JbufState

此结构描述抖动缓冲状态。

61)struct pj::RtcpStat

双向RTP流统计。

62)struct pj::RtcpStreamStat

单向RTP流统计。

63)struct pj::MathStat

此结构描述统计状态。

64)struct pj::MediaTransportInfo

这种结构描述媒体传输信息。

它对应于pjmedia_transport_info结构。

7.9.4 回调参数

65)struct pj::OnCallStateParam

该结构包含参数用于call:: onCallState()回调。

66)struct pj::OnCallTsxStateParam

该结构包含参数用于call:: onCallTsxState()回调。

67)struct pj::OnCallMediaStateParam

该结构包含参数用于call:: onCallMediaState()回调。

68)struct pj::OnCallSdpCreatedParam

该结构包含参数用于call:: onCallSdpCreated()回调。

69)struct pj::OnStreamCreatedParam

该结构包含参数用于call:: onStreamCreated()回调。

70)struct pj::OnStreamDestroyedParam

该结构包含参数用于call:: onStreamDestroyed()回调。

71)struct pj::OnDtmfDigitParam

该结构包含参数用于call:: onDtmfDigit()回调。

72)struct pj::OnCallTransferRequestParam

该结构包含参数用于call:: onCallTransferRequest()回调。

73)struct pj::OnCallTransferStatusParam

该结构包含参数用于call:: onCallTransferStatus()回调。

74)struct pj::OnCallReplaceRequestParam

该结构包含参数用于call:: onCallReplaceRequest()回调。

75)struct pj::OnCallReplacedParam

该结构包含参数用于call:: onCallReplaced()回调。

76)struct pj::OnCallRxOfferParam

该结构包含参数用于call:: onCallRxOffer()回调。

77)struct pj::OnCallRedirectedParam

该结构包含参数用于call:: onCallRedirected()回调。

78)struct pj::OnCallMediaEventParam

该结构包含参数用于call:: onCallMediaEvent()回调。

79)struct pj::OnCallMediaTransportStateParam

该结构包含参数用于call:: onCallMediaTransportState()回调。

80)struct pj::OnCreateMediaTransportParam

该结构包含参数用于call:: onCreateMediaTransport()回调。

81)struct pj::CallOpParam

该结构包含参数用于 Call::answer()Call::hangup()Call::reinvite()Call::update()Call::xfer()Call::xferReplaces()Call::setHold().

82)struct pj::CallSendRequestParam

该结构包含参数用于call:: sendRequest将()

83)struct pj::CallVidSetStreamParam

该结构包含参数用于call:: vidSetStream()

7.9.5 其他

84)struct pj::MediaEvent

此结构描述媒体事件。

它对应于pjmedia_event结构。

85)struct pj::MediaFmtChangedEvent

此结构描述媒体格式更改事件。

86)struct pj::SdpSession

该结构描述了SDP会话描述。

它对应于pjmedia_sdp_session结构。

87)struct pj::RtcpSdes

RTCP SDES结构。

PJSUA2开发文档--第七章 呼叫 Calls类的更多相关文章

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

    6. 媒体(Media) 媒体对象是能够产生媒体或接受媒体的对象. Media的重要子类是AudioMedia,它代表音频媒体.PJSUA2支持多种类型的音频媒体对象: 捕获设备的AudioMedia ...

  2. PJSUA2开发文档--第三章 PJSUA2高级API

    3. PJSUA2高级API PJSUA2是PJSUA API以上的面向对象抽象.它为构建会话发起协议(SIP)多媒体用户代理应用程序(也称为IP / VoIP软电话)提供高级API.它将信令,媒体和 ...

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

    第五章 帐户(号) 帐户提供正在使用该应用程序的用户的身份(或身份).一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址( Address of Rec ...

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

    4.端点ENDPOINT Endpoint类是一个单例类,应用程序必须在此类实例之前创建一个并且最多只能创建一个,然后才能执行任何操作.同样,一旦这个类被销毁,应用程序就不能调用该库的任何API.这个 ...

  5. PJSUA2开发文档--第十一章 网络问题

    11 网络问题 11.1 IP地址更改 请参阅wiki 处理IP地址更改.请注意,本指南使用PJSUA API作为参考. 11.2 被阻止/过滤的网络 请参阅维基百科 通过阻止或过滤的VoIP网络

  6. PJSUA2开发文档--第十二章 PJSUA2 API 参考手册

    12 PJSUA2 API 参考手册 12.1 endpoint.hpp PJSUA2基本代理操作.  namespace pj PJSUA2 API在pj命名空间内. 12.1.1 class En ...

  7. PJSUA2开发文档--第九章 PJSUA2应用程序示例

    9. PJSUA2示例应用程序 9.1 示例应用程序 9.1.1 C++ pjsip-apps/src/samples/pjsua2_demo.cpp 是一个非常简单可用的C++示例应用程序. /* ...

  8. PJSUA2开发文档--第八章 好友(Buddy)类

    8  好友(存在)Buddy PJSUA2的功能是围绕Buddy类为中心展开的.该类表示一个远端好友(伙伴,一个人或一个SIP端点). 8.1 子类化Buddy类 要使用Buddy类,通常应创建子类, ...

  9. PJSUA2开发文档--第十章 媒体质量(MEDIA QUALITY)

    10 媒体质量(Media Quality) 10.1 音频质量 如果遇到音频质量问题,可尝试以下步骤: 遵循指南:使用pjsystest测试声音设备. 识别声音问题并使用以下步骤进行故障排除:检查声 ...

随机推荐

  1. 一个简单IP防刷工具类, x秒内最多允许y次单ip操作

    IP防刷,也就是在短时间内有大量相同ip的请求,可能是恶意的,也可能是超出业务范围的.总之,我们需要杜绝短时间内大量请求的问题,怎么处理? 其实这个问题,真的是太常见和太简单了,但是真正来做的时候,可 ...

  2. Python之高级特性

    一.切片 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取出前三个元素 , 笨方法就是通过下标一个一个获取 [L[0], L[1], L[2]]Pyt ...

  3. [工具]PyCharm激活、注册码无效解决办法

    前言 我是个 Pythoner,开发工具一直使用的 JetBrains 的 PyCharm.我师傅告诉过我:一个程序员一定要有一个用的很 6 的 IDE,你的开发效率会提高很多,很多... 我从小白的 ...

  4. vue和react的介绍

    这几年前端框架发展的不错,出了不少框架,像微软自己的knockoutjs,angular,vue和最近比较火的react等,之前我有写过前两者的相关文章,今天主要说一下后两者. 介绍 是一个用于构建用 ...

  5. 设计模式总结篇系列:适配器模式(Adapter)

    网上看到不少关于适配器模式的讲解,其中对于适配器模式解释的过于专业,一时不是特别理解适配器模式到底是用来干嘛的,具体的适用场景在哪,其最精髓的地方到底在哪. 本文结合自己的理解,阐述下对适配器模式的看 ...

  6. Linux基础知识第三讲,拷贝文件跟移动文件命令

    目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...

  7. eclipse svn插件卸载 重新安装 Subclipse卸载安装 The project was not built since its build path is incomplete This client is too old to work with the working copy at

    安装插件的原则就是,要按照规则,插件与本地的svn版本要一致, 这样子本地和eclipse上面就可以无缝使用,不会出现问题 1.卸载eclipse  svn插件 2,安装新版的svn插件 2.1,下载 ...

  8. 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务

    windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...

  9. Captcha服务(后续2)— 改造Captcha服务之Asp.Net Core项目中如何集成TypeScript

    环境准备 .Net Core 版本:下载安装.Net Core SDK,安装完成之后查看sdk版本 ,查看命令dotnet --version,我的版本是2.2.101 IDE: Visual Stu ...

  10. MEF 基础简介 三

    MEF导出类的方法和属性 首先来说导出属性,因为这个比较简单,和导出类差不多,先来看看代码,主要看我加注释的地方,MusicBook.cs中的代码如下: using System; using Sys ...