数据流 Datastream

  • C++

更新时间不可用

createDataStream [1/2]

创建一个数据流。

C++
virtual int createDataStream(int* streamId, bool reliable, bool ordered) = 0;

注: 每个用户在 IRtcEngine 的生命周期内最多可以创建五个数据流。离开频道时,数据流会被销毁,如需继续使用需重新创建。 如果你需要一个更全面的低延迟、高并发、可扩展的实时消息和状态同步解决方案,建议使用实时消息。

调用时机

你可以在加入频道前或后调用此方法。

相关回调

成功调用该方法后,如果接收端在五秒内未收到数据,SDK 会触发 onStreamMessageError 回调并返回错误码。

参数

参数名描述
streamId

输出参数,创建的数据流 ID。

reliable

是否保证接收端在五秒内收到数据流:

  • true:接收端会在五秒内收到发送方的数据。如果未收到,SDK 会触发 onStreamMessageError 回调并返回错误码。
  • false:不保证接收端在五秒内收到数据,延迟或丢失不会返回错误信息。

注意:请确保 reliable 和 ordered 同时为 true 或同时为 false。

ordered

是否按发送顺序接收数据流:

  • true:接收端按发送顺序接收数据。
  • false:接收端不按发送顺序接收数据。
表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

createDataStream [2/2]

创建一个数据流。

C++
virtual int createDataStream(int* streamId, const DataStreamConfig& config) = 0;

createDataStream [2/2] 与 createDataStream [1/2] 相比,不保证数据传输的可靠性。如果数据包在发送后五秒内未被接收,SDK 会直接丢弃该数据包。该方法适用于对实时性要求高但可容忍部分数据丢失的场景。

注: 每个用户在 IRtcEngine 的生命周期内最多可以创建五个数据流。离开频道时数据流会被销毁,如需使用需重新创建。如果你需要一个更全面的低延迟、高并发、可扩展的实时消息和状态同步解决方案,建议使用实时消息。

调用时机

你可以在加入频道前或加入频道后调用该方法。

参数

参数名描述
streamId

输出参数,创建的数据流 ID。

config

数据流的配置。详见 DataStreamConfig。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

createDataStreamEx [1/2]

创建一个数据流。

C++
virtual int createDataStreamEx(int* streamId, bool reliable, bool ordered, const RtcConnection& connection) = 0;

注: 每个用户在 IRtcEngine 的生命周期内最多可创建五个数据流。离开频道时数据流会被销毁,如需继续使用需重新创建。

适用场景

该方法适用于多频道场景。

调用时机

在调用 joinChannelEx 后调用该方法。

相关回调

成功调用该方法后,如果设置 reliable 为 true,接收端在五秒内未收到数据,SDK 会触发 onStreamMessageError 回调并返回错误码。

参数

参数名描述
streamId

输出参数,创建的数据流 ID。

reliable

是否保证接收端在五秒内收到数据流:

  • true:接收端会在五秒内收到发送方的数据。如果未收到,SDK 会触发 onStreamMessageError 回调并返回错误码。
  • false:不保证接收端在五秒内收到数据流,延迟或丢失不会返回错误信息。

注意:请确保 reliable 和 ordered 同时为 true 或同时为 false。

ordered

是否按发送顺序接收数据流:

  • true:接收端按发送顺序接收数据。
  • false:接收端不按发送顺序接收数据。
connection

连接信息。详见 RtcConnection。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

createDataStreamEx [2/2]

创建一个数据流。

C++
virtual int createDataStreamEx(int* streamId, const DataStreamConfig& config, const RtcConnection& connection) = 0;

createDataStreamEx [2/2] 与 createDataStreamEx [1/2] 相比,不保证数据传输的可靠性。如果数据包在发送后五秒内未被接收,SDK 会直接丢弃该数据。建议在调用 joinChannelEx 后调用此方法。

注: 每个用户在 IRtcEngine 的生命周期中最多可以创建五个数据流。离开频道时,数据流会被销毁,如需再次使用需重新创建。如果你需要一个更全面的低延迟、高并发、可扩展的实时消息和状态同步解决方案,建议使用实时消息。

适用场景

该方法适用于多频道场景。

调用时机

在调用 joinChannelEx 后调用。

参数

参数名描述
streamId

输出参数,创建的数据流 ID。

config

数据流的配置。详见 DataStreamConfig。

connection

连接信息。详见 RtcConnection。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

sendStreamMessage

发送数据流消息。

C++
virtual int sendStreamMessage(int streamId, const char* data, size_t length) = 0;

调用 createDataStream 后,可以调用该方法向频道内的所有用户发送数据流消息。SDK 对该方法有限制:

  • 每个客户端在频道中最多可同时拥有 5 个数据通道,所有数据通道共享的总包比特率上限为 30 KB/s;
  • 每个数据通道每秒最多可发送 60 个数据包,每个数据包最大为 1 KB。

注:

  • 如果你需要一个更全面的解决方案,以实现低延迟、高并发和可扩展的实时消息传递和状态同步,建议使用实时消息。
  • 该方法需在调用 createDataStream 并加入频道后调用。
  • 该方法仅适用于主播角色。

相关回调

成功调用该方法后,SDK 会触发 onStreamMessage 回调,远端用户可通过该回调接收数据流消息。调用失败时,SDK 会触发远端的 onStreamMessageError 回调。

参数

参数名描述
streamId

数据流 ID,通过调用 createDataStream 获取。

data

要发送的消息内容。

length

数据内容的长度。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

sendStreamMessageEx

发送数据流消息。

C++
virtual int sendStreamMessageEx(int streamId, const char* data, size_t length, const RtcConnection& connection) = 0;

调用 createDataStreamEx 创建数据通道后,可以调用该方法向频道内的所有用户发送数据流消息。SDK 对该方法有限制:

  • 每个客户端在频道中最多可同时拥有 5 个数据通道,所有数据通道共享的总包比特率上限为 30 KB/s;
  • 每个数据通道每秒最多可发送 60 个数据包,每个数据包最大为 1 KB。

注:

  • 如果你需要一个更全面的解决方案来实现低延迟、高并发和可扩展的实时消息传递和状态同步,建议使用实时消息。
  • 请在调用 joinChannelEx 后再调用该方法。
  • 请确保在调用该方法前已通过 createDataStreamEx 创建数据通道。

适用场景

该方法适用于多频道场景。

相关回调

成功调用该方法后,SDK 会触发远端客户端的 onStreamMessage 回调,远端用户可通过该回调获取数据流消息。调用失败时,SDK 会触发远端客户端的 onStreamMessageError 回调。

参数

参数名描述
streamId

数据流 ID,通过调用 createDataStreamEx 获取。

data

要发送的消息内容。

length

数据长度。

connection

连接信息。详见 RtcConnection。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

onStreamMessage

onStreamMessage 回调:远端用户发送数据流时触发。

C++
virtual void onStreamMessage(uid_t uid, int streamId, const char* data, size_t length, uint64_t sentTs)

当本地用户收到远端用户通过调用 sendStreamMessage 发送的数据流时,SDK 会触发该回调。

注: 如果你需要一个更全面的解决方案,以实现低延迟、高并发和可扩展的实时消息传递与状态同步,建议使用实时消息。

参数

参数名描述
uid

发送该数据流的远端用户 ID。

streamId

接收到的数据流 ID。

data

接收到的数据内容。

length

接收到的数据长度(字节)。

sentTs

发送该数据流的时间戳。

表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类

onStreamMessageError

本地用户未收到远端用户发送的数据流消息时触发的回调。

C++
virtual void onStreamMessageError(uid_t uid, int streamId, int code, int missed, int cached)

该回调在本地用户未能接收到远端用户通过调用 sendStreamMessage 发送的流消息时触发。

注: 如果你需要一个更全面的低延迟、高并发、可扩展的实时消息和状态同步解决方案,建议使用实时消息。

参数

参数名描述
uid

发送消息的远端用户 ID。

streamId

接收消息对应的数据流 ID。

code

错误码。

missed

丢失的消息数量。

cached

数据流中断期间接收到的缓存消息数量。

表格内容超出当前宽度,可横向滚动查看更多列。

所属接口类