tencentTrtcVoiceRoom

腾讯云实时音视频

该插件提供语音聊天室的功能, 包括麦位管理、低延时语音互动、文字聊天等 TRTC 在语音聊天场景下的相关能力。

论坛示例

该论坛提供了插件使用示例入口,您可以在论坛中找到使用的Demo,以及问题反馈。

技术支持

如果您有以下需求:

  • 方案咨询;
  • 接入流程协助;
  • 测试DEMO功能;
  • 内测功能;
  • 问题反馈;
  • 需求反馈;

音视频产品使用复杂程度高,可以扫码联系我们,获取技术支持

技术支持

添加时备注: tencentTrtcVoiceRoom

也可以直接添加微信号: ruanyunwangluo006

接口列表

初始化与监听

接口列表 功能
init 初始化
setLiveRoomListener 设置监听器
removeLiveRoomListener 移除监听器
destroy 销毁

登录与登出

接口列表 功能
login 登录
logout 登出
setSelfProfile 修改个人信息

房间接口

接口列表 功能
createRoom 创建房间
destroyRoom 销毁房间
enterRoom 进入房间
exitRoom 离开房间
getRoomInfoList 获取房间列表的详细信息
getUserInfoList 获取指定userId的用户信息

麦位管理

接口列表 功能
enterSeat 主动上麦
leaveSeat 主动下麦
pickSeat 抱人上麦
kickSeat 踢人下麦
muteSeat 静音/解除静音某个麦位
closeSeat 封禁/解禁某个麦位

本地音频操作

接口列表 功能
startMicrophone 开启麦克风采集
stopMicrophone 停止麦克风采集
setAudioQuality 设置音质
muteLocalAudio 静音/取消静音本地的音频
setSpeaker 设置开启扬声器
setAudioCaptureVolume 设置麦克风采集音量
setAudioPlayoutVolume 设置播放音量
muteRemoteAudio 静音/解除静音指定成员
muteAllRemoteAudio 静音/解除静音所有成员

邀请信令

接口列表 功能
sendInvitation 发送邀请
acceptInvitation 接受邀请
rejectInvitation 拒绝邀请
cancelInvitation 取消邀请

消息发送

接口列表 功能
sendRoomTextMsg 发送普通文本消息
sendRoomCustomMsg 发送自定义文本消息

插件接口

加载插件

var voiceRoom = api.require('tencentTrtcVoiceRoom');

插件加载后,就可以调用下方接口。

init

初始化

init({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

##代码示例

voiceRoom.init({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

setVoiceRoomListener

设置监听

setVoiceRoomListener({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    eventType: "onRoomInfoChange",
    ...
}

|事件回调|回调含义| |onRoomInfoChange|进房成功后会回调该接口| |onRoomDestroy|房间被销毁的回调| |onSeatListChange|全量的麦位列表变化| |onAnchorEnterSeat|有成员上麦| |onAnchorLeaveSeat|有成员下麦| |onSeatMute|主播禁麦| |onSeatClose|主播封麦| |onAudienceEnter|收到观众进房通知| |onAudienceExit|收到观众退房通知| |onRecvRoomTextMsg|收到文本消息| |onRecvRoomCustomMsg|收到自定义消息| |onReceiveNewInvitation|收到新的邀请请求| |onInviteeAccepted|被邀请者接受邀请| |onInviteeRejected|被邀请者拒绝邀请| |onInvitationCancelled|邀请人取消邀请|

示例代码

voiceRoom.setVoiceRoomListener({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

removeVoiceRoomListener

移除监听器

removeVoiceRoomListener({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.removeVoiceRoomListener({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

destroy

销毁

destroy({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.destroy({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

login

登录

login({params}, function(ret, err))

params

sdkAppId:

  • 类型: 整数类型
  • 描述: (必填项)在实时音视频控制台 >【应用管理】> 应用信息中查看

userId:

  • 类型: 字符串类型
  • 描述: (必填项)当前用户的Id

userSig:

  • 类型: 字符串
  • 描述: (必填项)用户签名

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var sdkAppId = 140xxxx16;
var userId = 'test001';
var userSig = 'eJwtzxxxxxx1EQpo';
    
voiceRoom.login({
    sdkAppId: sdkAppId,
    userId: userId,
    userSig: userSig
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

logout

登出

logout({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.logout({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

setSelfProfile

修改个人信息

setSelfProfile({params}, function(ret, err))

params

name:

  • 类型: 字符串类型
  • 描述: (可选项)昵称

avatarUrl:

  • 类型: 字符串类型
  • 描述: (可选项)头像地址

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var userName = 'username002';
var avatarUrl = 'xxxxx';

voiceRoom.setSelfProfile({
    userName: userName,
    avatarUrl: avatarUrl
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

createRoom

创建房间(主播调用),若房间不存在,系统将自动创建一个新房间

createRoom({params}, function(ret, err))

params

roomId:

  • 类型: 字符串类型
  • 描述: (必填项)房间标识,需要由您分配并进行统一管理

roomParam:

  • 类型: JSON类型
  • 描述: (必填项)房间信息,用于房间描述的信息

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var roomId = 913;
var roomParam = {
    roomName: 'rykj001',
    seatCount: 7,
    needRequest: false,
    coverUrl: 'https://tesxxxx1.cos.ap-guangzhou.myqcloud.com/cover001.jpg'
};

voiceRoom.createRoom({
    roomId: roomId,
    roomParam: roomParam
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

destroyRoom

销毁房间(主播调用)

destroyRoom({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.destroyRoom({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

enterRoom

进入房间(观众调用)

enterRoom({params}, function(ret, err))

params

roomId:

  • 类型: 字符串类型
  • 描述: (必填项)房间标识

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var roomId = 913;

voiceRoom.enterRoom({
    roomId: roomId,
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

exitRoom

离开房间

exitRoom({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.exitRoom({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

getRoomInfoList

获取房间列表的详细信息

getRoomInfoList({params}, function(ret, err))

params

roomIdList:

  • 类型: 数组类型
  • 描述: (必填项)房间号列表

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var roomIdList = [1];

voiceRoom.getRoomInfoList({
    roomIdList: roomIdList
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

getUserInfoList

获取指定 userId 的用户信息

getUserInfoList({params}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var userIdList = ['test001'];

voiceRoom.getUserInfoList({
    userIdList: userIdList
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

enterSeat

主动上麦(观众端和主播均可调用)

enterSeat({params}, function(ret, err))

params

seatIndex:

  • 类型: 整数类型
  • 描述: (必填项)需要上麦的麦位序号

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var seatIndex = 0;

voiceRoom.enterSeat({
    seatIndex: seatIndex
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

leaveSeat

主动下麦(观众端和主播均可调用)

leaveSeat({}, function(ret, err))

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

voiceRoom.leaveSeat({}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

pickSeat

抱人上麦(主播调用)

pickSeat({params}, function(ret, err))

params

seatIndex:

  • 类型: 整数类型
  • 描述: (必填项)需要抱上麦的麦位序号

userId:

  • 类型: 字符串类型
  • 描述: (必填项)用户Id

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var seatIndex = 1;
var userId = 'test001';

voiceRoom.pickSeat({
    seatIndex: seatIndex,
    userId: userId
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

kickSeat

开始直播(推流)

kickSeat({params}, function(ret, err))

params

seatIndex:

  • 类型: 整数类型
  • 描述: (必填项)需要踢下麦的麦位序号

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	// 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var seatIndex = 1;

voiceRoom.kickSeat({
    seatIndex: seatIndex
}, function(ret) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

muteSeat

静音/解除静音某个麦位(主播调用)

muteSeat({params}, function(ret, err))

params

seatIndex:

  • 类型: 整数类型
  • 描述: (必填项)需要操作的麦位序号

isMute:

  • 类型: 布尔类型
  • 描述: (必填项)true:静音对应麦位;false:解除静音对应麦位

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 		 // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var seatIndex = 1;
var isMute = true;

voiceRoom.muteSeat({
    seatIndex: seatIndex,
    isMute: isMute
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

closeSeat

封禁/解禁某个麦位(主播调用)

closeSeat({params}, function(ret, err))

params

seatIndex:

  • 类型: 整数类型
  • 描述: (必填项)需要操作的麦位序号

isClose:

  • 类型: 布尔类型
  • 描述: (必填项)true:封禁对应麦位; false:解封对应麦位

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: -911, 	   // 整数类型, 错误码
    msg: '错误描述' 	// 字符串类型, 错误信息
}

示例代码

var seatIndex = 1;
var isClose = true;

voiceRoom.closeSeat({
    seatIndex: seatIndex,
    isClose: isClose
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

sendInvitation

向用户发送邀请

sendInvitation({params}, function(ret, err))

params

cmd:

  • 类型: 字符串类型
  • 描述: (必填项)业务自定义指令

userId:

  • 类型: 字符串类型
  • 描述: (必填项)邀请的用户Id

content:

  • 类型: 字符串类型
  • 描述: (必填项)邀请的内容

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	      // 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var remoteUserId = 'test002';
var invitationCmd = 'this is invitation cmd';
var content = 'this is content';

voiceRoom.sendInvitation({
    cmd: invitationCmd,
    userId: remoteUserId,
    content: content
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

acceptInvitation

接受邀请

acceptInvitation({params}, function(ret, err))

params

identifier:

  • 类型: 字符串类型
  • 描述: (必填项)邀请Id

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	     // 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var identifier = 'xxxx';

voiceRoom.acceptInvitation({
    identifier: identifier
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

rejectInvitation

拒绝邀请

rejectInvitation({params}, function(ret, err))

params

identifier:

  • 类型: 字符串类型
  • 描述: (必填项)邀请Id

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	// 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var identifier = 'xxxx';

voiceRoom.rejectInvitation({
    identifier: identifier
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

cancelInvitation

取消邀请

cancelInvitation({params}, function(ret, err))

params

identifier:

  • 类型: 字符串类型
  • 描述: (必填项)邀请Id

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	// 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var identifier = 'xxxx';

voiceRoom.cancelInvitation({
    identifier: identifier
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

sendRoomTextMsg

在房间中广播文本消息

sendRoomTextMsg({params}, function(ret, err))

params

msg:

  • 类型: 字符串类型
  • 描述: (必填项)文本消息

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	// 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var msg = 'this is a message';

voiceRoom.sendRoomTextMsg({
    msg: msg
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

sendRoomCustomMsg

发送自定义文本消息

sendRoomCustomMsg({params}, function(ret, err))

params

cmd:

  • 类型: 字符串类型
  • 描述: (必填项)命令字,由开发者自定义,主要用于区分不同消息类型

msg:

  • 类型: 字符串类型
  • 描述: (必填项)文本消息

callback

ret:

  • 类型: JSON对象
  • 内部字段:
{
    status: true 	// 布尔类型, true表示操作成功
}

err:

  • 类型: JSON对象
  • 内部字段:
{
    code: 100, 	// 整数类型, 错误码
    msg: '参数为必填' 	// 字符串类型, 错误信息
}

示例代码

var msg = 'this is a message';
var cmd = 'this is a cmd';

voiceRoom.sendRoomCustomMsg({
    cmd: cmd,
    msg: msg
}, function(ret, err) {
    if (ret) {
        api.alert({msg: JSON.stringify(ret)});
    } else {
        api.alert({msg: JSON.stringify(err)});
    }
});

可用性

iOS系统,Android系统

可提供1.0.0及更高版本

技术支持

如果您有以下需求:

  • 方案咨询;
  • 接入流程协助;
  • 测试DEMO功能;
  • 内测功能;
  • 问题反馈;
  • 需求反馈;

音视频产品使用复杂程度高,可以扫码联系我们,获取技术支持,

技术支持

微信号为: ruanyunwangluo006

是否仍需要帮助? 请保持联络!
最后更新于 2024/11/18