Commit 7490f320 by baiyfcu Committed by GitHub

Merge pull request #15 from xiongziliang/master

update
parents 98d0bc27 7272f01e
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
- 提供完整的[MediaServer](https://github.com/xiongziliang/ZLMediaKit/tree/master/server)服务器,可以免开发直接部署为商用服务器。 - 提供完整的[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),支持丰富的业务逻辑。 - 提供完善的[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支持都很完善。 - 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
- 全面支持H265。 - 全面支持H265/H264/AAC/G711
## 项目定位 ## 项目定位
......
...@@ -90,7 +90,7 @@ API_EXPORT void API_CALL mk_player_seektoByPos(mk_player ctx, int seekPos); ...@@ -90,7 +90,7 @@ API_EXPORT void API_CALL mk_player_seektoByPos(mk_player ctx, int seekPos);
/** /**
* 设置播放器开启播放结果回调函数 * 设置播放器开启播放结果回调函数
* @param ctx 播放器指针 * @param ctx 播放器指针
* @param cb 回调函数指针,不得为null * @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针 * @param user_data 用户数据指针
*/ */
API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event cb, void *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 ...@@ -98,16 +98,15 @@ API_EXPORT void API_CALL mk_player_set_on_result(mk_player ctx, on_mk_play_event
/** /**
* 设置播放被异常中断的回调 * 设置播放被异常中断的回调
* @param ctx 播放器指针 * @param ctx 播放器指针
* @param cb 回调函数指针,不得为null * @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针 * @param user_data 用户数据指针
*/ */
API_EXPORT void API_CALL mk_player_set_on_shutdown(mk_player ctx, on_mk_play_event cb, void *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 ctx 播放器指针
* @param cb 回调函数指针,不得为null * @param cb 回调函数指针,设置null立即取消回调
* @param user_data 用户数据指针 * @param user_data 用户数据指针
*/ */
API_EXPORT void API_CALL mk_player_set_on_data(mk_player ctx, on_mk_play_data cb, void *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; ...@@ -17,13 +17,13 @@ using namespace toolkit;
API_EXPORT mk_thread API_CALL mk_thread_from_tcp_session(mk_tcp_session ctx){ API_EXPORT mk_thread API_CALL mk_thread_from_tcp_session(mk_tcp_session ctx){
assert(ctx); assert(ctx);
TcpSession *obj = (TcpSession *)ctx; TcpSessionForC *obj = (TcpSessionForC *)ctx;
return obj->getPoller().get(); return obj->getPoller().get();
} }
API_EXPORT mk_thread API_CALL mk_thread_from_tcp_client(mk_tcp_client ctx){ API_EXPORT mk_thread API_CALL mk_thread_from_tcp_client(mk_tcp_client ctx){
assert(ctx); assert(ctx);
TcpClient::Ptr *client = (TcpClient::Ptr *)ctx; TcpClientForC::Ptr *client = (TcpClientForC::Ptr *)ctx;
return (*client)->getPoller().get(); 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 ...@@ -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){ 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); assert(ctx && cb);
EventPoller *poller = (EventPoller *)ctx; EventPoller *poller = (EventPoller *)ctx;
auto ret = poller->doDelayTask(delay_ms,[cb,user_data](){ TimerForC::Ptr *ret = new TimerForC::Ptr(new TimerForC(cb, user_data));
return cb(user_data); (*ret)->start(delay_ms,*poller);
}); return ret;
return new DelayTask::Ptr(ret);
} }
API_EXPORT void API_CALL mk_timer_release(mk_timer ctx){ API_EXPORT void API_CALL mk_timer_release(mk_timer ctx){
assert(ctx); assert(ctx);
DelayTask::Ptr *obj = (DelayTask::Ptr *)ctx; TimerForC::Ptr *obj = (TimerForC::Ptr *)ctx;
(*obj)->cancel(); (*obj)->cancel();
delete obj; delete obj;
} }
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论