通过阅读本文,您可以了解OBS插件SDK的集成与实现方法。
操作步骤
说明 本文中的实现方法仅供参考,您可以根据实际业务需求进行开发,详细示例请参见ali_rts_sdk/obs-output-example/artc-stream.c。
- 下载并解压OBS插件SDK。下载地址,请参见SDK下载。
- 工程中导入头文件ali_rts_sdk.h。
- 创建实例。
/** 1.事件回调设置 **/
alirts_event_handler_t event_handler = {0};
// user_data
event_handler.user_data = user_data;
// 日志回调
event_handler.on_log_data = on_log_data;
// 错误回调
event_handler.on_error = on_error;
// 推流开始回调
event_handler.on_push_start = on_push_start;
// 推流结束回调
event_handler.on_push_stop = on_push_stop;
// 网络断开回调
event_handler.on_connection_lost = on_connection_lost;
// 重连状态回调
event_handler.on_reconnect_state = on_reconnect_state;
/** 2.创建alirts实例,获得句柄 **/
alirts_handler_t* alirts = alirts_create(&event_handler);
- 推流。
/** 1.推流配置设置 **/
alirts_config_t config = {0};
// 视频相关配置 1280x720@25fps
config.width = 1280;
config.height = 720;
config.gop_size = 2;
config.max_fps = 25;
// 视频码率设置为2.5M
config.video_bitrate_bps = 2500000;
// 视频编码器配置
config.video_codec = VIDEO_CODEC_H264;
config.video_preset = VIDEO_PRESET_FAST;
config.video_profile = VIDEO_PROFILE_BASELINE;
// 音频相关配置
// 音频仅支持44.1k和48k
config.sample_rate = SAMPLE_RATE_48000;
// 音频仅支持16bit
config.sample_format = FORMAT_16BIT;
// 音频通道设置
config.channel = 2;
// 当前音频码率设置为64k
config.audio_bitrate_bps = 64000;
// 重连配置
//建议开启自动重连
config.enable_auto_reconnect = true;
// 设置重连超时时间为10s
config.reconnect_timeout = 10;
// 推流地址
config.url= "artc://xxxx/xx/xxxxx";
/** 2.开始推流 **/
int ret = alirts_start(alirts, &config);
if (ret != 0) {
// 开始推流失败
}
说明 alirts_start
调用成功之后,会触发on_push_start
回调。
- 发送数据。
// 以发送视频数据为例,音频发送类似
/** 1.设置视频帧 **/
// 视频数据设置之前必须要清零
alirts_frame_t video_frame = {0};
// 当前视频仅支持MEDIA_TYPE_VIDEO_I420输入
video_frame.type = MEDIA_TYPE_VIDEO_I420;
video_frame.width = frame->width;
video_frame.height = frame->height;
video_frame.timestamp = frame->timestamp;
video_frame.data[0] = frame->data[0];
video_frame.data[1] = frame->data[1];
video_frame.data[2] = frame->data[2];
video_frame.linesize[0] = frame->linesize[0];
video_frame.linesize[1] = frame->linesize[1];
video_frame.linesize[2] = frame->linesize[2];
/** 2.发送视频帧 **/
int ret = alirts_send_frame(alirts, &video_frame);
if (ret != 0) {
// 视频发送失败
}
说明 建议在on_push_start
回调之后,调用alirts_send_frame
发送数据。
- 结束推流。
alirts_stop(alirts);
说明 alirts_stop
调用成功之后,会触发on_push_stop
回调。
- 释放实例。