HTTP FLV交互流程及实例解析

文章目录

  • HTTP FLV交互流程及实例解析
    • HTTP FLV传输方式
    • HTTP FLV 抓包分析
    • 结束语

HTTP FLV传输方式

前文已经介绍过,HTTP FLV利用了一个HTTP的协议约定,http 的content-length头字段如果不存在,则客户端就会一直接收数据,直到HTTP连接断开为止,HTTP FLV传输流程是视频客户端发送HTTP请求,不带content-length头字段,服务器响应HTTP,并一直发送FLV的数据;客户端接收响应并一直接收数据直到连接断开。HTTP FLV一般采用分块的传输方式,分块的格式如下:

  • chunk分块包含长度头和数据体,长度头和数据体都以0x0d0a换行符为结尾标志
  • 长度头的值是以16进制的ASCII值表示,以0x0d0a为结尾,比如31 35 30 0d 0a ascii为31、35、30的字符分别为’1’、‘5’、‘0’,因此表示数据体的长度为0x150,这里要注意是十六进制表示,其十进制为336
  • 消息体紧跟在长度头后,以0x0d0a为结尾,这里注意长度头所表示的长度不包含0x0d0a
  • 最后一个块用长度为0的块来表示,即为:30 0d 0a

HTTP FLV 抓包分析

样例数据包,是通过wireshark抓取的HTTP FLV拉流的数据包,我也放到网盘里了,可关注公众号:壹零仓,发送:视频流分析,获取,数据包总览如下:

  • 首先建立TCP连接
  • 视频客户端发送HTTP Get请求,获取FLV数据,请求如下:
GET /flv?port=1935&app=live&stream=test HTTP/1.1
Host: 10.45.12.29
Accept: */*
Accept-Language: zh_CN
User-Agent: VLC/3.0.18 LibVLC/3.0.18
Range: bytes=0-

资源标识flv,rtmp推送端口为1935,应用名为live标识直播,流标识为test,这里没有content-length,标识一直接收数据,Rang字段直播时从0开始,一直播放,如果时点播,可通过rang来制定字节偏移和长度,服务器收到rang后,需要校验rang的合法性

  • 服务器端响应包含HTTP响应头和FLV的数据,音视频数据会携带在响应消息体里,这里无content-length,标识消息体不定长,客户端需要一直接收

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7oGYWcZ-1673946539319)(https://gitee.com/wangdenuan/picstorage/raw/master/images/20230112153318.png)]
这里要注意响应头字段中的Transfer-Encoding:chunked 标识分块传输

  • 响应消息体为FLV数据,分块传输的方式,实例如下:

flv传输音视频第一包为flv header,其结构如下:

对照抓包数据可以解析出,chunk长度为0x0d=13,签名为"FLV",版本为0x01,typeflagsaudio=0x05>>2&0x01=1,typeflagsvideo=0x05&0x01=1,说明flv包含音频和视频,dataoffset固定为0x00000009,chunk数据块最后还包含四个字节,是表示PreviousTagSize,分块的传输一个tag的前面四个字节需要带上上一个tag的大小,一般放到上一个分块数据的末尾,这样每次解析完一个tag后,就可以知道本tag的大小,flv body格式如下

第一个tag的PreviousTagSize=0,这里放到第一个分块数据的末尾了,就是在flv header数据之后的四个字节,赋值为0x00000000.

  • flv tag包含音频tag和视频tag,视频tag我们在rtmp中已经详细介绍了,这里介绍下音频tag,其格式如下图:
    tag header

    Audio tags

实例数据如下:

  • 0x313530,表示块长度为0x150=336
  • 0x08,tagtype=8,表示tag为音频tag
  • 0x000141,tagbody大小,换算成十进制等于321
  • 0x00000000,表示timestamp为0,扩展时间戳也为0
  • 0x00000000,表示streamid=0,后面为audiodata数据
  • 0x72,soudfomart为高四位,等于7表示G711编码,soundrate为第三第四位,值为0表示5.5khz,soudsize为第二位,值为1,表示采样精度是16位,soundsize为第一位,值为0表示单通道,之后接入的数据为音频数据。

video tag的格式:

有关详细说明,可关注公众号:壹零仓,发送rtmp,查看文章《RTMP封装H264和H265协议详解》
有关video tag的实例数据如下:

前面文章已做了详细介绍,这里不做详细解析了

结束语

HTTP FLV传输相比于fmp4协议传输,是非常简单,既保证了实时性,又具有HTTP网络的适应性,当前很多直播和交互直播领域广泛应用,具体代码如何实现,可参照ffmpeg源码

HTTP FLV交互流程及实例解析相关推荐

  1. IEC104 规约详细解读(二)交互流程以及协议解析

    流程 第一步:首次握手(U帧) 发送―>激活传输启动 : 68(启动符)04(长度)07(控制域) 00 00 00 接收―>确认激活传输启动: 68(启动符)04(长度)0B(控制域) ...

  2. python与c 交互原理_PYTHON 与C相互交互调用实例解析

    PYTHON与C相互交互调用实例解析 使用前工具: Vc++编译器 Python解释器 如没有装VC,可以去微软网站下一个C++的编译器,地址如下: 装完后,在环境变量中把PYTHON的INCLUDE ...

  3. Redis源码剖析(一)服务器与客户端交互流程

    Redis中的C/S模型 Redis底层还是基于网络请求的,对于单机数据库而言,网络请求仅仅是在一台机器上交互,即服务器客户端都在一台计算机上 当在终端输入redis-serve时,便启动了一个Red ...

  4. 深入浅出 Redis client/server交互流程

    2019独角兽企业重金招聘Python工程师标准>>> 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文 ...

  5. Reactor实例解析

    \ 要点 \\ Reactor是一个运行在Java8之上的响应式流框架,它提供了一组响应式风格的API\\t 除了个别API上的区别,它的原理跟RxJava很相似\\t 它是第四代响应式框架,支持操作 ...

  6. 实例解析linux内核I2C体系结构

    实例解析linux内核I2C体系结构 一.概述 谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完 ...

  7. adaboost算法java_Adaboost 算法实例解析

    Adaboost 算法实例解析 1 Adaboost的原理 1.1 Adaboost基本介绍 AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由 ...

  8. SoapUI简介和入门实例解析

    SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Ecl ...

  9. Android开发之IPC进程间通信-AIDL介绍及实例解析

    一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...

最新文章

  1. 《mysql性能调优与架构设计》笔记: 一mysql 架构组成
  2. 怎么把加载图标去掉_怎样在PCB上绘制图标
  3. php7和python3性能对比-为什么PHP7执行这个简单循环比Python3快得多?
  4. Conan and Agasa play a Card Game
  5. 如何解决 SQL Server 安装程序中的 COM+ 系统配置检查失败问题
  6. SpringBoot+Shiro学习(四):Realm授权
  7. ssl初一组周六模拟赛【2018.3.24】
  8. Unity脚本生命周期与执行顺序
  9. java将图片转byte存入数据库_Java将byte[]转图片存储到本地的案例
  10. LSI加入多核联盟参与编程与应用标准制定
  11. Android软键盘问题
  12. nod32 升级方法
  13. 罗马数字转换python_阿拉伯数字转换成罗马数字
  14. 微软招 HR 了!看来是招聘需求太旺盛,忙不过来了
  15. 台式机U盘安装Centos 安装界面黑屏并且没有网卡驱动
  16. display 常用属性
  17. 「cocos2d-x」垂直射击游戏之宇智波鼬 VS 九尾狐(1)
  18. arcmap fishnet 经纬度
  19. 宏观低速物理 '牛顿篇'
  20. 要闻君说:小米9已确认无线充电;华为着手操作的5G火车站启动建设仪式将于本月18日“登陆”;三星提出大力发展电信网络设备业务……...

热门文章

  1. 快收藏!高手Linux运维管理必备工具大全,你会吗?
  2. 还叫 “不可成药” 靶点?KRAS 已逆袭!- MedChemExpress
  3. U盘无法格式化怎么办?!
  4. Impact 主题(一):安装与启动
  5. 微信打不开怎么回事?分享解决办法
  6. MySQL 语句大全
  7. XDRamD工具 windows 7-10-11系统苹果绕过激活锁ID界面 新工具,屏幕锁界面打电话,苹果X 16系统也支持,
  8. Synchro plus SimTraffic 11.0.140.0中文版
  9. STM32 USB 虚拟串口 Virtual COM Port
  10. AutoJs学习-文字转语音QQ发送