zoukankan      html  css  js  c++  java
  • RTMP协议抓包详解

    Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。 我们公司的平台都是采用的这个协议进行的音视频的播放

    RTMP协议是一个基于TCP的高层协议族(所以wireshark抓包的时候应该选择tcp进行抓包)

    在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message,为了区分它们肯定是要加一个Message  head的,所以RTMP协议也有一个Message head,还有一个问题因为RTMP协议是基于TCP的,由于TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,像一个视频帧的包可能会有几十甚至几千K,这个问题就必然有一个分片的问题,在RTMP协议中对应的说法就是chunk,每一个Message + head都是由一个和多个chunk组成的。让我们来结合实际例子来看一下 :9see

    这些都是头信息,是用来说明这断data从什么点开始播放用的真正的音视频播放在data里面

    粗略带过。现在从握手开始讲解

    握手流程:

    握手返回的签名

    客户和服务器通信

     

    依次解释一下

    574-发送 rtmp_connect 命令

    576 服务器返回服务器带宽信息,本地所需带宽信息,流开始标记,服务器返回连接成功消息 "NetConnection.Connect.Success"

    577 告诉服务器本带宽信息

    579 设置缓冲区

    578发送创建流请求

    581 服务器返回创建流成功

    584 发送播放文件消息 rtmp_play

    AUDIOdata 解析





    再来解释下一下这个09后面的27

    27(16)=0010 0111(2)

    解读就是

    0010

    0111 代表(7)也就是H.264  代表视频采用H.264编码  这个编码对应的自己查吧~~

    那么,

    问题1.音频是怎么跟视频对齐的呢?

    问题2. 如何根据这些数据来查我们视频的相关信息呢?

    RTMP的包头上有几个参数,

    timestamp delta 直译--数据轴三角洲   就是这段data 所播放的时间

    tunestamp 时间轴 

    视频数据                                                                                                                                               音频数据

                       

    再看看一个参数 body size =1221大小知道了,时间知道,所以码率就可以算出来了  

  • 相关阅读:
    Android成长之路-LayoutInflater和inflate的用法
    Android成长之路-实现简单动画
    Android成长之路-编码实现软件界面
    Android成长之路-手势库的创建
    Android成长之路-手势识别的实现
    Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
    android中文字中间有超链接的实现方法
    Arduino可穿戴教程ArduinoIDE新建编辑源文件
    FMDB使用SQLite事务Save Point
    FMDB使用Cached Statement功能
  • 原文地址:https://www.cnblogs.com/tester-huang/p/4632353.html
Copyright © 2011-2022 走看看