从wireshark数据中分析rtmp协议,并提取出H264视频流
我写的小工具 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的两个例子。
原理如下:
- 利用wireshark抓取rtmp流数据, 分析到rtmp流后,写入过滤条件,如 tcp.stream eq 90
- 导出tcp流
- 保存16进制的数据为纯文本格式
一定要选择 Hex转储,然后点击 “Sava as”
注意,这个流开始的第一个字节一定是03,才是正确的。
至此,我们有了可以用于分析的rtmp流的数据。
wireshark保存出来的文件格式规则是
- client发给server端的数据是,每一行顶到头写的
- server发给client端的数据是,每一行开始空4个空格
我是基于这点来判断是谁发给谁的数据,从而进行分析的。
rtmp协议:
- 握手,C0,C1, C2 <-> s0,s1,s2。当客户端发送C2,就表示握手已经完成了
- 客户端发送 connect命令, 如下数据
- 从这儿之后,就可以分析服务器端发送过来的视频数据,首先是sps和pps
- 导出视频数据,下图就是I帧的数据
图中,09即表示是视频数据
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
/* 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当中导出的视频截图:
从wireshark数据中分析rtmp协议,并提取出H264视频流的更多相关文章
- 《Wireshark数据包分析实战》 - http背后,tcp/ip抓包分析
作为网络开发人员,使用fiddler无疑是最好的选择,方便易用功能强. 但是什么作为爱学习的同学,是不应该止步于http协议的,学习wireshark则可以满足这方面的需求.wireshark作为抓取 ...
- WireShark数据包分析数据封装
WireShark数据包分析数据封装 数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和尾中的过程.在OSI七层参考模型中,每层主要负责与其它机器上的对等层 ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- Wireshark数据包分析入门
Wireshark数据包分析(一)——使用入门 Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越 ...
- 调试libRTMP代码来分析RTMP协议
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写.该协议基于TCP,是一个协议族,常用在视频直播领域.RTMP协议的默认端口是1935. 学习一个协议 ...
- Wireshark数据包分析(一)——使用入门
Wireshark简介: Wireshark是一款最流行和强大的开源数据包抓包与分析工具,没有之一.在SecTools安全社区里颇受欢迎,曾一度超越Metasploit.Nessus.Aircrack ...
- wireshark数据包分析实战 第一章
1,数据包分析工具:tcpdump.wireshark.前者是命令行的,后者是图形界面的. 分析过程:收集数据.转换数据(二进制数据转换为可读形式).分析数据.tcpdump不提供分析数据,只将最原始 ...
- WireShark数据包分析一:认识WireShark
一.认识WireShark WireShark是一款抓包软件,官方网址:WireShark.org 官网如下图: 选择Download,在官网下载安装WireShark即可. WireShark可用来 ...
- h264 封装 RTMP中FLV数据的解析 rtmp协议简单解析以及用其发送h264的flv文件
一个完整的多媒体文件是由音频和视频2部分组成的.H264.Xvid等就是视频编码格式,MP3.AAC等就是音频编码格式.字幕文件只是其中附带部分. 把视频编码和音频编码打包成一个完整的多媒体文件,可以 ...
随机推荐
- JAVA,MYSQL,ORACLE的数据类型对比
MySQL Data Type Oracle Data Type Java BIGINT NUMBER(19, 0) java.lang.Long BIT RAW byte[] BLOB BLOB, ...
- vim编辑器最常用按键说明
n代表数字,words代表字符串 1.设置行号:输入 :set nu 2.跳到某行: 输入 nG. 首行1G,尾行G 3.向下删除连续的n行:先跳到要删除的某行,然后输入: ndd 4.向后删除某行的 ...
- VR虚拟现实眼镜那些事
今天是2014.3.20,笔者从oculus官网订了DK2(第二代开发版) 评测视频http://v.youku.com/v_show/id_XNjg3NTUzOTk2.html 想想从哪说起呢... ...
- CodeForces 484A Bits(水题)
A. Bits time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- 下载win7/win8/win10镜像
关于给电脑换系统,很多人会花钱去电脑店里换,或者是下载Ghost系统.但这些系统都不是微软原版的,制作者已经集成了很多常用软件或垃圾软件进去.我在这给大家介绍的是如何下载正版的Windows系统.这个 ...
- Finding Comments in Source Code Using Regular Expressions
Many text editors have advanced find (and replace) features. When I’m programming, I like to use an ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- 最优化理论-Simplex线性规划
Sorry,各位,现在这里面啥也没,之所以开这篇文章,是防止以后用得到:现在研究这些,总感觉有些不合适,本人还不到那个层次:如果之后有机会继续研究simplex-线性规划问题,再回来参考下面的链接进 ...
- visdom可视化pytorch训练过程
一.前言 在深度学习模型训练的过程中,常常需要实时监听并可视化一些数据,如损失值loss,正确率acc等.在Tensorflow中,最常使用的工具非Tensorboard莫属:在Pytorch中,也有 ...
- LOJ 2288「THUWC 2017」大葱的神力
LOJ 2288「THUWC 2017」大葱的神力 Link Solution 比较水的提交答案题了吧 第一个点爆搜 第二个点爆搜+剪枝,我的剪枝就是先算出 \(mx[i]\) 表示选取第 \(i \ ...