增加通过offer获取answer的接口,不依赖http模块

This commit is contained in:
gongluck 2022-09-19 10:46:06 +08:00
parent b77c19c969
commit 94d0505ea6
2 changed files with 24 additions and 0 deletions

View File

@ -82,6 +82,8 @@ API_EXPORT uint16_t API_CALL mk_media_info_get_port(const mk_media_info ctx);
typedef void* mk_media_source; typedef void* mk_media_source;
//查找MediaSource的回调函数 //查找MediaSource的回调函数
typedef void(API_CALL *on_mk_media_source_find_cb)(void *user_data, const mk_media_source ctx); typedef void(API_CALL *on_mk_media_source_find_cb)(void *user_data, const mk_media_source ctx);
//生成AnswerSdp回调函数
typedef void(API_CALL *on_mk_media_source_answersdp_cb)(void *user_data, const mk_media_source ctx, const char *answer, const char *err);
//MediaSource::getSchema() //MediaSource::getSchema()
API_EXPORT const char* API_CALL mk_media_source_get_schema(const mk_media_source ctx); API_EXPORT const char* API_CALL mk_media_source_get_schema(const mk_media_source ctx);
@ -134,6 +136,9 @@ API_EXPORT void API_CALL mk_media_source_find(const char *schema,
//MediaSource::for_each_media() //MediaSource::for_each_media()
API_EXPORT void API_CALL mk_media_source_for_each(void *user_data, on_mk_media_source_find_cb cb, const char *schema, API_EXPORT void API_CALL mk_media_source_for_each(void *user_data, on_mk_media_source_find_cb cb, const char *schema,
const char *vhost, const char *app, const char *stream); const char *vhost, const char *app, const char *stream);
//MediaSource::find() + WebRtcPlayer::create + getOffer
API_EXPORT void API_CALL mk_media_source_answersdp(void *user_data, on_mk_media_source_answersdp_cb cb, const char *offer,
const char *schema, const char *vhost, const char *app, const char *stream, int from_mp4);
///////////////////////////////////////////HttpBody///////////////////////////////////////////// ///////////////////////////////////////////HttpBody/////////////////////////////////////////////
//HttpBody对象的C映射 //HttpBody对象的C映射

View File

@ -257,6 +257,25 @@ API_EXPORT void API_CALL mk_media_source_for_each(void *user_data, on_mk_media_s
}, schema ? schema : "", vhost ? vhost : "", app ? app : "", stream ? stream : ""); }, schema ? schema : "", vhost ? vhost : "", app ? app : "", stream ? stream : "");
} }
API_EXPORT void API_CALL mk_media_source_answersdp(void *user_data, on_mk_media_source_answersdp_cb cb, const char *offer,
const char *schema, const char *vhost, const char *app, const char *stream, int from_mp4) {
#ifdef ENABLE_WEBRTC
assert(offer && schema && vhost && app && stream && cb);
auto srcfound = MediaSource::find(schema, vhost, app, stream, from_mp4);
mediakit::MediaInfo info;
info._schema = RTC_SCHEMA;
info._host = vhost;
info._app = app;
info._streamid = stream;
try {
auto rtc = WebRtcPlayer::create(EventPollerPool::Instance().getPoller(), std::dynamic_pointer_cast<RtspMediaSource>(srcfound), info);
cb(user_data, srcfound.get(), rtc->getAnswerSdp(offer).c_str(), "");
} catch (std::exception &ex) {
cb(user_data, nullptr, nullptr, ex.what());
}
#endif
}
///////////////////////////////////////////HttpBody///////////////////////////////////////////// ///////////////////////////////////////////HttpBody/////////////////////////////////////////////
API_EXPORT mk_http_body API_CALL mk_http_body_from_string(const char *str, size_t len){ API_EXPORT mk_http_body API_CALL mk_http_body_from_string(const char *str, size_t len){
assert(str); assert(str);