Commit 891b86e7 by xiongziliang

新增拉流代理源相关api

parent b3554fb7
......@@ -130,17 +130,18 @@ API_EXPORT void API_CALL mk_media_input_aac(mk_media ctx, void *data, int len, u
API_EXPORT void API_CALL mk_media_input_aac1(mk_media ctx, void *data, int len, uint32_t dts, void *adts);
/**
* 在调用对应的MediaSource.close()时会触发该回调
* 你可以在该事件中做清理工作(比如说关闭摄像头,同时调用mk_media_release函数销毁该对象)
* MediaSource.close()回调事件
* 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你应该通过该事件调用mk_media_release函数并且释放其他资源
* 如果你不调用mk_media_release函数,那么MediaSource.close()操作将无效
* @param user_data 用户数据指针,通过mk_media_set_on_close函数设置
* @return 返回0告知事件触发者关闭媒体失败,非0代表成功
*/
typedef int(API_CALL *on_mk_media_close)(void *user_data);
typedef void(API_CALL *on_mk_media_close)(void *user_data);
/**
* 监听MediaSource.close()事件
* 在选择关闭一个MediaSource时,将会最终触发到该回调
* 你可以通过该事件选择删除对象,当然你在该事件中也可以什么都不做
* 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你应该通过该事件调用mk_media_release函数并且释放其他资源
* @param ctx 对象指针
* @param cb 回调指针
* @param user_data 用户数据指针
......
......@@ -68,6 +68,32 @@ API_EXPORT void API_CALL mk_proxy_player_set_option(mk_proxy_player ctx, const c
*/
API_EXPORT void API_CALL mk_proxy_player_play(mk_proxy_player ctx, const char *url);
/**
* MediaSource.close()回调事件
* 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你应该通过该事件调用mk_proxy_player_release函数并且释放其他资源
* 如果你不调用mk_proxy_player_release函数,那么MediaSource.close()操作将无效
* @param user_data 用户数据指针,通过mk_proxy_player_set_on_close函数设置
*/
typedef void(API_CALL *on_mk_proxy_player_close)(void *user_data);
/**
* 监听MediaSource.close()事件
* 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你应该通过该事件调用mk_proxy_player_release函数并且释放其他资源
* @param ctx 对象指针
* @param cb 回调指针
* @param user_data 用户数据指针
*/
API_EXPORT void API_CALL mk_proxy_player_set_on_close(mk_proxy_player ctx, on_mk_proxy_player_close cb, void *user_data);
/**
* 获取总的观看人数
* @param ctx 对象指针
* @return 观看人数
*/
API_EXPORT int API_CALL mk_proxy_player_total_reader_count(mk_proxy_player ctx);
#ifdef __cplusplus
}
#endif
......
......@@ -62,14 +62,11 @@ protected:
}
if(!_cb){
//未设置回调,没法关闭
WarnL << "请使用mk_media_set_on_close函数设置回调函数!";
return false;
}
if(!_cb(_user_data)){
//回调选择返回不关闭该视频
return false;
}
//回调中已经关闭该视频
//请在回调中调用mk_media_release函数释放资源,否则MediaSource::close()操作不会生效
_cb(_user_data);
WarnL << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force;
return true;
}
......
......@@ -61,3 +61,22 @@ API_EXPORT void API_CALL mk_proxy_player_play(mk_proxy_player ctx, const char *u
obj->play(url_str);
});
}
API_EXPORT void API_CALL mk_proxy_player_set_on_close(mk_proxy_player ctx, on_mk_proxy_player_close cb, void *user_data){
assert(ctx);
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *) ctx);
obj->getPoller()->async([obj,cb,user_data](){
//切换线程再操作
obj->setOnClose([cb,user_data](){
if(cb){
cb(user_data);
}
});
});
}
API_EXPORT int API_CALL mk_proxy_player_total_reader_count(mk_proxy_player ctx){
assert(ctx);
PlayerProxy::Ptr &obj = *((PlayerProxy::Ptr *) ctx);
return obj->totalReaderCount();
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论