• 无插件播放之http-flv


    概述

    之前网页播放器传统的方式都是通过activeOCX的方式,优点是延时低,缺点就是需要手动安装,有时候还会因客户的电脑浏览器版本,出现各种各样的安装问题,很麻烦。近几年,H5无插件播放技术越来越流行,延时也能跟activeOcx媲美了,就使得传统的插件方式播放有点儿落伍啦!网上开源的无插件播放有很多,http-flv,ws-flv,rtmp(谷歌禁止flash了,但有人仍然可以转码播放),hls,webrtc(延时可以做到很低,没玩过)大概这几种

    http-flv

    FLV (Flash Video) 是 Adobe 公司推出的另一种视频格式,是一种在网络上传输的流媒体数据存储容器格式。其格式相对简单轻量,不需要很大的媒体头部信息。整个FLV由 The FLV Header, The FLV Body 以及其它 Tag 组成。因此加载速度极快。采用 FLV 格式封装的文件后缀为 .flv。而HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。

    HTTP协议中有个约定:content-length字段,http的body部分的长度服务器回复http请求的时候如果有这个字段,客户端就接收这个长度的数据然后就认为数据传输完成了,如果服务器回复http请求中没有这个字段,客户端就一直接收数据,直到服务器跟客户端的socket连接断开。
    http-flv直播就是利用第二个原理,服务器回复客户端请求的时候不加content-length字段,在回复了http内容之后,紧接着发送flv数据,客户端就一直接收数据了。

    在这里插入图片描述
    1)优点
    HTTP-FLV 依靠 MIME 的特性,根据协议中的 Content-Type 来选择相应的程序去处理相应的内容,使得流媒体可以通过 HTTP 传输。相较于 RTMP 协议,HTTP-FLV 能够较好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。除此之外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端。

    (2)缺点
    由于HTTP-FLV的传输特性,会让流媒体资源缓存在本地客户端,在保密性

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

    http-flv到底是怎么直播

    首先我们都知道在媒体格式里,几乎都以h264视频编码。如今httpflv直播的flv数据也都是h264&aac为主的。flv封装单元是以tag来表示的,一个tag可以是音频tag或者视频tag,或者脚本tag及其其他类型。
    值得注意的是flv里面字节序是网络字节序

    flv的格式:

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

    tag的格式:

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

    这里的timestamp是这样存在的[ time tamp 3b,time tamp ex 1b]
    h264视频tagbody:
    这里存储的h264是没有nal分割符的,在t的body里面是这样存储的,

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

    compositionTime是h264编码结果dts和pts之间的偏移。

    aac视频tag的body:

    1	0xaf+0x01+aac raw
    
    • 1

    以上就是flv格式的详细说明,可以看出格式简单,封装的前后数据关联很小,当我们得到音频头和视频头,就可以从后面任意的一个关键帧开始播放。
    当然想要httpflv正常播放,不能缺少matedata,就是第一个脚本tag里面,这里面指定了分辨率,音视频编码格式等。
     httpflv直播实际上单纯就是往客户端发送flvtag,当然是先发送flv前面那几个关键的tag,然后第一帧是关键帧。

  • 相关阅读:
    TDengine 3.0 重磅发布,首届开发者大会圆满结束
    Java学习02——关键字、字面量、变量
    极坐标转化
    srs流媒体服务器推流的流程
    【无标题】
    模板 template<typename T> 和 template<class T>区别
    设计模式介绍
    杰理之内置关机电流 1.2uA,之后不能长按开机【篇】
    优思学院|什么是精益生产管理?从一个生活上的故事出发来说明。
    springboot10:web开发常用功能(拦截器,文件上传,异常处理)
  • 原文地址:https://blog.csdn.net/u010868213/article/details/126068632