Most visited

Recently visited

Added in API level 12

AudioGroup

public class AudioGroup
extends Object

java.lang.Object
   ↳ android.net.rtp.AudioGroup


AudioGroup是扬声器,麦克风和AudioStream的音频集线器。 通过调用setMode(int)或setMode(int)可以在逻辑上打开或关闭这些组件中的每个组件。 AudioGroup将遍历这些组件并在其执行循环内逐个处理它们。 该循环由四个步骤组成。 首先,对于不在MODE_SEND_ONLY每个AudioStream,解码其传入数据包并存储在其缓冲区中。 然后,如果麦克风已启用,则处理录制的音频并存储在其缓冲区中。 第三,如果扬声器已启用,则混合所有AudioStream缓冲区并播放。 最后,对于不在MODE_RECEIVE_ONLY每个AudioStream,混合所有其他缓冲区MODE_RECEIVE_ONLY回编码后的数据包。 如果AudioGroup中没有AudioStream,AudioGroup将不执行任何操作。

在使用这些类之前,一些事情必须注意。 性能与系统负载和网络带宽密切相关。 通常更简单的AudioCodec的CPU周期更少,但需要更多的网络带宽,反之亦然。 同时使用两个AudioStreams不仅可以使负载加倍,还可以使带宽增加一倍。 条件因设备而异,开发人员应该选择合适的组合以获得最佳结果。

在同一时间保持多个AudioGroup有时很有用。 例如,IP语音(VoIP)应用程序可能想要暂停电话会议,以便进行新呼叫,但仍允许电话会议中的人员相互通话。 这可以使用两个AudioGroups轻松完成,但有一些限制。 由于扬声器和麦克风是全球共享资源,因此一次只允许一个AudioGroup以MODE_ON_HOLD以外的模式运行。 其他人将无法获得这些资源并且无声无息地失败。

使用此类需要RECORD_AUDIO权限。 开发人员应该设置音频模式为MODE_IN_COMMUNICATION使用setMode(int) ,并改变它回来的时候没有AudioGroups的正在使用中。

也可以看看:

Summary

Constants

int MODE_ECHO_SUPPRESSION

该模式类似于 MODE_NORMAL除了回声抑制已启用。

int MODE_MUTED

此模式与 MODE_NORMAL类似,但麦克风已禁用。

int MODE_NORMAL

此模式表示组中的扬声器,麦克风和所有 AudioStream已启用。

int MODE_ON_HOLD

此模式与 MODE_NORMAL类似,只是扬声器和麦克风都被禁用。

Public constructors

AudioGroup()

创建一个空的AudioGroup。

Public methods

void clear()

删除该组中的每个 AudioStream 。

int getMode()

返回当前模式。

AudioStream[] getStreams()

返回此组中的 AudioStream 。

void sendDtmf(int event)

向该组中的每个 AudioStream发送一个DTMF数字。

void setMode(int mode)

改变当前模式。

Protected methods

void finalize()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。

Inherited methods

From class java.lang.Object

Constants

MODE_ECHO_SUPPRESSION

Added in API level 12
int MODE_ECHO_SUPPRESSION

该模式类似于MODE_NORMAL除了回声抑制已启用。 它只能在扬声器电话打开时使用。

常量值:3(0x00000003)

MODE_MUTED

Added in API level 12
int MODE_MUTED

此模式与 MODE_NORMAL类似,但麦克风已禁用。

常数值:1(0x00000001)

MODE_NORMAL

Added in API level 12
int MODE_NORMAL

此模式表示组中的扬声器,麦克风和所有AudioStream已启用。 首先,从流接收到的数据包被解码并与麦克风记录的音频混合。 然后,将结果回放给发言者,编码并发送回每个流。

常量值:2(0x00000002)

MODE_ON_HOLD

Added in API level 12
int MODE_ON_HOLD

此模式与 MODE_NORMAL类似,只是扬声器和麦克风均被禁用。

常量值:0(0x00000000)

Public constructors

AudioGroup

Added in API level 12
AudioGroup ()

创建一个空的AudioGroup。

Public methods

clear

Added in API level 12
void clear ()

删除该组中的每个 AudioStream 。

getMode

Added in API level 12
int getMode ()

返回当前模式。

Returns
int

getStreams

Added in API level 12
AudioStream[] getStreams ()

返回此组中的 AudioStream 。

Returns
AudioStream[]

sendDtmf

Added in API level 12
void sendDtmf (int event)

向该组中的每个AudioStream发送一个DTMF数字。 目前仅支持事件0至15 。

Parameters
event int
Throws
IllegalArgumentException if the event is invalid.

setMode

Added in API level 12
void setMode (int mode)

改变当前模式。 它必须是一个MODE_ON_HOLD , MODE_MUTED , MODE_NORMAL ,并MODE_ECHO_SUPPRESSION 。

Parameters
mode int: The mode to change to.
Throws
IllegalArgumentException if the mode is invalid.

Protected methods

finalize

Added in API level 12
void finalize ()

当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 一个子类重写finalize方法来处置系统资源或执行其他清理。

的常规协定finalize是,它被调用,如果当在Java TM虚拟机已确定不再有由该目的可以通过还没有死亡,除了作为一个动作的结果的任何线程访问的任何手段取决于某些其他可以完成的对象或类别的最终定稿。 finalize方法可以采取任何行动,包括使这个对象再次可用于其他线程; 然而, finalize的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。

类Object的finalize方法Object执行特殊操作; 它只是正常返回。 Object子类可能会覆盖此定义。

Java编程语言不保证哪个线程将为任何给定的对象调用finalize方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。

在为对象调用 finalize方法之后,不会采取进一步的操作,直到Java虚拟机再次确定不再有任何途径可以通过任何尚未死亡的线程访问此对象,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。

对于任何给定对象,Java虚拟机永远不会多次调用 finalize方法。

由 finalize方法引发的任何异常 finalize导致此对象的终止被暂停,但在其他情况下会被忽略。

Throws
Throwable

Hooray!