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 ...@@ -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); API_EXPORT void API_CALL mk_media_input_aac1(mk_media ctx, void *data, int len, uint32_t dts, void *adts);
/** /**
* 在调用对应的MediaSource.close()时会触发该回调 * MediaSource.close()回调事件
* 你可以在该事件中做清理工作(比如说关闭摄像头,同时调用mk_media_release函数销毁该对象) * 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你应该通过该事件调用mk_media_release函数并且释放其他资源
* 如果你不调用mk_media_release函数,那么MediaSource.close()操作将无效
* @param user_data 用户数据指针,通过mk_media_set_on_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.close()事件
* 在选择关闭一个MediaSource时,将会最终触发到该回调 * 在选择关闭一个关联的MediaSource时,将会最终触发到该回调
* 你可以通过该事件选择删除对象,当然你在该事件中也可以什么都不做 * 你应该通过该事件调用mk_media_release函数并且释放其他资源
* @param ctx 对象指针 * @param ctx 对象指针
* @param cb 回调指针 * @param cb 回调指针
* @param user_data 用户数据指针 * @param user_data 用户数据指针
......
...@@ -68,6 +68,32 @@ API_EXPORT void API_CALL mk_proxy_player_set_option(mk_proxy_player ctx, const c ...@@ -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); 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 #ifdef __cplusplus
} }
#endif #endif
......
...@@ -62,14 +62,11 @@ protected: ...@@ -62,14 +62,11 @@ protected:
} }
if(!_cb){ if(!_cb){
//未设置回调,没法关闭 //未设置回调,没法关闭
WarnL << "请使用mk_media_set_on_close函数设置回调函数!";
return false; return false;
} }
if(!_cb(_user_data)){ //请在回调中调用mk_media_release函数释放资源,否则MediaSource::close()操作不会生效
//回调选择返回不关闭该视频 _cb(_user_data);
return false;
}
//回调中已经关闭该视频
WarnL << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force; WarnL << "close media:" << sender.getSchema() << "/" << sender.getVhost() << "/" << sender.getApp() << "/" << sender.getId() << " " << force;
return true; return true;
} }
......
...@@ -61,3 +61,22 @@ API_EXPORT void API_CALL mk_proxy_player_play(mk_proxy_player ctx, const char *u ...@@ -61,3 +61,22 @@ API_EXPORT void API_CALL mk_proxy_player_play(mk_proxy_player ctx, const char *u
obj->play(url_str); 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论