Nginx Rtmp Learing 之HTTP HOOK回调及unix socket使用

HTTP请求,JS逆向,网页HOOK注入以及关键字定位技巧 运行方法:鼠标右键点击脚本名,运行即可。然后再重复发送api请求,当脚本运行到对应key的时候脚本自动打上断点。· 然后对要HOOK的JS脚本进行编写,一定要记得CTRL+S保存hook后的脚本,否则脚本不会生效,此时刷新网页,本地的hook脚本即可生效。新建代码段,假设我们要抓的https请求头中包含一个key:'value',则在脚本中输入如下代码。在开发者工具中先抓包找到想要Hook的JS脚本文件,鼠标右键点击在来源面板中打开。使用油猴脚本,在油猴中新建脚本运行即可。 阅读详情

Nginx Rtmp Learing 之HTTP HOOK回调和unix socket使用

1. 名词解释

  • LMSS Live Media Streaming Service 直播流媒体服务
  • LMDS Live Media dispatch Service 直播媒体调度服务

2. 概述

  1. 在nginx的rtmp协议实现中,一个简单的推拉流会被拆分成多个事件(CONNECT,PUBLISH,UPDATE,PUBLISH_DONE,PLAY)等等。
  2. LMSS 模块会将RTMP推拉流请求中的每种事件定制为一种HOOK请求发往后端的调度模块(LMDS)。
  3. LMDS模块当接收到HOOK请求后会完成类似用户合法性验证、用户配置信息获取、级联信息查询等等逻辑。
  4. LMSS在接收到LMDS的响应之前会暂停命令处理,直到它返回结果代码。

  原生的nginx rtmp模块已经支持了上述HOOK的功能,所以本文不在讲述具体的实现原理。只简单的介绍下,它的配置及字段含义。

3. nginx.conf配置实例

rtmp {
    ...

    on_connect             unix:/dev/shm/rtmp.sock:/connect;
    on_publish             unix:/dev/shm/rtmp.sock:/publish;
    on_play                unix:/dev/shm/rtmp.sock:/play;
    on_update              unix:/dev/shm/rtmp.sock:/update;
    on_publish_done        unix:/dev/shm/rtmp.sock:/publish_done;

    server {
     ...
    }
}

http {
    server {
            listen unix:/dev/shm/rtmp.sock;

            location =/connect {
                proxy_set_header Host $host;
                proxy_pass http://lmds/connect;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
            }

            location =/publish {
                proxy_set_header Host $host;
                proxy_pass http://lmds/publish;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
            }

            location =/play {
                proxy_set_header Host $host;
                proxy_pass http://lmds/play;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
            }

            location =/update {
                proxy_set_header Host $host;
                proxy_pass http://lmds/update;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
            }

            location =/publish_done {
                proxy_set_header Host $host;
                proxy_pass http://lmds/publish_done;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
            }
        }
}

upstream lmds {
    #round-robin by default
    server 127.0.0.1:80;
    keepalive 60;
}

   Lmss 和Lmds服务器之间会频繁通过HTTP进行交互。为了减少频繁建立和释放HTTP所带来的损耗,可以采用在两个服务器之间采用proxy代理及unix socket实现http长连接的方式。

3.1 on_connect

  • 语法

    on_connect url

  • 上下文

    rtmp, server

  • 描述

    1. 设置 HTTP 连接回调。当客户分发连接命令一个连接命令时,一个 HTTP 请求异步发送,命令处理将被暂停,直到它返回结果代码。当 HTTP 2XX 码(成功状态码)返回时,RTMP 会话继续。返回码 3XX (重定向状态码)会使 RTMP 重定向到另一个从 HTTP 返回头里获取到的 application。否则(其他状态码)连接丢弃。
    2. 注意这一指令在 application 域是不允许的,因为 application 在连接阶段还是未知的。
      HTTP 请求接收到一些参数。在 application/x-www-form-urlencoded MIME 类型下使用 POST 方法。以下参数将被传给调用者:
    call=connect。
    * addr - 客户端 IP 地址。
    * app - application 名。
    * flashVer - 客户端 flash 版本。
    * swfUrl - 客户端 swf url。
    * tcUrl - tcUrl。
    * pageUrl - 客户端页面 url。
    

    除了上述参数以外,所有显式传递给连接命令args的参数也由回调发送。

3.2 on_publish

  • 语法

    on_publish url

  • 上下文

    rtmp, serverapplication

  • 描述

    同上面提到的 on_play 一样,唯一的不同点在于这个指令在发布命令设置回调。不同于远程 pull,push 在这里是可以的。

除了上述参数以外,所有显式传递给连接命令args的参数也由回调发送。

3.3 on_update

  • 语法

    on_update url

  • 上下文

    rtmp, serverapplication

  • 描述

    设置 update 回调。这个回调会在 notify_update_timeout 期间调用。如果一个请求返回结果不是 2XX,连接禁止。这可以用来同步过期的会话。追加 time 参数即播放/发布调用后的秒数会被发送给处理程序。

3.4 on_publish_done

  • 语法

    on_publish_done url

  • 上下文

    rtmp, serverapplication

  • 描述

    等同于 on_done 的表现,但只适用于发布结束事件。

3.5 on_play

  • 语法

    on_play url

  • 上下文

    rtmp, serverapplication

  • 描述

    1. 设置 HTTP 播放回调。每次一个客户分发播放命令时,一个 HTTP 请求异步发送,命令处理会挂起 - 直到它返回结果码。之后再解析 HTTP 结果码。
    2. HTTP 2XX 返回码的话继续 RTMP 会话。
    3. HTTP 3XX 返回码的话 重定向 RTMP 到另一个流,这个流的名字在 HTTP 返回头的 Location 获取。如果新流的名字起始于 rtmp:// 然后远程 relay 会被创建。relay 要求 IP 地址是指定的而不是域名,并且只工作在 1.3.10 版本以上的 nginx。另请参考 notify_relay_redirect。
    4. 其他返回码的话 RTMP 连接丢弃。

   HTTP 请求接收到一些个参数。在 application/x-www-form-urlencoded MIME 类型下使用 POST 方法。以下参数会被传送给调用者:

* call=play。
* addr - 客户端 IP 地址。
* app - application 名。
* flashVer - 客户端 flash 版本。
* swfUrl - 客户端 swf url。
* tcUrl - tcUrl。
* pageUrl - 客户端页面 url。
* name - 流名。
出了上述参数之外其他所有播放命令参数显式地发送回调。例如如果一个流由 url rtmp://localhost/app/movie?a=100&b=face&foo=bar 访问,然后呢 a,b 和 foo 发送回调。

参考:

http://blog.csdn.net/defonds/article/details/9274479
https://github.com/arut/nginx-rtmp-module/wiki/Directives#on_connect
HttpHook:使用 cydiasubstrate 的 HttpHook 钩子 使用 cydiasubstrate 的 HttpHook 许可证: 立即下载

相关推荐

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 499

nginx中设置的那些debug_hooks

debug hooks

Edidaughter的博客 578

利用正射影像对斜射图像进行反向投影

因此,RANSAC算法可以通过计算inliners和outliers的数量来评估估计关键点的质量,确保与其他点不一致的点不会在Homography矩阵中被估计。然后,它通过考虑关键点周围区域中图像的梯度大小和方向来计算每个提取的关键点的方向。由于单应性矩阵的计算可能会受到两个图像中异常值的存在的影响,这将导致矩阵的不正确估计并导致沿图像的对准和映射不良。FLANN匹配器的方法基于K近邻搜索的概念,即从图像中找到k个近邻。找到相机在正射影像坐标系中的位置并在正射影像上绘制重叠区域的边界框。

gis收藏家的博客 1482

nginx pod hook钩子优雅关闭示例详解

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点本文介绍pod hook(pod钩子)和如何优雅的关闭nginx pod。管理pod的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.jb51.net/article/266741.htm为容器的生命周期事件设置处理函数,

sinat_40572875的博客 1324

Nginx-rtmp 直播媒体实时流实现

这段时间在搭建一个IPCamera项目服务器。视频点对点通话,客户端会查看设备端的音视频实时流。为了省流量,是通过P2P进行穿透。但是由于NAT设备的原因和IPV4的枯竭。有些设备是无法进行点对点传输实时流。所以需要进行服务器转发。这里为了快速实现原型,同时参考现在主流的流媒体协议。发现很多使用的是RTMP协议。下图是总体设计图,为了整合多平台,会自建RTMP流媒体服务器和使用云厂商SaaS的RTMP流媒体服务。但是由于有时候会传输一些非流媒体数据,需要传输一些二进制文件,所以会需要自定义媒体转发服务。

irainsa的博客 1638

Nginx RTMP 模块 nginx-rtmp-module 指令详解

译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解。 指令 Core rtmp 语法:rtmp { ... } 上下文:根 描述:保存所有 RTMP 配置的块。 server 语法:server { ... } 上下文:rtmp 描述:声明一个 RTMP 实例。 rtmp {   server {

Defonds 的专栏 11万+

nginx.conf中关于nginx-rtmp-module配置指令详解

描述:定义每个流发布时要执行的带有参数的外部命令。* HTTP 3XX 返回码的话 重定向 RTMP 到另一个流,这个流的名字在 HTTP 返回头的 Location 获取。描述:设置 HTTP 连接回调。返回码 3XX (重定向状态码)会使 RTMP 重定向到另一个从 HTTP 返回头里获取到的 application。发送一个特殊的包到远程连接,然后在 ping_timeout 指令指定的时间内期待一个回复。Url 语法:[rtmp://]host[:port][/app[/playpath]]。

守护大白菜的博客 3784

使用nginx搭建流媒体直播平台(该方式不适用与多人聊天)

使用nginx搭建流媒体直播平台,目的就是要支持rtmp协议,实现用户使用rtmp(rtmp://192.168.201.128/myapp)协议推送流到服务器

一名清官 1万+

nginx+nginx-rtmp-module的流媒体服务器搭建(配置回调地址)

配置回调URL 在rtmp下面添加回调URL:如下 rtmp { server { listen 1935; #监听的端口 chunk_size 4000; application hls { live on; hls on; hls_path E:/video;#视频流存放地址 hls_fragment 3s; hls

qq_35238125的博客 1796

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(一) RTMP 命令详解

源码地址:https://github.com/Tinywan/PHP_Experience 说明:   rtmp的延迟主要取决于播放器设置,但流式传输软件,流的比特率和网络速度(以及响应时间“ping”)可能会对延迟产生影响,具有播放器的本地rtmp服务器 使用“否”缓冲区(如0.1-0.2秒缓冲区等)可能会在0.8-1.2秒之间总是延迟,当事情正好工作时  nginx配置文件 r...

Tinywan 1475

RTMPdump 源代码分析 :RTMP_Connect建立网络连接

本篇文章分析一下RTMPdump里面的建立一个流媒体连接过程中的函数调用。 RTMP_Connect: bool RTMP_Connect(RTMP *r, RTMPPacket *cp) { struct sockaddr_in service; if (!r->Link.hostname.av_len) return false; memset(&service, ...

叮咚的博客 1617

分布式直播系统(十一)【nginx-rtmp-module鉴权接口】

使用pingos媒体服务器快速实现鉴权功能

impingo的博客 3212

「自己开发直播」rtmp-nginx-module实现直播状态、观看人数控制

这是自己搭建直播服务器、开发直播平台系列的文章,前面两篇文章分别为: 通过Nginx-rtmp-module搭建直播服务器并实现直播 实现Nginx-rtmp-module多频道输入与权限控制 这篇文章是在上面多频道输入输出和权限控制的基础上进行的。 一、目标 1、实现直播状态的更改: (直播状态的更改主要是为了显示,在前端刷新列表的时候,用于判断那些直播间在直播,哪些不在。): ...

夜空中最亮的星 801

Nginx学习笔记(五):怎样使用HTTP配置(上)

前言 上一篇动手实践一下简单HTTP模块的开发,我们知道调用其模块需要先能够读取nginx.conf中的nginx.conf配置项。这篇学习笔记就是关于HTTP模块怎样获取感兴趣的配置项。 内容 处理HTTP配置项可以分为以下四个步骤: 创建数据结构用于存储配置项对应的参数;设定配置项在nginx.conf中出现时的限制条件与回调方法;实现2中的回调方法,或使用Nginx

时间文盲的记事板 1882

hook函数教程(一)什么是钩子

一、什么是钩子   我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽象的是他是用来钩Windows事件或者消息的。最常见的就是鼠标和键盘钩子,用Hook钩子钩住鼠标、键盘,当你的鼠标、键盘有任...

weixin_30360497的博客 2182

[微信小程序直播平台开发]___(三)Nginx-rtmp事件回调

1.一个可以忽略的前言 发起直播后可以在Nginx的自带的页面上查看到统计,那怎么知道发起了直播或者关闭了直播呢?我想到了这个统计页,于是查看一下里面的内容看看如何获取到的数据, 找到后发现是个xsl文件,莫非要写个读取该文件的代码?好吧这是下下策。其实,Nginx-rtmp-module配置文件里,就可以通过简单的配置回调URL来处理开启或关闭直播的业务。 2.编写回调处理接口 以下用到...

weixin_34240657的博客 644

Nginx学习与使用

Nginx (engine x) 是一个高性能的HTTP和**反向代理**web服务器,同时也提供了IMAP/POP3/SMTP服务,作为一款**轻量级**的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是**占有内存少**,**并发能力强**。

jc_hook的博客 1438

HttpRunner接口自动化框架Hook机制详解

httprunner 4.x可以支持hook机制,在发送请求前做一些预处理或在请求完成后后置处理 setup_hooks :主要用于处理接口的前置的准备工作,也可以对请求 request 参数签名加密等操作 teardown_hooks:主要用于后置清理工作,也可以对返回 respone 解密等操作

okcross0的博客 490

最详细整理,HttpRunner接口自动化框架Hook机制详解(详细)

httprunner 4.x可以支持hook机制,在发送请求前做一些预处理或在请求完成后后置处理setup_hooks :主要用于处理接口的前置的准备工作,也可以对请求 request 参数签名加密等操作teardown_hooks:主要用于后置清理工作,也可以对返回 respone 解密等操作测试步骤添加hook在项目根目录新建 debugtalk.py,名称一定要一样# debugtalk.py def hook_up() : print("前置操作:setup!

1574
上一篇: Nginx Rtmp Module Study 之基本数据结构ngx_module_t
下一篇: Nginx Rtmp Module - HLS切片和级联播放
bytedance-踏锋
博客等级 码龄15年 55粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值