本页介绍实现码流传输涉及的 API 方法和调用流程。
首先,调用 AgoraRtcService.init
方法初始化 RTSA serive。
在该方法中,你需要:
appId
参数,传入你获取到的 App ID。了解获取 App ID。uid
参数传入用户 ID。为 32 位整型,取值范围为 1 到 232 - 1。0 是无效的 uid
,如果将 uid
设为 0,系统将自动分配一个 UID。events
参数,设置事件回调 AgoraRtcEvents,用以通知 SDK 在运行过程中发生的事件。sdkLogDir
参数,用于存放 SDK 日志。如填写 null
,则使用默认目录 /sdcard/。示例代码如下,仅供参考:
private final AgoraRtcEvents event_listener = new AgoraRtcEvents() {
@Override
public void onJoinChannelSuccess(String channel, int elapsed) {}
@Override
public void onConnectionLost(String channel) {}
@Override
public void onRejoinChannelSuccess(String channel, int elapsed) {}
@Override
public void onWarning(String channel, int war, String msg) {}
@Override
public void onError(String channel, int err, String msg) {}
@Override
public void onUserJoined(String channel, int uid, int elapsed) {}
@Override
public void onUserOffline(String channel, int uid, int elapsed) {}
@Override
public void onUserMuteAudio(String channel, int uid, boolean is_muted) {}
@Override
public void onUserMuteVideo(String channel, int uid, boolean is_muted) {}
@Override
public void onKeyFrameGenReq(String channel, int remote_uid, byte stream_id) {}
@Override
public void onAudioData(String channel, int uid, char sent_ts, byte codec, byte[] bytes) {}
@Override
public void onVideoData(String channel, int uid, char sent_ts, byte codec, byte stream_id, boolean is_key_frame, byte[] bytes) {}
@Override
public void onDecBitrate(String s, int i) {}
@Override
public void onIncBitrate(String s, int i) {}
};
private void initSdk() {
if (isAllPermissionsGranted()) {
AgoraRtcService.init(AppIdAndCert.APP_ID, 0, event_listener, null);
}
}
调用 AgoraRtcService.joinChannel
方法加入频道。
我们把一个客户端比作一栋大楼的话,频道就好比大楼里面的一个房间。频道是由你调用 API 时在客户端创建,第一个用户加入时自动创建频道,最后一个用户离开时频道会自动销毁,无需维护。
用户与频道的关系如下:
加入频道时,你需要:
channelName
参数。这是频道名,是频道的唯一标识。长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):tokenBytes
参数,传入能标识用户角色和权限的 Token。这就好比加入房间所需要的钥匙或门卡。声网提供两种鉴权机制:App ID 和 token。详见校验用户权限。如果安全要求不高,使用 App ID 作为鉴权机制,可将 tokenBytes
设为 null。成功加入频道后,SDK 会触发 AgoraRtcEvents.onJoinChannelSuccess
回调。
示例代码如下,仅供参考:
private void joinChannel() {
AgoraRtcService.joinChannel("my_first_channel", null);
}
成功加入频道后,你可以:
AgoraRtcEvents.onAudioData
方法接收所有你已加入的频道内的音频数据流。AgoraRtcEvents.onVideoData
方法接收所有你已加入的频道内视频数据流。AgoraRtcService.sendAudioData
方法向指定或所有你已加入的频道发送音频数据流。AgoraRtcService.sendVideoData
方法向指定或所有你已加入的频道发送视频数据流。示例代码如下,仅供参考:
private final AgoraRtcEvents event_listener = new AgoraRtcEvents() {
@Override
public void onAudioData(String channel, int uid, char sent_ts, byte codec, byte[] bytes) {
Log.i(Config.TAG, "onAudioData");
}
@Override
public void onVideoData(String channel,
int uid,
char sent_ts,
byte codec,
byte stream_id,
boolean is_key_frame,
byte[] bytes) {
Log.i(Config.TAG, "onVideoData");
}
};
AgoraRtcService.sendVideoData(Config.CHANNEL_NAME,
Config.VIDEO_CODEC,
Config.VIDEO_STREAM_ID,
should_be_key,
videoFrame);
AgoraRtcService.sendAudioData(Config.CHANNEL_NAME,
Config.AUDIO_CODEC,
audioFrame);
调用 AgoraRtcService.leaveChannel
方法离开指定频道,结束在该频道的数据传输。
示例代码如下,仅供参考:
private void leaveChannel() {
AgoraRtcService.leaveChannel("my_first_channel");
}