媒体流附属信息分发
createDataStream [1/2]
创建数据流。
virtual int createDataStream(int* streamId, bool reliable, bool ordered) = 0;
在 IRtcEngine
生命周期内,每个用户最多只能创建 5 个数据流。离开频道时数据流会被销毁,如需使用需要重新创建数据流。
注意:
-
该方法需要在加入频道后调用。
-
不可将
reliable
设为true
且将ordered
设为false
。
参数
参数名 | 描述 |
---|---|
streamId | 输出参数,创建好的数据流 ID。 |
reliable | 该数据流是否可靠:
|
ordered | 该数据流是否有序:
|
返回值
-
0: 创建数据流成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
createDataStreamEx [1/2]
创建数据流。
virtual int createDataStreamEx(int* streamId, bool reliable, bool ordered, const RtcConnection& connection) = 0;
该方法已废弃。请改用 createDataStreamEx [2/2]
。
你可以调用该方法创建数据流并提高数据传输的可靠性和有序性。
注意:
-
请确保将
reliable
和ordered
设为相同的值。 -
在
IRtcEngine
生命周期内,每个用户最多只能创建 5 个数据流。 -
频道内数据通道最多允许数据延迟 5 秒,若超过 5 秒接收方尚未收到数据流,则数据通道会向 app 报错。
参数
参数名 | 描述 |
---|---|
streamId | 输出参数,创建好的数据流 ID。 |
reliable | 是否保证数据可靠性,即接收方是否需要在数据发送后的 5 秒内接收:
|
ordered | 是否保证数据有序性,即接收方是否需要收到有序的数据:
|
connection | Connection 信息。详见 |
返回值
-
0: 创建数据流成功。
-
< 0: 创建数据流失败。
createDataStream [2/2]
创建数据流。
virtual int createDataStream(int* streamId, DataStreamConfig& config) = 0;
该方法用于创建数据流。每个用户在每个频道中最多只能创建 5 个数据流。
相比 createDataStream [1/2]
,该方法不支持数据可靠。接收方会丢弃超出发送时间 5 秒后的数据包。
参数
参数名 | 描述 |
---|---|
streamId | 输出参数,创建好的数据流 ID。 |
config | 数据流设置。详见 |
返回值
-
0: 创建数据流成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
createDataStreamEx [2/2]
创建数据流。
virtual int createDataStreamEx(int* streamId, DataStreamConfig& config, const RtcConnection& connection) = 0;
创建数据流。每个用户在每个频道中最多只能创建 5 个数据流。
相比 createDataStreamEx [1/2]
,本方法不支持数据可靠。接收方会丢弃超出发送时间 5 秒后的数据包。
参数
参数名 | 描述 |
---|---|
streamId | 输出参数,创建好的数据流 ID。 |
config | 数据流设置。详见 |
connection | Connection 信息。详见 |
返回值
-
0: 创建数据流成功。
-
< 0:方法调用失败。详见
错误码
了解详情和解决建议。
sendStreamMessage
发送数据流。
virtual int sendStreamMessage(int streamId,
const char* data,
size_t length) = 0;
该方法发送数据流消息到频道内所有用户。SDK 对该方法的实现进行了如下限制:
-
频道内每秒最多能发送 30 个包,且每个包最大为 1 KB。
-
每个客户端每秒最多能发送 6 KB 数据。
-
频道内每人最多能同时有 5 个数据通道。
成功调用该方法后,远端会触发 onStreamMessage
回调,远端用户可以在该回调中获取接收到的流消息;
若调用失败,远端会触发 onStreamMessageError
回调。
注意:
-
请确保在调用该方法前,已调用
createDataStream [2/2]
创建了数据通道。 -
直播场景下,该方法仅适用于主播用户。
参数
参数名 | 描述 |
---|---|
streamId | 数据流 ID。可以通过 |
data | 待发送的数据。 |
length | 数据长度。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
sendStreamMessageEx
发送数据流。
virtual int sendStreamMessageEx(int streamId, const char* data, size_t length, const RtcConnection& connection) = 0;
调用 createDataStreamEx [2/2]
后,你可以调用本方法向频道内所有用户发送数据流消息。
SDK 对该方法有如下限制:
-
频道内每秒最多能发送 60 个包,且每个包最大为 1 KB。
-
每个客户端每秒最多能发送 30 KB 数据。
-
频道内每人最多能同时有 5 个数据通道。
成功调用该方法后,远端会触发 onStreamMessage
回调,远端用户可以在该回调中获取接收到的流消息;
若调用失败,远端会触发 onStreamMessageError
回调。
注意:
-
请确保在调用该方法前,已调用
createDataStreamEx [2/2]
创建了数据通道。 -
该方法仅适用于通信场景以及直播场景下的主播用户,如果直播场景下的观众调用此方法可能会造成观众变主播。
参数
参数名 | 描述 |
---|---|
streamId | 数据流 ID。可以通过 |
data | 待发送的数据。 |
length | 数据长度。 |
connection | Connection 信息。详见 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。详见
错误码
了解详情和解决建议。
onStreamMessage
接收到对方数据流消息的回调。
virtual void onStreamMessage(uid_t userId, int streamId, const char* data, size_t length, uint64_t sentTs) {
(void)userId;
(void)streamId;
(void)data;
(void)length;
(void)sentTs;
}
该回调表示本地用户收到了远端用户调用 sendStreamMessage
方法发送的流消息。
参数
参数名 | 描述 |
---|---|
userId | 发送消息的用户 ID。 |
streamId | 接收到的消息的 Stream ID。 |
data | 接收到的数据。 |
length | 数据长度,单位为字节。 |
sentTs | 数据流发出的时间。 |
onStreamMessageError
接收对方数据流消息发生错误的回调。
virtual void onStreamMessageError(uid_t userId, int streamId, int code, int missed, int cached) {
(void)userId;
(void)streamId;
(void)code;
(void)missed;
(void)cached;
}
该回调表示本地用户未收到远端用户调用 sendStreamMessage
方法发送的流消息。
参数
参数名 | 描述 |
---|---|
userId | 发送消息的用户 ID。 |
streamId | 接收到的消息的 Stream ID。 |
code | 发生错误的错误码。 |
missed | 丢失的消息数量。 |
cached | 数据流中断时,后面缓存的消息数量。 |