我们的流媒体服务器可以输出三种格式的视频流,Http-Flv 就是 http+flv ,将音视频数据封装成FLV格式,然后通过 HTTP 协议传输给客户端。相较于 RTMP 协议,HTTP-FLV 能够好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。那么本篇的问题就来了,http-flv是如何直播的?

这里我们主要研究HTTP-FLV和HLS。主流的几个web直播平台几乎都是以HTTP-FLV为主来直播的,首先我们都知道在媒体格式里,几乎都以H264视频编码为主。如今HTTP-FLV直播的FLV数据也都是H264&AAC为主的。FLV封装单元是以tag来表示的,一个tag可以是音频tag或者视频tag,或者脚本tag及其其他类型。

值得注意的是flv里面字节序是网络字节序:

flv的格式

1 flvheader+[脚本tag(metadata)]+[第一个视频tag(h264_spspps)]+[第一个音频tag(aac_header)]+[第二个视频tag(h264第一个关键帧)]+ 后面就是音频和视频tag交互存在

tag的格式

1 TYPE[1byte] + body size[3byte] + timestamp [4byte] +streamID [3byte] +[body data]+[previousTagSize 4byte]

这里的timestamp是这样存在的[ time tamp 3b,time tamp ex 1b]

h264视频tagbody

这里存储的h264是没有nal分割符的,在t的body里面是这样存储的,

[isKeyFrame(1byte)]+0x01+[compositionTime 3byte]+[h264 size 4byte]

compositionTime是h264编码结果dts和pts之间的偏移。
aac视频tag的body

0xaf+0x01+aac raw

以上就是flv格式的详细说明,可以看出格式简单,封装的前后数据关联很小,当我们得到音频头和视频头,就可以从后面任意的一个关键帧开始播放。

当然想要HTTP-FLV正常播放,不能缺少matedata,就是第一个脚本tag里面,这里面指定了分辨率,音视频编码格式等。

HTTP-FLV直播实际上单纯就是往客户端发送flvtag,当然是先发送flv前面那几个关键的tag,然后第一帧是关键帧。

假如客户端是obs推流软件,以rtmp方式向服务器推流,在开始握手及其创建stream完成以及发送Metadata完成,及其一系列数据发送完毕,服务器就向obs发送publish result指令,此后,obs就开始向服务器推送flv tag数据,开始直播,而服务器也得到了flv数据。

当某个客户端想要来获取直播数据,比如httpflv的方式来观看直播,服务器会怎么做呢?

服务器会先发送前面几个flvtag,header+metadata+spspps+aacheader,当这几个tag发送完毕,服务器会从直播流tag中,找到最新的视频关键帧tag,从这个关键帧tag开发数据,为什么呢?因为视频流是IBP帧相互存在的,I是完整数据,BP解码都需要I帧和前面的帧,所以,正常视频数据,必须是从I帧开始发送的。这里就涉及到gop间距了,rtmp低延时秒开就是这个原理。当然发送的时候,每个连接的tag开始时间戳要从0开始递增的。

至此,http-flv客户端就可以接收到flv流数据,解码观看直播了。

视频直播流媒体服务器的http-flv是如何直播的?相关推荐

  1. 树莓派使用nginx+rtmp搭建音频直播流媒体服务器

    前言 想使用树莓派连接usb音频采集卡实时采集收音机接收到的音频,树莓派上运行着由nginx+RTMP 搭建的直播流媒体服务器,这样就可以在客户端上通过支持rtmp串流协议的播放器就可以正常接收到音频 ...

  2. 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享

    开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...

  3. 搭建流媒体服务器,完成属于自己的直播服务

    搭建的原因 最近工作需要与异地工作的同事讨论问题,需求是能看到同事的画面和电脑桌面屏幕和还有声音.所以需要搭建一台流媒体服务器,现在很火的直播一般都是用RTSP和RTMP,做点播用HTTP.做视频会议 ...

  4. NDK 直播流媒体服务器搭建

    该文章首发于微信公众号"字节流动". 本博客 NDK 开发系列文章: NDK 编译的三种方式 NDK 开发中引入第三方静态库和动态库 NDK 开发中 Native 与 Java 交 ...

  5. 安防视频流媒体服务器Easy NVR搭建之DASH直播平台的搭建需要具备哪些条件?

    当前,全球各大视频网站均在抛弃陈旧的Flash播放技术,转而向Dash这种新型的流媒体传输方式靠拢.比如,Youtube,Hulu,Twitch,Netflix,Xvideos,PornHub,xHa ...

  6. srs流媒体服务器windows_基于SRS构建的直播平台的监控系统的搭建思路与实现方法...

    市面直播平台百家争鸣,直播监控系统是判断一个直播平台是否完善的必要条件.文章简要介绍了笔者搭建的一套基于SRS的直播平台,并从设计思路.实现方法与实现过程等方面重点介绍了针对此直播平台建设的监控系统, ...

  7. HLS流媒体服务器对性能要求,搭建hls直播流媒体服务器有什么要求?

    HLS的基本原理是,当视频流被推送到流媒体服务器时,服务器将接收到的流信息打包成一个全新的TS文件,即切片文件(三块),服务器建立一个m3u8索引文件来维护全新TS段的索引.当播放机获得直播时,从m3 ...

  8. RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR证书配置页面按钮无法正常打开和关闭的问题解析

    进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择. 安防视频流媒体服务器EasyNVR ...

  9. EasyNVR无插件直播流媒体服务器云端集中管控的EasyNVS云管理平台安装使用文档

    EasyNVS - EasyNVR云端集中管理服务 EasyNVS云管理平台是一套专门用于集中化管理EasyNVR 的解决方案. EasyNVR 采用主动注册的方式接入到 EasyNVS, 再由 Ea ...

最新文章

  1. [转]推荐国外SQL Server学习网站
  2. elastic ik分词搜索_php环境下使用elasticSearch+ik分词器进行全文搜索
  3. 发现四川科技馆在线网站修改用户设置页面的一个问题
  4. 12日直播预告丨MySQL故障诊断常用方法手册
  5. C# WinForm登录窗口代码
  6. php废物,PHP的垃圾回收机制以及大概实现
  7. mysql数据库调优知识复习
  8. .Net之Layui多图片上传
  9. sqlplus连接mysql_sqlplus 命令连接数据库
  10. iOS商户进件之【营业执照编号校验】18位社会信用代码验证 unified social credit identifier
  11. 超市微信小程序怎么做_小程序怎么做的 超市微信小程序怎么做
  12. bandizip修改压缩文件内容_BandiZip解压添加压缩文件教程
  13. AntV G6 自定义节点图形
  14. 阿里云储道深度解析存储系统设计——NVMe SSD性能影响因素一探究竟
  15. linux串口工具 kermit,ubuntu串口工具(minicom、kermit)的使用
  16. 联想笔记本修复计算机还原系统失败,联想电脑重置电脑失败怎么办
  17. android 视频剪辑工具,微剪辑视频剪辑工具
  18. K12在线教育持续升温,教育需线上线下相结合!
  19. 初识Git与GitHub和使用案例
  20. CentOS 与 Ubuntu:哪个更适合做服务器

热门文章

  1. python跨年表白神器--你值得拥有!
  2. 什么是 DNS? | DNS 的工作方式
  3. 16路彩灯控制器 FPGA-Verilog
  4. 【简写】编程领域简写
  5. 设置透明色有残留怎么办_AE崩溃了怎么办?这可能是最全面的解决办法了!
  6. 多元函数带 Peano余项的Taylor公式的推广 (原创)
  7. mysql的mtr是指什么_关于innodb mtr模块
  8. PKCS1_SignatureScheme_PSS
  9. VC++ 操作 word
  10. 使用ALLpairs完成正交表测试法练习题