发布自定义流
SDK 支持在房间中发布自定义视频数据流、本地文件流、网络资源文件流。
自定义视频数据流
SDK 支持发布自定义视频流。通过发布资源方法发布到房间中。远端用户可使用订阅方法订阅此自定义视频流。支持 YUV 和 TextureId 格式。
-
创建本地用户发布的音视频流配置 RCRTCVideoStreamConfig,并创建自定义音视频流对象。示例中创建了
mOutputStream
流对象。/** 设置自定义视频的分辨率、帧率、码率信息。默认是480x640@15f */
RCRTCVideoStreamConfig.Builder videoConfigBuilder = RCRTCVideoStreamConfig.Builder.create();
videoConfigBuilder.setVideoResolution(videoResolution);
/**
* 创建本地用户发布的音视频流对象
* @param tag 自定义视频流唯一标示,不允许带下划线
* @param config 自定义视频的配置信息
* @return 自定义视频流
*/
RCRTCVideoOutputStream mOutputStream = RCRTCEngine.getInstance().createVideoStream(tag, videoConfigBuilder.build()); -
设置自定义视频数据来源,您也可以新建一个 IRCRTCVideoSource 的实现类。IRCRTCVideoSource.IRCVideoConsumer 接口中定义了写入流数据的方法。
IRCVideoConsumer videoConsumer;
mOutputStream.setSource(new IRCRTCVideoSource() {
@Override
public void onInit(IRCVideoConsumer observer) {
videoConsumer = observer;
}
@Override
public void onStart() {
// 建议在此处初始化自定义视频的采集步骤
}
@Override
public void onStop() {
videoConsumer = null;
// 建议在此处处理自定义视频采集的停止步骤
}
@Override
public void onDispose() {
// 销毁自定义视频Stream时,此方法回被回调
}
}); -
将发布资源方法发布到房间中。
- 会议模式下需要调用 publishDefaultStreams 或 publishStream 方法。
- 直播模式下需要调用 publishDefaultLiveStreams 或 publishLiveStream 方法。
/** 会议模式下发布资源 */
localUser.publishStream(mOutputStream, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
}); -
成功发布音频资源后,调用
videoConsumer.writeYuvData
或videoConsumer.writeTexture
方法写入视频流数据。
写入 yuv 数据
发布自定义视频数据流成功后,通过 IRCRTCVideoSource.IRCVideoConsumer 接口中的 writeYuvData
方法写入 yuv 格式数据。
videoConsumer.writeYuvData(byte[] data, int width, int height, int rotation);
参数 | 类型 | 说明 |
---|---|---|
data | byte[] | NV21 格式的视频数据 |
width | int | 视频的实际宽度 |
height | int | 视频的实际高度 |
rotation | int | 旋转角度。一般为 90° 或 270° ,取决于设备 |
写入 texture 数据
发布自定义视频数据流成功后,通过 IRCRTCVideoSource.IRCVideoConsumer 接口中的 writeTexture
方法写入 TextureId 格式数据。
videoConsumer.writeTexture(int width, int height, int oesTextureId, float[] transformMatrix, int rotation, long timestamp);
参数 | 类型 | 说明 |
---|---|---|
width | int | 视频的实际宽度 |
height | int | 视频的实际高度 |
oesTextureId | int | 纹理 id ,android.opengl.GLES11Ext#GL_TEXTURE_EXTERNAL_OES 类型 |
transformMatrix | int | 矩阵 |
rotation | int | 旋转角度。一般为 90° 或 270° ,取决于设备 |
timestamp | int | 当前时间戳:surfaceTexture.getTimestamp() |
自定义本地文件或网络视频流
SDK 支持在房间中发布文件流资源,支持本地文件路径或网络视频资源路径。
-
通过
RCRTCEngine
中的 createFileVideoOutputStream 接口创建本地文件或网络视频流。String filePath = "XXX";
RCRTCVideoStreamConfig config = RCRTCVideoStreamConfig.Builder.create()
.setVideoResolution(RCRTCVideoResolution.RESOLUTION_360_640)
.setVideoFps(RCRTCVideoFps.Fps_24)
.build();
RCRTCFileVideoOutputStream fileStream = RCRTCEngine.getInstance().createFileVideoOutputStream(filePath, false, true, "CUSTOMTAG", config);参数 类型 说明 path String 本地文件路径或网络视频资源路径。 replace boolean 文件中音频是否替换麦克风数据。 true
将麦克风采集的数据替换为音频文件的音频数据发送至对端;false
将音频文件的音频数据与麦克风数据混音后发送至对端。playback boolean 文件中的音频是否在本端播放。 tag String 自定义视频文件流标识。tag 不能包含 _
和RongCloudRTC
字符。config RCRTCVideoStreamConfig 自定视频文件流的配置信息。 -
使用发布资源的方法,将自定义文件流发布到房间中。
- 会议模式下需要调用 publishDefaultStreams 或 publishStream 方法。
- 直播模式下需要调用 publishDefaultLiveStreams 或 publishLiveStream 方法。
/** 会议模式下发布资源 */
localUser.publishStream(fileStream, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
});