PJSUA2开发文档--第六章 媒体 Media类
6. 媒体(Media)
媒体对象是能够产生媒体或接受媒体的对象。
Media的重要子类是AudioMedia,它代表音频媒体。PJSUA2支持多种类型的音频媒体对象:
- 捕获设备的AudioMedia,用于从声音设备捕获音频。
- 播放设备的AudioMedia,可以播放音频到声音设备。
- 呼叫音频媒体,用于向远程人员发送和接收音频。
- AudioMediaPlayer,播放WAV文件。
- AudioMediaRecorder将音频录制到WAV文件。
将来可能会添加更多的媒体对象。
6.1 音频会议桥
会议桥提供了一种简单而又强大的概念来管理音频媒体之间的音频流。原理很简单,就是将音频源连接到音频目的地,桥接器会把音频流从源地址送到目的地,就这样。如果多个来源正在发送到同一个目的地,则来自源的音频被混合。如果一个信号源发送到多个目的地,则桥接器负责把来自源的音频复制到多个目的地。桥接器甚至会照顾不同时钟频率和时间的媒体。
在PJSUA2中,所有音频媒体对象都插入中央会议桥,方便操作。首先,插入式音频媒体将不会连接到任何东西,因此媒体不会流出/入任何对象。音频媒体源可以使用API AudioMedia.startTransmit()/ AudioMedia.stopTransmit())启动/停止到目的地的传输。
插入式的会议桥的音频媒体对象将被赋予识别桥对象的端口ID号。 应用程序可以使用API AudioMedia.getPortId()来检索端口ID。 通常,应用程序不需要担心会议桥及其端口ID(所有这些都将由Media类负责),除非应用程序要创建自己的定制音频媒体。
6.1.1 播放WAV文件¶
要将WAV文件播放到声音设备,只需将WAV播放对象传输到声音设备的播放媒体:
AudioMediaPlayer player; AudioMedia& play_med = Endpoint::instance().audDevManager().getPlaybackDevMedia(); try
{ player.createPlayer("file.wav"); player.startTransmit(play_med); }
catch(Error& err)
{ }
默认情况下,WAV文件将以循环模式播放。要禁用循环,创建播放器时,需指定 PJMEDIA_FILE_NO_LOOP
:
player.createPlayer("file.wav", PJMEDIA_FILE_NO_LOOP);
没有循环,一旦回放到达WAV文件的末尾,就会播放静音。
完成播放后,只需停止播放即可停止播放:
try { player.stopTransmit(play_med); } catch(Error& err) { }
在停止播放时,将从上次播放位置恢复播放,恢复传输。使用player.setPos()到播放位置,设定到所需的位置。
6.1.2 录制为WAV文件
如果要将音频设备录制到WAV文件,只需执行以下操作:
AudioMediaRecorder recorder; AudioMedia& cap_med = Endpoint::instance().audDevManager().getCaptureDevMedia(); try { recorder.createRecorder("file.wav"); cap_med.startTransmit(recorder); } catch(Error& err) { }
媒体将从声音设备流向WAV录像文件。像前面一样,要停止或暂停录制,只需停止传输:
try { cap_med.stopTransmit(recorder); } catch(Error& err) { }
请注意,如上所述停止向WAV录像机的传输并不会关闭WAV文件,可通过将源连接到WAV录像机来重新开始录制。关闭之前无法播放录制的WAV文件。要关闭WAV录音机,只需删除它:
delete recorder;
6.1.3 本地音频环回
通过将捕获设备中的音频直接发送到播放设备(即本地环回),检查本地声音设备(捕获和播放设备)是否正常工作的有用测试。可以这样做:
cap_med.startTransmit(play_med);
6.1.4 循环音频
如果需要,可以将音频媒体对象的音频循环到自身(即,从对象接收的音频将被传输到自身)。只要对象具有双向介质,就可以从任何对象中回放音频。这意味着可以循环呼叫音频媒体,以便远程人员收到的音频将被传回给他/他。但是不能循环WAV播放器或录音机,因为这些对象只能播放或录制,而不能同时播放和录制。
6.1.5 正常呼叫
单个呼叫可以有多个媒体(例如音频和视频)。应用程序可以使用API Call.getMedia()检索音频媒体。然后,对于正常的呼叫,我们想要与远程人员建立双向音频,可以通过连接声音设备和呼叫音频媒体轻松完成,反之亦然:
CallInfo ci = call.getInfo(); AudioMedia *aud_med = NULL; // Find out which media index is the audio for (unsigned i=0; i<ci.media.size(); ++i) { if (ci.media[i].type == PJMEDIA_TYPE_AUDIO) { aud_med = (AudioMedia *)call.getMedia(i); break; } } if (aud_med) { // This will connect the sound device/mic to the call audio media cap_med.startTransmit(*aud_med); // And this will connect the call audio media to the sound device/speaker aud_med->startTransmit(play_med); }
6.1.6 第二通电话
假设我们想同时与两个伙伴谈话。由于我们已经与一方进行双向媒体连接,我们只需要使用以下代码向对方添加双向连接:
AudioMedia *aud_med2 = (AudioMedia *)call2.getMedia(aud_idx); if (aud_med2) { cap_med->startTransmit(*aud_med2); aud_med2->startTransmit(play_med); }
现在我们可以同时与双方交谈,我们会听到任何一方的声音。但是在这个阶段,远程方不能说话或者听不到对方(即我们还没有在全会议模式下)。
6.1.7 电话会议
为了让双方互相交流,只需建立双向媒体:
aud_med->startTransmit(*aud_med2);
aud_med2->startTransmit(*aud_med);
现在三方(我们和这两个伙伴)都能够相互交流。
6.1.8 录制会议
在进行会议时,想要将会议记录到WAV文件是非常有意义的,我们需要做的就是将麦克风和两个通话连接到WAV录音机:
cap_med.startTransmit(recorder); aud_med->startTransmit(recorder); aud_med2->startTransmit(recorder);
6.2 音频设备管理
请参阅接下来的音频设备框架。
6.3 类参考
6.3.1 媒体框架
class¶
class
pj::Media
class pj::Media¶
由PJ :: AudioMedia子类化
公有函数
1)Virtual ~Media()
虚拟析构函数
2)pjmedia_type getType() const
获取媒体类型。
返回
媒体类型。
Class pj::AudioMedia
音频媒体。
从PJ ::Media继承
子类PJ :: AudioMediaPlayer,PJ :: AudioMediaRecorder,PJ :: ToneGenerator
公有函数
3)ConfPortInfo getPortInfo() const
获取有关指定会议端口的信息。
4)INT getPortId() const
获取端口ID。
5)void startTransmit(const AudioMedia&sink) const
建立单向媒体流(下沉)。
该媒体端口将作为源,它可以传输到多个目的地/汇。并且如果多个源传输到同一个接收器,则媒体将被混合在一起。源和接收器可以指同一媒体,有效地循环播放媒体。
如果需要双向媒体流,应用程序需调用此方法两次,第二个来自相对的源媒体。
参数sink -目标媒体。
6)void stopTransmit(const AudioMedia&sink) const
停止媒体流到目的地/汇聚端口。
参数sink -目的地媒体。
7)void adjustRxLevel (float level) 通过调整从媒体桥传输到介质端口的信号电平,使其更大或安静,。
参数 level - 信号电平调整。值1.0表示无电平调整,值0表示使端口静音。
8)void adjustTxLevel(float level)
通过调整从该媒体端口(到桥接器)接收的信号电平,使其更大或更安静
参数level -信号电平调整。值1.0表示无电平调整,值0表示使端口静音。
9)unsigned getRxLevel() const
获取最后收到的信号电平。
返回信号电平百分比。
10)unsigned getTxLevel() const
获取最后传输的信号电平。
返回信号电平百分比。
11)Virtual ~AudioMedia()
虚拟析构函数
公共静态功能
12)static ConfPortInfo getPortInfoFromId( INT port_id )
从特定端口ID获取信息。
13)static AudioMedia * typecastFromMedia(媒体 * 媒体)
从基类媒体的类型转换。
这对于不支持向下转换的语言诸如Python编写的应用程序很有用。
返回 对象为AudioMedia实例
参数media -要被对待的对象
Class pj::AudioMediaPlayer
音频媒体播放器。
公有函数
14)AudioMediaPlayer()
构造函数
15)void createPlayer(const string &file_name, unsigned options = 0)
创建文件播放器,并自动将此播放器添加到会议桥。
参数file_name -要播放的文件名。目前仅支持WAV文件,WAV文件必须格式化为16bit PCM单声道/单声道(支持任何时钟频率)。
- options -可选选项标志。应用程序可以指定PJMEDIA_FILE_NO_LOOP以防止回放循环。
16)void createPlaylist(const StringVector &file_names, const string &label = "", unsigned options = 0)¶
创建文件播放列表媒体端口,并自动将端口添加到会议桥。
参数
- file_names -要添加到播放列表的文件名数组。请注意,文件必须具有相同的时钟速率,通道数和每个样本的位数。
- label -要为媒体端口设置的可选标签。
- options -可选选项标志。应用程序可以指定PJMEDIA_FILE_NO_LOOP以防止循环。
17)AudioMediaPlayerInfo getInfo() const
获取有关播放器的其他信息。
此操作仅适用于播放器。对于播放列表,将抛出错误。
返回对应信息
18)pj_uint32_t getPos() const
获取当前播放位置。
此操作对播放列表无效。
返回当前播放位置
19)void setPos( pj_uint32_t samples)
在samples中设置播放位置。
此操作对播放列表无效。
参数
- samples -样品中所需的播放位置。
20)Virtual ~AudioMediaPlayer()
析构器
21)Virtual bool onEof()
当文件播放器读取到文件结束或读取到达播放列表的最后一个文件结束时,注册要调用的回调。如果文件或播放列表设置为重复播放,则将多次调用回调。
返回如果回调返回false,则播放将停止。注意,如果应用程序在回调中破坏播放器,则必须在此返回false。
公共静态功能
22)static AudioMediaPlayer * typecastFromAudioMedia(AudioMedia * media)
从基类AudioMedia的类型转换。
这对于不支持向下转换的语言诸如Python编写的应用程序很有用
返回
AudioMediaPlayer对象实例
参数
- media -要被转换的对象
class pj::AudioMediaRecorder
音频媒体记录器。
公有函数
23)AudioMediaRecorder()
构造函数
24)void createRecorder(const string &file_name, unsigned enc_type = 0, pj_ssize_t max_size = 0, unsigned options = 0)¶
创建文件记录器,并自动将此录音机连接到会议桥。录音机目前支持录制WAV文件。要使用的录像机的类型由文件的扩展名(例如“.wav”)决定。
参数
- file_name -输出文件名。该功能将根据文件扩展名确定要使用的默认格式。目前所有平台都支持“.wav”。
- enc_type -如果文件可以支持不同的编码,可选择用于压缩介质的编码器类型。现在该值必须为零。
- max_size -最大文件大小。 指定零或-1以删除大小限制。此值现在必须为零或-1。
- options -可选选项,可用于指定录制文件格式。支持的选项有PJMEDIA_FILE_WRITE_PCM,PJMEDIA_FILE_WRITE_ALAW和PJMEDIA_FILE_WRITE_ULAW。默认值为零或PJMEDIA_FILE_WRITE_PCM。
25)Virtual ~AudioMediaRecorder()
析构器
公共静态功能
26)static AudioMediaRecorder * typecastFromAudioMedia(AudioMedia * media)
从AudioMedia类的类型转换。
这对于不支持向下转换的语言诸如Python编写的应用程序很有用
返回AudioMediaRecorder对象实例
参数
media -要被转换的对象
格式和信息
27)struct pj::MediaFormat
此结构包含完全描述媒体所需的所有信息。
子类PJ :: MediaFormatAudio,PJ :: MediaFormatVideo
28)struct pj::MediaFormatAudio
该结构描述了有关音频媒体的详细信息。
29)struct pj::MediaFormatVideo
该结构描述了有关视频媒体的详细信息。
30)struct pj::ConfPortInfo
此结构描述了已注册到会议桥中的特定媒体端口的信息。
6.3.2 音频设备框架
设备管理器
class pj::AudDevManager
音频设备管理器
公有函数
31)INT getCaptureDev() const
获取当前活动的捕捉声音设备。
如果没有创建声音设备,则该功能可能返回-1作为设备ID。
返回捕获设备的设备ID。
32)AudioMedia&getCaptureDevMedia()
获取AudioMedia捕获音频设备。
返回用于捕获设备的音频媒体。
33)INT getPlaybackDev() const
获取当前正在播放的声音设备。
如果没有创建声音设备,则该功能可能返回-1作为设备ID。
返回播放设备的设备ID。
34)AudioMedia&getPlaybackDevMedia()
获取AudioMedia扬声器/播放音频设备。
返回扬声器/播放设备的音频媒体。
35)void setCaptureDev( INT capture_dev ) const
选择或更改采集(捕获)声音的设备。
应用程序可以随时调用此功能来替换当前的声音设备。调用此方法不会更改声音设备的状态(打开/关闭)。注意,此方法将覆盖设定的模式()setSndDevMode。
参数
- capture_dev -捕获设备的设备ID。
36)void setPlaybackDev( INT playback_dev ) const
选择或更改播放声音设备
应用程序可以随时调用此功能来替换当前的声音设备。调用此方法不会更改声音设备的状态(打开/关闭)。注意,此方法将覆盖设定的模式()setSndDevMode。
参数
- playback_dev -播放设备的设备ID。
37)const AudioDevInfoVector&enumDev()
枚举系统中安装的所有音频设备。
返回
音频设备信息列表。
38)void setNullDev()
设置pjsua使用空声音设备。
零声音设备仅提供会议桥所需的时间,并且不会与任何硬件相互冲突。
39)MediaPort * setNoDev()
断开主会议桥与任何声音设备的连接,并让应用将网桥连接到自己的声卡/主端口。
返回
会议桥的端口接口,使应用程序可以将其连接到自己的声音设备或主端口。
40)void setSndDevMode(unsigned mode) const¶
设置声音设备模式。
参数
- mode -声音设备模式,作为#pjsua_snd_dev_mode的位掩码组合
41)void setEcOptions(unsigned tail_msec, unsigned options)¶
更改回声消除设置。此功能的行为取决于声音设备当前是否处于活动状态,如果是,该设备或软件是否支持AEC。
如果声音设备当前处于活动状态,并且设备支持AEC,则此功能会将更改请求转发给设备,并且由设备决定是否支持该请求。如果使用软件AEC(如果设备不支持AEC,将使用软件EC),则此功能将更改软件EC设置。在所有情况下,将保存设置以备将来打开声音设备。
如果当前声音设备未处于活动状态,则仅会更改默认的AEC设置,并且下次打开声音设备时将进行设置。
参数
- tail_msec -尾长度,以毫秒为单位。设置为零以禁用AEC。
- options -要传递给pjmedia_echo_create()的选项。通常值应为零。
42)unsigned getEcTail() const
获取当前的回声消除器尾部长度。
返回
EC尾部长度(以毫秒为单位),如果禁用AEC,则该值将为零。
43)bool sndIsActive() const
检查声音设备当前是否处于活动状态。
非活动状态的情况:
应用程序已经设置自动关闭功能(在sndAutoCloseTime设定声音设备可以是不活动MediaConfig)
无声音设备
声音设备已经经由配置setNoDev()函数。
44)void refreshDevs()
刷新系统中安装的声音设备列表。
此方法只会刷新音频设备列表,因此所有活动音频流将不受影响。刷新设备列表后,在调用任何接受音频设备索引方法作为参数之前,应用程序必须确保更新对音频设备所有索引的更新。
45)unsigned getDevCount() const
获取系统中安装的声音设备的数量。
返回
安装在系统中的声音设备的数量。
46)AudioDevInfo getDevInfo( INT ID ) const
获取设备信息。
返回一旦返回成功,将通过此方法填写的设备信息。
参数
- id -音频设备ID。
47)int lookupDev(const string &drv_name, const string &dev_name) const¶
根据驱动和设备名称查找设备索引。
返回设备ID。如果未找到该设备,抛出错误。
参数
- drv_name –驱动名称。
- dev_name -设备名称。
48)string capName(pjmedia_aud_dev_cap cap) const
获取指定功能的字符串信息。
返回Capability 名称
参数
- cap -Capability ID。
49)void setExtFormat(const MediaFormatAudio &format, bool keep = true)¶
配置音频格式(PCM除外)到正在使用的声音设备。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在设备具备AudioDevInfo.caps标志的PJMEDIA_AUD_DEV_CAP_EXT_FORMAT能力时才起作用。否则抛出错误
注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- format - 音频格式。
- keep -指定设置是否保留以备将来使用。
50)MediaFormatAudio getExtFormat() const
获取正在使用的声音设备的音频格式功能(PCM除外)。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备标志AudioDevInfo.caps 的PJMEDIA_AUD_DEV_CAP_EXT_FORMAT时有效,否则抛出错误
返回
音频格式。
51)void setInputLatency(unsigned latency_msec, bool keep = true)¶
为正在使用的声音设备配置音频输入延迟控制或查询功能。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
仅在设备具有PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY标志位(AudioDevInfo.caps标志)时,此方法有效,否则抛出错误
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- latency_msec -输入延迟。
- keep -指定设置是否保留以备将来使用。
52)unsigned getInputLatency() const
获取正在使用的声音设备的音频输入延迟控制或查询功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
返回
音频输入延迟。
53)void setOutputLatency(unsigned latency_msec, bool keep = true)¶
为正在使用的声音设备配置音频输出延迟控制或查询功能。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在设备的AudioDevInfo.caps标志中包含PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY时有效,否则抛出错误
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- latency_msec -输出延迟。
- keep -指定设置是否保留以备将来使用。
54)unsigned getOutputLatency() const
获取正在使用的声音设备的音频输出延迟控制或查询功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备的AudioDevInfo.caps标志中包含PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY时有效,否则抛出错误
返回
音频输出延迟。
55)void setInputVolume(unsigned volume, bool keep = true)
为正在使用的声音设备配置音频输入音量级别。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- volume -输入音量级别,以百分比表示。
- keep -指定设置是否保留以备将来使用。
56)unsigned getInputVolume() const
获取正在使用的声音设备的音频输入音量电平能力。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
返回
音频输入音量级别,以百分比表示。
57)void setOutputVolume(unsigned volume, bool keep = true)¶
为正在使用的声音设备配置音频输出音量级别。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_OUTPUT _VOLUME_SETTING能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- volume -输出音量级别,以百分比表示。
- keep -指定设置是否保留以备将来使用。
58)unsigned getOutputVolume() const
获取正在使用的声音设备的音频输出音量级别功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_OUTPUT _VOLUME_SETTING能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
返回
音频输出音量级别,以百分比表示。
59)unsigned getInputSignal() const
获取正在使用的声音设备的音频输入信号电平能力。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
返回
音频输入信号电平,以百分比表示。
60)unsigned getOutputSignal() const
获取正在使用的声音设备的音频输出信号电平能力。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备具有PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER能力时有效(在AudioDevInfo.caps标志中),否则抛出错误。
返回
音频输出信号电平,以百分比表示。
61)void setInputRoute(pjmedia_aud_dev_route route, bool keep = true)¶
这将为正在使用的声音设备配置音频输入路由功能。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE AudioDevInfo.caps标志时有效,否则错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- route -音频输入路由。
- keep -指定设置是否保留以备将来使用。
62)pjmedia_aud_dev_route getInputRoute() const
获取正在使用的声音设备的音频输入路由功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
仅在有PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE标识时有效有效(AudioDevInfo.caps标志),否则错误。
返回
音频输入路由。
63)void setOutputRoute(pjmedia_aud_dev_route route, bool keep = true)
这将对正在使用的声音设备配置音频输出路由功能。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在具有PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE标识时有效(AudioDevInfo.caps标志),否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
route -音频输出路由。
keep -指定设置是否保留以备将来使用。
64)pjmedia_aud_dev_route getOutputRoute() const
获取正在使用的声音设备的音频输出路由。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备有PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE能力时有效(AudioDevInfo.caps标志),否则抛出错误。
返回
音频输出路由。
65)void setVad
(bool enable, bool keep = true)
对正在使用的声音设备,设置音频语音活动检测能力。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在设备有PJMEDIA_AUD_DEV_CAP_VAD能力时起作用(AudioDevInfo.caps标志),否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于所有设备。
参数
enable -启用/禁用语音活动检测功能。设置为true以启用。
keep -指定设置是否保留以备将来使用。
66)bool getVad() const
获取正在使用的声音设备的音频声音活动检测功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
此方法仅在设备有PJMEDIA_AUD_DEV_CAP_VAD能力时起作用(AudioDevInfo.caps标志),否则抛出错误。
返回
音频声音活动检测功能。
67)void setCng
(bool enable, bool keep = true)¶
这将为正在使用的声音设备配置舒适噪声生成的(comfort noise generation)能力。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
具有AudioDevInfo.caps的PJMEDIA_AUD_DEV_CAP_CNG 标志时有效,否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
enable -启用/禁用舒适噪声生成的能力。设置为true以启用。
keep -指定设置是否保留以备将来使用。
68)bool getCng
() const
获取正在使用的声音设备的音频降噪(comfort noise generation)能力。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
具有AudioDevInfo.caps的PJMEDIA_AUD_DEV_CAP_CNG 标志时有效,否则抛出错误。
返回
是否具备音频舒适噪声生成的功能。
69)void setPlc
(bool enable, bool keep = true)¶
为正在使用的声音设备配置音频包丢失隐藏(packet loss concealment )功能。
如果声音设备当前处于活动状态,则该方法会将设置转发到要立即应用的声音设备实例(如果它支持)。
此方法仅在PJMEDIA_AUD_DEV_CAP_PLC配置时有效(AudioDevInfo.caps标志中),否则抛出错误。
请注意,如果设置保留将来使用,即使应用程序更改了要使用的声音设备,也将应用于任何设备。
参数
- enable -启用/禁用丢包隐藏功能。设置为true以启用。
- keep -指定设置是否保留以备将来使用。
70)bool getPlc() const
获取正在使用的声音设备的音频包丢失隐藏功能。
如果声音设备当前处于活动状态,则该方法会将该请求转发到声音设备。如果声音设备当前处于非活动状态,并且如果应用程序以前设置了设置并将设置标记为保留,则该设置将被返回。否则,这种方法会引起错误。
设备需具备PJMEDIA_AUD_DEV_CAP_PLC能力,才能起作用(AudioDevInfo.caps标志),否否则抛出错误。
返回
音频丢包隐藏功能。
设备信息
71)struct pj::AudioDevInfo
音频设备信息结构。