Commit 7490f320 by baiyfcu Committed by GitHub

Merge pull request #15 from xiongziliang/master

update
parents 98d0bc27 7272f01e
......@@ -19,7 +19,7 @@
- 提供完整的[MediaServer](https://github.com/xiongziliang/ZLMediaKit/tree/master/server)服务器,可以免开发直接部署为商用服务器。
- 提供完善的[restful api](https://github.com/xiongziliang/ZLMediaKit/wiki/MediaServer%E6%94%AF%E6%8C%81%E7%9A%84HTTP-API)以及[web hook](https://github.com/xiongziliang/ZLMediaKit/wiki/MediaServer%E6%94%AF%E6%8C%81%E7%9A%84HTTP-HOOK-API),支持丰富的业务逻辑。
- 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
- 全面支持H265。
- 全面支持H265/H264/AAC/G711
## 项目定位
......
......@@ -90,7 +90,7 @@ API_EXPORT void API_CALL mk_player_seektoByPos(mk_player ctx, int seekPos);
/**
* 设置播放器开启播放结果回调函数
* @param ctx 播放器指针
* @param cb 回调函数指针,不得为null
* @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针
*/
API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event cb, void *user_data);
......@@ -98,16 +98,15 @@ API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event
/**
* 设置播放被异常中断的回调
* @param ctx 播放器指针
* @param cb 回调函数指针,不得为null
* @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针
*/
API_EXPORT void API_CALL mk_player_set_on_shutdown(mk_player ctx, on_mk_play_event cb, void *user_data);
/**
* 设置音视频数据回调函数
* 该接口在播放成功事件触发后才有效
* @param ctx 播放器指针
* @param cb 回调函数指针,不得为null
* @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针
*/
API_EXPORT void API_CALL mk_player_set_on_data(mk_player ctx, on_mk_play_data cb, void *user_data);
......
......@@ -17,13 +17,13 @@ using namespace toolkit;
API_EXPORT mk_thread API_CALL mk_thread_from_tcp_session(mk_tcp_session ctx){
assert(ctx);
TcpSession *obj = (TcpSession *)ctx;
TcpSessionForC *obj = (TcpSessionForC *)ctx;
return obj->getPoller().get();
}
API_EXPORT mk_thread API_CALL mk_thread_from_tcp_client(mk_tcp_client ctx){
assert(ctx);
TcpClient::Ptr *client = (TcpClient::Ptr *)ctx;
TcpClientForC::Ptr *client = (TcpClientForC::Ptr *)ctx;
return (*client)->getPoller().get();
}
......@@ -43,18 +43,59 @@ API_EXPORT void API_CALL mk_sync_do(mk_thread ctx,on_mk_async cb, void *user_dat
});
}
class TimerForC : public std::enable_shared_from_this<TimerForC>{
public:
typedef std::shared_ptr<TimerForC> Ptr;
TimerForC(on_mk_timer cb, void *user_data){
_cb = cb;
_user_data = user_data;
}
~TimerForC(){}
uint64_t operator()(){
lock_guard<recursive_mutex> lck(_mxt);
if(!_cb){
return 0;
}
return _cb(_user_data);
}
void cancel(){
lock_guard<recursive_mutex> lck(_mxt);
_cb = nullptr;
_task->cancel();
}
void start(int ms ,EventPoller &poller){
weak_ptr<TimerForC> weak_self = shared_from_this();
_task = poller.doDelayTask(ms, [weak_self]() {
auto strong_self = weak_self.lock();
if (!strong_self) {
return (uint64_t) 0;
}
return (*strong_self)();
});
}
private:
on_mk_timer _cb = nullptr;
void *_user_data = nullptr;
recursive_mutex _mxt;
DelayTask::Ptr _task;
};
API_EXPORT mk_timer API_CALL mk_timer_create(mk_thread ctx,uint64_t delay_ms,on_mk_timer cb, void *user_data){
assert(ctx && cb);
EventPoller *poller = (EventPoller *)ctx;
auto ret = poller->doDelayTask(delay_ms,[cb,user_data](){
return cb(user_data);
});
return new DelayTask::Ptr(ret);
TimerForC::Ptr *ret = new TimerForC::Ptr(new TimerForC(cb, user_data));
(*ret)->start(delay_ms,*poller);
return ret;
}
API_EXPORT void API_CALL mk_timer_release(mk_timer ctx){
assert(ctx);
DelayTask::Ptr *obj = (DelayTask::Ptr *)ctx;
TimerForC::Ptr *obj = (TimerForC::Ptr *)ctx;
(*obj)->cancel();
delete obj;
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论