发布自定义流
更新时间:2024-02-08
PDF
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());
已复制1
2
3
4
5
6
7
8
9
10
11设置自定义视频数据来源,您也可以新建一个 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时,此方法回被回调 } });
已复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23将发布资源方法发布到房间中。
- 会议模式下需要调用 publishDefaultStreams 或 publishStream 方法。
- 直播模式下需要调用 publishDefaultLiveStreams 或 publishLiveStream 方法。
/** 会议模式下发布资源 */ localUser.publishStream(mOutputStream, new IRCRTCResultCallback() { @Override public void onSuccess() { } @Override public void onFailed(RTCErrorCode errorCode) { } });
已复制1
2
3
4
5
6
7
8
9
10成功发布音频资源后,调用
videoConsumer.writeYuvData
或videoConsumer.writeTexture
方法写入视频流数据。
写入 yuv 数据
发布自定义视频数据流成功后,通过 IRCRTCVideoSource.IRCVideoConsumer 接口中的 writeYuvData
方法写入 yuv 格式数据。
videoConsumer.writeYuvData(byte[] data, int width, int height, int rotation);
已复制
1
参数 | 类型 | 说明 |
---|---|---|
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);
已复制
1
参数 | 类型 | 说明 |
---|---|---|
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);
已复制1
2
3
4
5
6参数 类型 说明 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) { } });
已复制1
2
3
4
5
6
7
8
9
10