如果rtmp推流地址:
rtmp://服务器地址:rtmp端口/路径/名称
对应的websocket地址:
ws://服务器地址:websocket端口/路径/名称.flv
举例:
live作为路径,s作为流名称,rtmp端口是1932那么rtmp地址如下:
rtmp://127.0.0.1:1932/live/s
对应的websocket的地址:
ws://127.0.0.1:8000/live/s.flv
因为这里8000是websocket的端口
我用的是wireshark捕获的rtmp,
rtmp推流流程:
这里面wireshark判断当前协议是否是rtmp的标志是这个包里是否有Real Timing Message Control
Frame的开头是个网络类型(4byte),通过工具捕获到他的值是2,也就是family:ip,正常的TCP/IP协议
Internet Protocal Version:
这里面包含了帧长度,(帧长度+4byte=包的长度),还包含了,seq,ack,Win数据长度
通过跟踪发现: client向服务器推流到server,包括audio Data,和video Data:
format为1的时候,format为3的时候
客户端(client) Server(server)
msg:client->server
client :seq 17 Server:seq:1
server->client: 第一次握手
client->server:再握手
Server->client:第三次握手
client->Server:rtmp所谓real timing message control来握手
c->s: Handshake C0+C1
s->c:rely(指的是seq,ack的正常服务器应答)
c->s: Handshake S0+S1+S2
s->c:rely
c->s:Handshake:C2
s->c:rely
c->s:set chunk size 4096
s->c:rely
c->s:connect('live')
s->c:rely
c->s:Window Acknowledgement Size:5百万
s->c:rely
c->s:set peer bandwidth:5百万
s->c:rely
c->c:set chunk size 60000
s->c:rely
c->s:rely (只不过是 seq,ack交互,没有实体)
s->c:rely
c->s:releaseStream('1')
s->c:rely
c->s:FCPublish('1')
s->c:rely
c->s:createStream('1')
s->c:rely
c->s:_result()
s->c:rely
c->s:publish('1')
s->c:rely
c->s:onStatus('NetStream.Publish.Start')
s->c:rely
c->s:setDataFrame()
video:avc1 audio:mp4a
s->c:rely
c->s:Audio Data
s->c:rely
c->s:Video Data
VideoData:用的是h264的keyframe
Audio Data:用的是aac的keyframe

rtmp流程解析的更多相关文章

  1. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  2. SSL/TLS算法流程解析

    SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...

  3. TCP/IP协议三次握手与四次握手流程解析(转载及总结)

    原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式  TCP/IP协议的详 ...

  4. Django生命周期 URL ----> CBV 源码解析-------------- 及rest_framework APIView 源码流程解析

    一.一个请求来到Django 的生命周期   FBV 不讨论 CBV: 请求被代理转发到uwsgi: 开始Django的流程: 首先经过中间件process_request (session等) 然后 ...

  5. [MapReduce_3] MapReduce 程序运行流程解析

    0. 说明 Word Count 程序运行流程解析 &&  MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图

  6. HBase - 数据写入流程解析

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松 ...

  7. EurekaClient自动装配及启动流程解析

    在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类 ...

  8. Mysql流程解析

    Mysql流程解析 流程图 流程图解析 客户端发送一条sql语句. 1.此时,mysql会检查sql语句,查看是否命中缓存,如果命中缓存,直接返回结果,不继续执行.没有命中则进入解析器. 2.解析器会 ...

  9. Session (简介、、相关方法、流程解析、登录验证)

    Session简介 Session的由来 Cookie虽然在一定程度上解决了"保持状态"的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能 ...

  10. Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制

    一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ...

随机推荐

  1. Java类加载过程&&静态代码块的初始化过程

    问题的引入 还是老规矩,先说说自己遇到的问题. 最近看到了一个比较有意思的Java程序,初次看到这段程序执行的结果还是挺让我意外的,话不多说先上程序,大家也可以揣摩一下(大神自行略过......) c ...

  2. golang beego 使用supervisor 部署后台进程管理. 静态文件找不到的解决办法.

    directory=/root/go/src/you_self_dir 请在客户端配置文件*.ini中加入一行命令, 等于号后面就是自己的项目目录,这时就能找到项目文件了.

  3. c#动态执行脚本的3种方式详解

    1.使用Roslyn编译器 2.使用IronPython或IronRuby 3.使用JavaScript引擎 在C#中,可以使用一些第三方库或内置类库实现动态执行脚本的功能.以下是几个常用的方案: 1 ...

  4. Nacos 源码环境搭建

    最近在学习nacos,通过调式源码查看服务注册和发现流程和原理,本地部署naos源码需要一定的步骤,本文主要做nacos源码部署. nacos版本:2.1.1 下载源码 从github上下载源码到本地 ...

  5. css3 浏览器前缀 线型渐变 过渡属性

    css3:没有形成正式版 每个浏览器商,为了能对css3属性形成一个更好的支持,浏览器形成自己一套语法规范,一些css属性,如果想在浏览器上形成支持,有时候需要添加浏览器前缀 谷歌前缀:-webkit ...

  6. 你知道键盘是如何工作的吗?(xv6键盘驱动程序)

    键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ...

  7. win10无线网卡不会自动连接

    usb接口的网卡.win10无线网卡不会自动连接. 解决方法: 第一步:在控制面板\网络和 Internet\网络连接中,禁用再启用一次无线网络. 第二步:在 控制面板\硬件和声音\电源选项\选择电源 ...

  8. 2 分钟,搞懂 SLO 最佳实践

    本文是<SRE,Google运维解密>读书笔记,连载第三篇.微信公众号修改了推文逻辑,尤其是 iOS,建议对本公众号 SRETalk 加星标,以免错过后续系列推文. 本文介绍 SLO,曾经 ...

  9. work08

    day09作业: 必做题:========================================第一题: 1.定义一个Animal类,包含如下行为: eat() 打印"要吃饭&qu ...

  10. format( )函数

    在Python中,DETAIL_URL.format(id=id) 是一个字符串格式化的表达式.它通常用于根据一个已定义的字符串模板 DETAIL_URL 来生成一个新的字符串.在这个模板中,会包含一 ...