mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-06 19:07:49 +08:00
新增on_rtsp_auth Python事件
This commit is contained in:
parent
386e18e233
commit
33c61613dc
@ -98,9 +98,14 @@ def on_player_proxy_failed(url, media_tuple, ex) -> bool:
|
||||
def on_get_rtsp_realm(args: dict, invoker, sender) -> bool:
|
||||
mk_logger.log_info(f"on_get_rtsp_realm, args: {args}, sender: {sender}")
|
||||
mk_loader.rtsp_get_realm_invoker_do(invoker, "zlmediakit")
|
||||
# 该事件在c++中也处理下
|
||||
# 返回True代表此事件被python拦截
|
||||
return True
|
||||
|
||||
def on_rtsp_auth(args: dict, realm: str, user_name: str, must_no_encrypt: bool, invoker, sender:dict) -> bool:
|
||||
mk_logger.log_info(f"on_rtsp_auth, args: {args}, realm: {realm}, user_name: {user_name}, must_no_encrypt: {must_no_encrypt}, sender: {sender}")
|
||||
mk_loader.rtsp_auth_invoker_do(invoker, False, "zlmediakit")
|
||||
# 返回True代表此事件被python拦截
|
||||
return True
|
||||
|
||||
def on_reload_config():
|
||||
mk_logger.log_info(f"on_reload_config")
|
||||
@ -476,6 +476,11 @@ void installWebHook() {
|
||||
// 监听kBroadcastOnRtspAuth事件返回正确的rtsp鉴权用户密码 [AUTO-TRANSLATED:bcf1754e]
|
||||
// Listen to the kBroadcastOnRtspAuth event to return the correct rtsp authentication username and password
|
||||
NoticeCenter::Instance().addListener(&web_hook_tag, Broadcast::kBroadcastOnRtspAuth, [](BroadcastOnRtspAuthArgs) {
|
||||
#if defined(ENABLE_PYTHON)
|
||||
if (PythonInvoker::Instance().on_rtsp_auth(args, realm, user_name, must_no_encrypt, invoker, sender)) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
GET_CONFIG(string, hook_rtsp_auth, Hook::kOnRtspAuth);
|
||||
if (unAuthedRealm == realm || !hook_enable || hook_rtsp_auth.empty()) {
|
||||
// 认证失败 [AUTO-TRANSLATED:70cf56ff]
|
||||
|
||||
@ -217,6 +217,13 @@ PYBIND11_EMBEDDED_MODULE(mk_loader, m) {
|
||||
invoker(realm);
|
||||
});
|
||||
|
||||
m.def("rtsp_auth_invoker_do", [](const py::capsule &cap, bool encrypted, const std::string &pwd_or_md5) {
|
||||
// 执行c++代码时释放gil锁
|
||||
py::gil_scoped_release release;
|
||||
auto &invoker = to_native<RtspSession::onAuth>(cap);
|
||||
invoker(encrypted, pwd_or_md5);
|
||||
});
|
||||
|
||||
m.def("set_fastapi", [](const py::object &check_route, const py::object &submit_coro) {
|
||||
static void *fastapi_tag = nullptr;
|
||||
NoticeCenter::Instance().delListener(&fastapi_tag, Broadcast::kBroadcastHttpRequest);
|
||||
@ -338,6 +345,7 @@ PythonInvoker::~PythonInvoker() {
|
||||
_on_media_changed = py::function();
|
||||
_on_player_proxy_failed = py::function();
|
||||
_on_get_rtsp_realm = py::function();
|
||||
_on_rtsp_auth = py::function();
|
||||
_module = py::module();
|
||||
}
|
||||
delete _rel;
|
||||
@ -361,6 +369,7 @@ void PythonInvoker::load(const std::string &module_name) {
|
||||
GET_FUNC(_module, on_media_changed);
|
||||
GET_FUNC(_module, on_player_proxy_failed);
|
||||
GET_FUNC(_module, on_get_rtsp_realm);
|
||||
GET_FUNC(_module, on_rtsp_auth);
|
||||
|
||||
if (hasattr(_module, "on_start")) {
|
||||
py::object on_start = _module.attr("on_start");
|
||||
@ -421,6 +430,14 @@ bool PythonInvoker::on_get_rtsp_realm(BroadcastOnGetRtspRealmArgs) const {
|
||||
return _on_get_rtsp_realm(to_python(args), to_python(invoker), to_python(sender)).cast<bool>();
|
||||
}
|
||||
|
||||
bool PythonInvoker::on_rtsp_auth(BroadcastOnRtspAuthArgs) const {
|
||||
py::gil_scoped_acquire gil; // 确保在 Python 调用期间持有 GIL
|
||||
if (!_on_rtsp_auth) {
|
||||
return false;
|
||||
}
|
||||
return _on_rtsp_auth(to_python(args), realm, user_name, must_no_encrypt, to_python(invoker), to_python(sender)).cast<bool>();
|
||||
}
|
||||
|
||||
} // namespace mediakit
|
||||
|
||||
#endif
|
||||
|
||||
@ -32,6 +32,7 @@ public:
|
||||
bool on_media_changed(BroadcastMediaChangedArgs) const;
|
||||
bool on_player_proxy_failed(BroadcastPlayerProxyFailedArgs) const;
|
||||
bool on_get_rtsp_realm(BroadcastOnGetRtspRealmArgs) const;
|
||||
bool on_rtsp_auth(BroadcastOnRtspAuthArgs) const;
|
||||
|
||||
private:
|
||||
PythonInvoker();
|
||||
@ -58,6 +59,9 @@ private:
|
||||
py::function _on_player_proxy_failed;
|
||||
// rtsp播放是否开启专属鉴权
|
||||
py::function _on_get_rtsp_realm;
|
||||
// rtsp播放或推流鉴权回调
|
||||
py::function _on_rtsp_auth;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user