无插件播放之http-flv-程序员宅基地

技术标签: 网络  http  服务器  

概述

之前网页播放器传统的方式都是通过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]

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交互存在

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里面是这样存储的,

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

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

aac视频tag的body:

1	0xaf+0x01+aac raw

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010868213/article/details/126068632

智能推荐

前端状态机系列:SCXML与XState对应关系_scxml 前后端实现-程序员宅基地

文章浏览阅读495次。1. 前置说明这次再说明下自己对状态图的看法。状态图虽然有非常多的优势(参考上篇文章),如果你想使用,关于是否对整个旧项目进行全量状态图化,这里给一个适应范围是:项目中复杂的部分进行状态图建模是非常合适的。如果你有精力是可以尝试对整个项目进行状态图化的。1.1 状态图再回顾一下什么是状态图。状态图的前身是状态机(FSM),FSM 使用过程中会暴露一些问题,如:状态爆炸层次表达能力弱项目复杂起来,到后期 FSM 会很难维护。针对这些问题,计算机科学家 David Harel 在 1984._scxml 前后端实现

强化学习与计算机视觉:提升图像识别与分类能力-程序员宅基地

文章浏览阅读899次,点赞25次,收藏19次。1.背景介绍计算机视觉和强化学习分别是人工智能领域的两个重要分支。计算机视觉主要关注计算机对图像和视频的理解和处理,强化学习则关注智能体在环境中采取行动以获得最大化奖励的过程。近年来,随着深度学习技术的发展,计算机视觉和强化学习的研究取得了显著进展。本文将探讨如何将强化学习与计算机视觉结合,以提升图像识别和分类能力。2.核心概念与联系2.1计算机视觉计算机视觉是计算机对图像和视频进..._强化学习计算机视觉

【HTML 教程系列第 13 篇】HTML 中的超链接标签 a,看这一篇就够了_html 超链接-程序员宅基地

文章浏览阅读1w次,点赞54次,收藏129次。一:什么是超链接。二:如何实现超链接。三:文本超链接、图片超链接。四:a 标签的 target 属性。五:超链接的外部链接、内部链接、锚点链接。_html 超链接

can总线不加末端电阻_隔离接地的原理、完善总线接口保护电路及阻容回路接地的必要性...-程序员宅基地

文章浏览阅读565次,点赞2次,收藏10次。CAN与485都是工业通信中常用的现场总线,各位工程师对于总线隔离方案想必都极为熟悉,但可能会遇到总线采用了隔离方案依旧通讯异常的情况,本文将带您一起探讨总线隔离后该如何接地? 前言为保证总线网络的通讯稳定性,通讯接口通常会做隔离,隔离的主要目的:安规考虑:保护设备及人身安全,隔开潜在的高压危险;提高通信的稳定性:消除地电势差的影响;提高器件的可靠性:消除地环路影响;低耦合:提高系统间的兼容性。目..._can必须要端接回路

【手把手教学】如何可视化YOLOv8深度学习的网络结构并保存_yolov8 模型保存-程序员宅基地

文章浏览阅读1.2k次。【手把手教学】如何可视化YOLOv8深度学习的网络结构并保存_yolov8 模型保存

大数据毕业设计:基于python商品数据采集分析可视化系统 淘宝数据采集 大数据 大屏可视化(附源码+论文)_python商品数据分析可视化系统-程序员宅基地

文章浏览阅读1.9k次,点赞30次,收藏24次。大数据毕业设计:基于python商品数据采集分析可视化系统 淘宝数据采集 大数据 大屏可视化(附源码+论文)_python商品数据分析可视化系统

随便推点

年轻人为什么更喜欢真无线蓝牙耳机?2020五款高性价比蓝牙耳机推荐_jbl为什么只支持sbc-程序员宅基地

文章浏览阅读503次。自分离式腔体的耳机首次推出之后,真无线耳机的风潮席卷世界。很明显,真无线耳机让用户体验到了耳机与身体一体而行的自由体验,观感体验可谓是颠覆性的。蓝牙耳机的好处显而易见:首先,摆脱线材束缚,真正实现无拘无束这一点是显而易见的,纯粹的真无线蓝牙耳机再也没有线材的连接,真正的解放双手,并且轻盈、自在。在有些特定场合,比如运动、通勤等场合,一款真无线蓝牙耳机绝对是首选。其次,开启新的音频传输方式,真无线蓝牙耳机时代对比传统的入耳式“无线蓝牙耳机”,真无线蓝牙耳机的连接不仅是耳机和信号发射设备之间_jbl为什么只支持sbc

vue 项目中添加DES加密-程序员宅基地

文章浏览阅读615次,点赞24次,收藏20次。vue 项目中添加DES加密

十进制,二进制,八进制,十六进制之间转换-程序员宅基地

文章浏览阅读355次。一. 十进制转二进制二. 二进制转十进制三. 十进制转八进制四. 八进制转十进制五. 十进制转十六进制

域控制器常用组策略功能配置说明_在用户策略处理过程中遇到下列警告:windows无法应用deployed printer conne-程序员宅基地

文章浏览阅读794次。Windows 无法应用 Deployed Printer Connections 设置。Deployed Printer Connections 设置可能具有自身的日志文件。请单击“详 细信息”链接限制windows更新限制windows版本禁止使用USB存储设备通过域控制器批量激活_在用户策略处理过程中遇到下列警告:windows无法应用deployed printer connection

SpringBoot2.x系列教程之SpringBoot2.x配置大全04_DataSource配置_spring.datasource.connection-timeout-程序员宅基地

文章浏览阅读2k次。SpringBoot2.x系列教程之SpringBoot2.x配置大全04_DataSource配置DataSource相关配置:spring.dao.exceptiontranslation.enabled: 是否开启PersistenceExceptionTranslationPostProcessor,默认为truespring.datasource.abandon-when-..._spring.datasource.connection-timeout

Python番外篇:爬取国际空间站实时经纬度 并用Pygame可视化位置_国际空间站数据获取-程序员宅基地

文章浏览阅读1.7k次,点赞5次,收藏3次。hello,大家好,我是wangzirui32,今天在网上看到一个Python程序,是爬取国际空间站实时经纬度并显示到地图上,我自己也想学习做一个这样的项目,顺便巩固亿下Python的基础知识。学习目录1. 国际空间站经纬度查询网址2. 图片素材3. 创建项目文件夹4. 编写代码get_data.py 获取经纬度数据ISS.py 创建空间站对象show_map.py 显示ISS位置5. 展示结果1. 国际空间站经纬度查询网址http://api.open-notify.org/iss-now.jso_国际空间站数据获取