Nginx Rtmp Learing 之HTTP HOOK回调

Nginx Rtmp Learing 之HTTP HOOK回调

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-modul...
    河自清阅读 11,442评论 2 9
  • 实时消息协议---流的分块 版权声明: 版权(c)2009 Adobe系统有限公司。全权所有。 摘要: 本备忘录描...
    一个人zy阅读 1,799评论 0 9
  • 知道吗 以前啊 我喜欢听人讲故事 后来 遇到你了 我喜欢给你讲故事 说那些奇怪的梦 说那种好笑的事 说的越来越多 ...
    wakaqp阅读 190评论 0 0
  • 金钱在我们一生中充当着重要的角色,有它可以做很多自己喜欢的事,没它却是愁白了头还不断掉头发。 一直觉得是自己的...
    桃红梨白阅读 246评论 0 0