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. iOS——调试工具LLDB学习

    一.前言 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件.在日常的开发和调试过程中给开发人员带 ...

  2. ThinkPHP 数据库操作(七) : 视图查询、子查询、原生查询

    视图查询 视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图,例如: Db::view('User','id,name') ->view('Profile','truename, ...

  3. ionic4+angular6 混合移动开发 capacitor cordova

    首先要更新或者安装 ionic cli npm install -g ionic 创建项目 ionic start ionic-angular tabs --type=angular –type=an ...

  4. 死磕 java集合之TreeMap源码分析(三)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 删除元素 删除元素本身比较简单,就是采用二叉树的删除规则. (1)如果删除的位置有两个叶子节点 ...

  5. Hystrix介绍

    Hystrix是什么 在分布式环境中,许多服务依赖项中的一些必然会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互.Hystrix通过隔离服务之间的访问点. ...

  6. Kafka并不难学

    1.为什么写这本书? 我建立了一个qq群,有很多人在群里面学习和交流,经常有人问我一些Kafka的知识,我可以感受他们对技术的热情,这是一群刚走出校门,或者工作经验较少,又或是一些转型的开发新人,他们 ...

  7. 痞子衡嵌入式:第一本Git命令教程(3)- 变动(status/diff)

    今天是Git系列课程第三课,前两课我们都是在做Git仓库准备工作,今天痞子衡要讲的是如何查看Git空间内发生的改动. 本地有了仓库,我们便可以在仓库所在目录下做文件增删改操作,为了确定改动操作的正确性 ...

  8. 关于HTML相关知识随记

    HTML是构成网页文档的主要语言,它由HTML标签和字符信息组成.HTML标签可以标识文字.图形.动画.声音.表格.超链接等网页对象,字符信息用以传达网页内容,如标题.段落文本.图像等. HTML4文 ...

  9. Qt实现半透明遮罩效果

    本文索引: 需求 原理 实现遮罩控件 遮罩的使用 需求 我们在显示一些模态对话框的时候,往往需要将对话框的背景颜色调暗以达到突出当前对话框的效果,例如: 对话框的父窗口除了标题栏以外的部分都变暗了,在 ...

  10. WPF 可触摸移动的ScrollViewer控件

    ListBox支持触摸滑动,而ScrollViewer默认不支持.需要设置PanningMode属性,如果不设置PanningMode,如何自定义触摸滑动? ScrollViewer如需要添加上下/左 ...