Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

183 wiersze
7.5KB

  1. /*
  2. * Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
  3. *
  4. * This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
  5. *
  6. * Use of this source code is governed by MIT license that can be found in the
  7. * LICENSE file in the root of the source tree. All contributing project authors
  8. * may be found in the AUTHORS file in the root of the source tree.
  9. */
  10. #ifndef MK_EVENTS_H
  11. #define MK_EVENTS_H
  12. #include "mk_common.h"
  13. #include "mk_events_objects.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. typedef struct {
  18. /**
  19. * 注册或反注册MediaSource事件广播
  20. * @param regist 注册为1,注销为0
  21. * @param sender 该MediaSource对象
  22. */
  23. void (API_CALL *on_mk_media_changed)(int regist,
  24. const mk_media_source sender);
  25. /**
  26. * 收到rtsp/rtmp推流事件广播,通过该事件控制推流鉴权
  27. * @see mk_publish_auth_invoker_do
  28. * @param url_info 推流url相关信息
  29. * @param invoker 执行invoker返回鉴权结果
  30. * @param sender 该tcp客户端相关信息
  31. */
  32. void (API_CALL *on_mk_media_publish)(const mk_media_info url_info,
  33. const mk_publish_auth_invoker invoker,
  34. const mk_sock_info sender);
  35. /**
  36. * 播放rtsp/rtmp/http-flv/hls事件广播,通过该事件控制播放鉴权
  37. * @see mk_auth_invoker_do
  38. * @param url_info 播放url相关信息
  39. * @param invoker 执行invoker返回鉴权结果
  40. * @param sender 播放客户端相关信息
  41. */
  42. void (API_CALL *on_mk_media_play)(const mk_media_info url_info,
  43. const mk_auth_invoker invoker,
  44. const mk_sock_info sender);
  45. /**
  46. * 未找到流后会广播该事件,请在监听该事件后去拉流或其他方式产生流,这样就能按需拉流了
  47. * @param url_info 播放url相关信息
  48. * @param sender 播放客户端相关信息
  49. * @return 1 直接关闭
  50. * 0 等待流注册
  51. */
  52. int (API_CALL *on_mk_media_not_found)(const mk_media_info url_info,
  53. const mk_sock_info sender);
  54. /**
  55. * 某个流无人消费时触发,目的为了实现无人观看时主动断开拉流等业务逻辑
  56. * @param sender 该MediaSource对象
  57. */
  58. void (API_CALL *on_mk_media_no_reader)(const mk_media_source sender);
  59. /**
  60. * 收到http api请求广播(包括GET/POST)
  61. * @param parser http请求内容对象
  62. * @param invoker 执行该invoker返回http回复
  63. * @param consumed 置1则说明我们要处理该事件
  64. * @param sender http客户端相关信息
  65. */
  66. void (API_CALL *on_mk_http_request)(const mk_parser parser,
  67. const mk_http_response_invoker invoker,
  68. int *consumed,
  69. const mk_sock_info sender);
  70. /**
  71. * 在http文件服务器中,收到http访问文件或目录的广播,通过该事件控制访问http目录的权限
  72. * @param parser http请求内容对象
  73. * @param path 文件绝对路径
  74. * @param is_dir path是否为文件夹
  75. * @param invoker 执行invoker返回本次访问文件的结果
  76. * @param sender http客户端相关信息
  77. */
  78. void (API_CALL *on_mk_http_access)(const mk_parser parser,
  79. const char *path,
  80. int is_dir,
  81. const mk_http_access_path_invoker invoker,
  82. const mk_sock_info sender);
  83. /**
  84. * 在http文件服务器中,收到http访问文件或目录前的广播,通过该事件可以控制http url到文件路径的映射
  85. * 在该事件中通过自行覆盖path参数,可以做到譬如根据虚拟主机或者app选择不同http根目录的目的
  86. * @param parser http请求内容对象
  87. * @param path 文件绝对路径,覆盖之可以重定向到其他文件
  88. * @param sender http客户端相关信息
  89. */
  90. void (API_CALL *on_mk_http_before_access)(const mk_parser parser,
  91. char *path,
  92. const mk_sock_info sender);
  93. /**
  94. * 该rtsp流是否需要认证?是的话调用invoker并传入realm,否则传入空的realm
  95. * @param url_info 请求rtsp url相关信息
  96. * @param invoker 执行invoker返回是否需要rtsp专属认证
  97. * @param sender rtsp客户端相关信息
  98. */
  99. void (API_CALL *on_mk_rtsp_get_realm)(const mk_media_info url_info,
  100. const mk_rtsp_get_realm_invoker invoker,
  101. const mk_sock_info sender);
  102. /**
  103. * 请求认证用户密码事件,user_name为用户名,must_no_encrypt如果为true,则必须提供明文密码(因为此时是base64认证方式),否则会导致认证失败
  104. * 获取到密码后请调用invoker并输入对应类型的密码和密码类型,invoker执行时会匹配密码
  105. * @param url_info 请求rtsp url相关信息
  106. * @param realm rtsp认证realm
  107. * @param user_name rtsp认证用户名
  108. * @param must_no_encrypt 如果为true,则必须提供明文密码(因为此时是base64认证方式),否则会导致认证失败
  109. * @param invoker 执行invoker返回rtsp专属认证的密码
  110. * @param sender rtsp客户端信息
  111. */
  112. void (API_CALL *on_mk_rtsp_auth)(const mk_media_info url_info,
  113. const char *realm,
  114. const char *user_name,
  115. int must_no_encrypt,
  116. const mk_rtsp_auth_invoker invoker,
  117. const mk_sock_info sender);
  118. /**
  119. * 录制mp4分片文件成功后广播
  120. */
  121. void (API_CALL *on_mk_record_mp4)(const mk_mp4_info mp4);
  122. /**
  123. * shell登录鉴权
  124. */
  125. void (API_CALL *on_mk_shell_login)(const char *user_name,
  126. const char *passwd,
  127. const mk_auth_invoker invoker,
  128. const mk_sock_info sender);
  129. /**
  130. * 停止rtsp/rtmp/http-flv会话后流量汇报事件广播
  131. * @param url_info 播放url相关信息
  132. * @param total_bytes 耗费上下行总流量,单位字节数
  133. * @param total_seconds 本次tcp会话时长,单位秒
  134. * @param is_player 客户端是否为播放器
  135. */
  136. void (API_CALL *on_mk_flow_report)(const mk_media_info url_info,
  137. size_t total_bytes,
  138. size_t total_seconds,
  139. int is_player,
  140. const mk_sock_info sender);
  141. /**
  142. * 日志输出广播
  143. * @param level 日志级别
  144. * @param file 源文件名
  145. * @param line 源文件行
  146. * @param function 源文件函数名
  147. * @param message 日志内容
  148. */
  149. void (API_CALL *on_mk_log)(int level, const char *file, int line, const char *function, const char *message);
  150. } mk_events;
  151. /**
  152. * 监听ZLMediaKit里面的事件
  153. * @param events 各个事件的结构体,这个对象在内部会再拷贝一次,可以设置为null以便取消监听
  154. */
  155. API_EXPORT void API_CALL mk_events_listen(const mk_events *events);
  156. #ifdef __cplusplus
  157. }
  158. #endif
  159. #endif //MK_EVENTS_H