通過閱讀本文,您可以了解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
回調。
- 釋放實例。