《从零开始编写一个直播服务器》音视频封装FLV

流媒体服务系列文章


文章目录

  • 流媒体服务系列文章
  • 前言
  • 一、FLV 封装格式解析
  • 二、实例分析
  • 总结


前言


一、FLV 封装格式解析

在这里插入图片描述

在这里插入图片描述

flv header + flv body
flv header + previous size0 + tag1 + previous size1 + tag2 + …+ prvious sizen+ tagn+1
flv header + previous size0 + tag1 header + tag1 data1 + …+ previous sizen + tagn header+tagn data
previous tag sizen 表示的前一个tag的整体大小
每个Tag数据大小在Tag Header头里面的Data size字段里面;

二、实例分析

在这里插入图片描述

FLV HEADER在这里插入图片描述
总结:
1.Flv header 的前三个字节是固定的FLV的 ASCII 码的值0x46 0x4C 0x56;
2.接下来的一个字节表示 FLV 的版本号,例如 0x01 代表 FLV 版本号为 1;
3.第 5 个字节中的第0位和第2位分别表示video和audio的存在情况(1表示存在,0 表示不存在)其余6位必须为0.最后的4字节,表示FLV Header的长度,对于version 1,此处为9;
4.一般判断格式是不是flv,先从收到数据的第一字节连续查找flv三个字符,如果找到一般可以判断是flv封装格式;
5.Header头数据一般是9字节但是不绝对,所以需要读最后的长度字段来解析;

FLV TAG Header
在这里插入图片描述
1.无论那种类型的tag,tag头字节都是11字节,要解析里面的音频帧,视频帧或者元数据需要读取tag头里面的data长度字段;
2.时间戳很关键,播放过程中,FLV tag的时间信息完全依赖于 FLV 时间戳,内置的其他时间信息都被忽略掉,一般非音视频的tag,时间戳就是0即可;
3.注意计算好时间戳大小,这里的单位是毫秒,所以一定要根据采样率和视频帧率,音频帧采样多少计算好时间戳,然后还要换算成毫秒;
4.Tag头解析完后,Tag数据部分不是视频帧和音频帧,还要根据H264和AAC的打包方案解析才能得到真实的音视频裸数据;

Script TAG 脚本元数据TAG
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Video TAG 视频TAG
在这里插入图片描述

Audio TAG 音频TAG

在这里插入图片描述


总结

1.FLV就三种TAG,比较简单的封装格式,每个TAG都是由Tag Header和TAG Data组成;
2.FLV中对时间戳的处理?如果含有B帧时间戳怎么计算?特别是PTS和DTS时间戳;
3.你能从FLV这种封装格式中,借鉴到什么?加入让你设计一种私有封装格式,又该如何设计;
4.如果FLV里面扩展H.265视频编码格式,你觉得大概的思路是什么;
5.你觉得FLV的缺点有哪些;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1126.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot房屋管理系统

房屋管理系统 springboot房屋管理系统 java房屋管理系统 技术: 基于springboothtml房屋管理系统的设计与实现 运行环境: JAVA版本:JDK1.8 IDE类型:IDEA、Eclipse都可运行 数据库类型:MySql(8.x版本都可…

组装电脑U盘重装Win10系统教程图解

当您需要对组装电脑进行重新安装Win10操作系统时,使用U盘是一种方便而有效的方法,U盘重装系统不仅可以帮助您解决各种系统问题,还能提供一个干净、稳定的系统环境。无论您是初学者还是有一定经验的用户,本教程将提供清晰的组装电脑…

Hive on Zeppelin

** Hive on Zeppelin ** 官网:zeppelin.apache.org 做大数据的人应该对Hive不陌生,Hive应该是大数据SQL引擎的鼻祖。历经多个版本的改进,现在的Hive3已经具备比较完善的ACID功能,能够同时满足交互式查询和ETL 两种场景。 那怎…

软考高级系统架构设计师(九) 作文模板-微服务架构(待继续完善)

目录 举一反三-论微服务架构及其应用 ps: 更多微服务信息 ps: 微服务与SOA区别 微服务架构举例 微服务的落地技术 微服务的技术可大致分为五类 举一反三-论微服务架构及其应用 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相…

HTML5 新增的标签有哪些

HTML5(超文本标记语言第五版)是一种用于创建和呈现网页内容的标准标记语言。是最新的html标准,拥有新的语义、图形以及多媒体元素,简化web应用程序,专为丰富的web内容而设计的,简称“H5”。 语义化标签 H5是…

Linux:通过wget下载安装mysql数据库(5.7版本)

目前,主要使用的MySQL有5.7和8.0两个版本,在安装上,5.7和8.0版本基本一致,区别只在于配置root密码和远程登陆上不同。本次将以5.7版本作为对象,进行后续安装。 1.wget下载MySQL安装文件 下载完成,得到mysq…

Vue3自定义指令实现按钮权限

一、需求前提 登录成功后,后端直接返回了用户的所有权限(路由权限按钮权限),在已经实现菜单权限的基础上,实现每个页面的按钮权限,树形数据结构如下: { "roles": ["admin&q…

Multiple HTTP implementations were found on the classpath错误的解决方法

当我们的项目中集成了多个AWS相关Jar包时,有可能就会遇到这个错误: 错误信息: There is an issue with the connector Code: InvalidInput.InvalidConnectorConfiguration Message: The connector configuration is invalid. Message: Multiple HTTP implementations were f…

新手小白学JAVA_IDEA修改主题 设置背景图片

很多小白在刚刚使用IDEA的时候还不是很熟练 本文主要给大家提供一些使用的小技巧,希望能帮助到你 1.修改IDEA默认主题 IDEA的默认主题是黑色的,其实也可以选择其他的主题 我们一起来试一试吧~ 2.修改IDEA背景图片 IDEA的背景图片也是可以自定义的 我们…

蓝桥杯专题-试题版含答案-【两点距离】【字符串替换】【盗梦空间】【素数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

关于内存颗粒的地址映射

即便从软件角度,抛开地址译码器讨论内存颗粒中指定位置处的地址(DDR中的指定位置的电容)也是没有意义的。晶体管没有绝对地址,就如同地理测量中测定位置前需要确定坐标系一样,同一个位置在不同的坐标系中的地址描述可以…

vue-tsc --noEmit导致打包报TS类型错误

🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步…