我写的小工具 rtmp_parse.exe
使用用法如先介绍下:

-sps  [文件路径] 解析 sps 数据 文件当中的内容就是纯方本的hexstring: 如 42 E0 33 8D 68 05 00 5B A1 00 00 03 00 ……
-pps  [文件路径] 解析 pps 数据 文件格式同上
-rtmp [文件路径] 解析并保存h264视频流数据(从wireshark抓出来的hexstring)

下载地址:

链接:https://pan.baidu.com/s/1RhRKoNqTPHLj4mrpryunDQ 密码:v7lb

解压密码:rtmp

下载包当中包含了我抓取的wireshark的两个例子。


原理如下:

  1. 利用wireshark抓取rtmp流数据, 分析到rtmp流后,写入过滤条件,如 tcp.stream eq 90

  2. 导出tcp流

  3. 保存16进制的数据为纯文本格式


    一定要选择 Hex转储,然后点击 “Sava as”
    注意,这个流开始的第一个字节一定是03,才是正确的。
    至此,我们有了可以用于分析的rtmp流的数据。

wireshark保存出来的文件格式规则是

  1. client发给server端的数据是,每一行顶到头写的
  2. server发给client端的数据是,每一行开始空4个空格

我是基于这点来判断是谁发给谁的数据,从而进行分析的。


rtmp协议:

    1. 握手,C0,C1, C2 <-> s0,s1,s2。当客户端发送C2,就表示握手已经完成了
    2. 客户端发送 connect命令, 如下数据

    3. 从这儿之后,就可以分析服务器端发送过来的视频数据,首先是sps和pps

    4. 07 00 00 00 00 00 2C 09 01 00 00 00 17

      00

      00 00 00 01  => nal头

      42 E0 33 FF E1 00 18 27 42 E0 33 8D 68 05 00 5B => sps

      A1 00 00 03 00 01 00 00 03 00 3C 0F 10 7A 80

      01

      00 04  => pps len

      28 CE 32 48 => pps

      解析 sps 数据,我得到详细的结构数据如下:

      profile_idc: 66

      constraint_set0_flag: 1

      constraint_set1_flag: 1

      constraint_set2_flag: 1

      constraint_set3_flag: 0

      constraint_set4_flag: 0

      constraint_set5_flag: 0

      reserved_zero_2bits: 0

      level_idc: 51

      seq_parameter_set_id: 0

      chroma_format_idc: 1

      residual_colour_transform_flag: 0

      bit_depth_luma_minus8: 0

      bit_depth_chroma_minus8: 0

      qpprime_y_zero_transform_bypass_flag: 0

      seq_scaling_matrix_present_flag: 0

      log2_max_frame_num_minus4: 12

      pic_order_cnt_type: 2

      log2_max_pic_order_cnt_lsb_minus4: 0

      delta_pic_order_always_zero_flag: 0

      offset_for_non_ref_pic: 0

      offset_for_top_to_bottom_field: 0

      num_ref_frames_in_pic_order_cnt_cycle: 0

      num_ref_frames: 1

      gaps_in_frame_num_value_allowed_flag: 0

      pic_width_in_mbs_minus1: 79

      pic_height_in_map_units_minus1: 44

      frame_mbs_only_flag: 1

      mb_adaptive_frame_field_flag: 0

      direct_8x8_inference_flag: 1

      frame_cropping_flag: 0

      frame_crop_left_offset: 0

      frame_crop_right_offset: 0

      frame_crop_top_offset: 0

      frame_crop_bottom_offset: 0

      vui_parameters_present_flag: 1

      vui.aspect_ratio_info_present_flag: 0

      vui.aspect_ratio_idc: 0

      vui.sar_width: 0

      vui.sar_height: 0

      vui.overscan_info_present_flag: 0

      vui.overscan_appropriate_flag: 0

      vui.video_signal_type_present_flag: 0

      vui.video_format: 0

      vui.video_full_range_flag: 0

      vui.colour_description_present_flag: 0

      vui.colour_primaries: 0

      vui.transfer_characteristics: 0

      vui.matrix_coefficients: 0

      vui.chroma_loc_info_present_flag: 0

      vui.chroma_sample_loc_type_top_field: 0

      vui.chroma_sample_loc_type_bottom_field: 0

      vui.timing_info_present_flag: 1

      vui.num_units_in_tick: 768

      vui.time_scale: 16777219

      vui.fixed_frame_rate_flag: 0

      vui.nal_hrd_parameters_present_flag: 0

      vui.vcl_hrd_parameters_present_flag: 0

      vui.low_delay_hrd_flag: 0

      vui.pic_struct_present_flag: 0

      vui.bitstream_restriction_flag: 0

      vui.motion_vectors_over_pic_boundaries_flag: 0

      vui.max_bytes_per_pic_denom: 0

      vui.max_bits_per_mb_denom: 0

      vui.log2_max_mv_length_horizontal: 0

      vui.log2_max_mv_length_vertical: 0

      vui.num_reorder_frames: 0

      vui.max_dec_frame_buffering: 0

      hrd_nal.cpb_cnt_minus1: 0

      hrd_nal.bit_rate_scale: 0

      hrd_nal.cpb_size_scale: 0

      hrd_nal.initial_cpb_removal_delay_length_minus1: 0

      hrd_nal.cpb_removal_delay_length_minus1: 0

      hrd_nal.dpb_output_delay_length_minus1: 0

      hrd_nal.time_offset_length: 0

      hrd_vcl.cpb_cnt_minus1: 0

      hrd_vcl.bit_rate_scale: 0

      hrd_vcl.cpb_size_scale: 0

      hrd_vcl.initial_cpb_removal_delay_length_minus1: 0

      hrd_vcl.cpb_removal_delay_length_minus1: 0

      hrd_vcl.dpb_output_delay_length_minus1: 0

      hrd_vcl.time_offset_length: 0

      解析 pps 得到如下结构数据:

      pic_parameter_set_id: 4

      seq_parameter_set_id: 11

      entropy_coding_mode_flag: 1

      pic_order_present_flag: 1

      num_slice_groups_minus1: 0

      slice_group_map_type: 0

      slice_group_change_direction_flag: 0

      slice_group_change_rate_minus1: 0

      pic_size_in_map_units_minus1: 0

      num_ref_idx_l0_active_minus1: 11

      num_ref_idx_l1_active_minus1: 0

      weighted_pred_flag: 0

      weighted_bipred_idc: 1

      pic_init_qp_minus26: 2

      pic_init_qs_minus26: 0

      chroma_qp_index_offset: 0

      deblocking_filter_control_present_flag: 0

      constrained_intra_pred_flag: 0

      redundant_pic_cnt_present_flag: 0

      _more_rbsp_data_present: 0

      transform_8x8_mode_flag: 0

      pic_scaling_matrix_present_flag: 0

      second_chroma_qp_index_offset: 0

    5. 导出视频数据,下图就是I帧的数据


      图中,09即表示是视频数据

    6. /*      RTMP_PACKET_TYPE_...                0x00 */
      #define RTMP_PACKET_TYPE_CHUNK_SIZE         0x01
      /*      RTMP_PACKET_TYPE_...                0x02 */
      #define RTMP_PACKET_TYPE_BYTES_READ_REPORT  0x03
      #define RTMP_PACKET_TYPE_CONTROL            0x04
      #define RTMP_PACKET_TYPE_SERVER_BW          0x05
      #define RTMP_PACKET_TYPE_CLIENT_BW          0x06
      /*      RTMP_PACKET_TYPE_...                0x07 */
      #define RTMP_PACKET_TYPE_AUDIO              0x08
      #define RTMP_PACKET_TYPE_VIDEO              0x09
      /*      RTMP_PACKET_TYPE_...                0x0A */
      /*      RTMP_PACKET_TYPE_...                0x0B */
      /*      RTMP_PACKET_TYPE_...                0x0C */
      /*      RTMP_PACKET_TYPE_...                0x0D */
      /*      RTMP_PACKET_TYPE_...                0x0E */
      #define RTMP_PACKET_TYPE_FLEX_STREAM_SEND   0x0F
      #define RTMP_PACKET_TYPE_FLEX_SHARED_OBJECT 0x10
      #define RTMP_PACKET_TYPE_FLEX_MESSAGE       0x11
      #define RTMP_PACKET_TYPE_INFO               0x12
      #define RTMP_PACKET_TYPE_SHARED_OBJECT      0x13
      #define RTMP_PACKET_TYPE_INVOKE             0x14
      /*      RTMP_PACKET_TYPE_...                0x15 */
      #define RTMP_PACKET_TYPE_FLASH_VIDEO        0x16


最后看一下,从wireshark当中导出的视频截图:

Technorati Tags: rtmp,sps,pps,wireshark,h264

从wireshark数据中分析rtmp协议,并提取出H264视频流的更多相关文章

  1. 《Wireshark数据包分析实战》 - http背后,tcp/ip抓包分析

    作为网络开发人员,使用fiddler无疑是最好的选择,方便易用功能强. 但是什么作为爱学习的同学,是不应该止步于http协议的,学习wireshark则可以满足这方面的需求.wireshark作为抓取 ...

  2. WireShark数据包分析数据封装

    WireShark数据包分析数据封装 数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程.在OSI七层参考模型中,每层主要负责与其它机器上的对等层 ...

  3. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

  4. Wireshark数据包分析入门

    Wireshark数据包分析(一)——使用入门   Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越 ...

  5. 调试libRTMP代码来分析RTMP协议

    RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,常用在视频直播领域.RTMP协议的默认端口是1935. 学习一个协议 ...

  6. Wireshark数据包分析(一)——使用入门

    Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越Metasploit.Nessus.Aircrack ...

  7. wireshark数据包分析实战 第一章

    1,数据包分析工具:tcpdump.wireshark.前者是命令行的,后者是图形界面的. 分析过程:收集数据.转换数据(二进制数据转换为可读形式).分析数据.tcpdump不提供分析数据,只将最原始 ...

  8. WireShark数据包分析一:认识WireShark

    一.认识WireShark WireShark是一款抓包软件,官方网址:WireShark.org 官网如下图: 选择Download,在官网下载安装WireShark即可. WireShark可用来 ...

  9. h264 封装 RTMP中FLV数据的解析 rtmp协议简单解析以及用其发送h264的flv文件

    一个完整的多媒体文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式.字幕文件只是其中附带部分. 把视频编码和音频编码打包成一个完整的多媒体文件,可以 ...

随机推荐

  1. snmp++开发实例一

    1.官网下载 snmp开发,首先需要机器已经安装了snmp服务,这方面的资料网上比较完备,安装的时候注意每少一个文件,网上都可以下载到,这样可以自己形成一个包,供以后使用.只要最后snmp的服务开启就 ...

  2. 云-资讯-Micron-Insight:云的形成方式 — 以及它的发展方向

    ylbtech-云-资讯-Micron-Insight:云的形成方式 — 以及它的发展方向 1.返回顶部 1. 云的形成方式 — 以及它的发展方向 当你坐下来开始一天工作的时候,你可能不会考虑到你所做 ...

  3. i2c-tools的使用方法及举例

    i2c-tools的使用方法 最近在调试ADV7401,调试的过程难免要反复修改寄存器,然后看结果现象.传统的做法是修改驱动代码寄存器值->编译->下载->运行->看结果,这一 ...

  4. css3中变形处理

    transfrom功能 在css3 中可以使用transfrom功能实现文字或图像的旋转,缩放,倾斜,移动等变形处理 deg是css3中使用的一种角度单位. 旋转: 使用rotate方法,在参数中加入 ...

  5. [原创]Devexpress XtraReports 系列 1 创建静态报表

    在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...

  6. ubuntu下终于安装好了nvidia的gt540显卡驱动

    ubuntu下终于安装好了nvidia的gt540显卡驱动.估计好多童鞋怕麻烦都放弃安装了哈. 先看看效果. ~$ lspci |grep -i vga :) :00.0 VGA compatible ...

  7. VNC协议分析

    VNC协议分析 摘自: http://blog.csdn.net/forever_feng/article/details/4703088 简介 VNC(Virtual Network Computi ...

  8. 怎么查看linux系统是32还是64

    1.getconf LONG_BIT or getconf WORD_BIT例如:2.file /bin/ls例如: 查看linux的版本:

  9. UVaLive 4256 Salesmen (简单DP)

    题意:给一个无向连通图,和一个序列,修改尽量少的数,使得相邻两个数要么相等,要么相邻. 析:dp[i][j] 表示第 i 个数改成 j 时满足条件.然后就很容易了. 代码如下: #pragma com ...

  10. HDU - 6112 2017百度之星初赛A 今夕何夕

    今夕何夕  Accepts: 1345  Submissions: 5533  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768/ ...