【音视频处理】MP4、FLV、HLS适用范围,在线视频播放哪个更好

news2024/12/26 11:08:02

大家好,欢迎来到停止重构的频道。

我们之前讨论过直播协议,本期我们讨论在线点播的视频格式

也就是网络视频文件、短视频常用的格式 如MP4、FLV、HLS等。

我们将详细讨论在线点播场景下,这些视频格式的优劣以及原因。

我们按这样的顺序讨论 :​

1、  封装格式的作用 

2、  MP4 

3、  FLV 

4、  HLS 

封装格式的作用 

首先我们需要搞清楚一点,MP4、FLV、HLS都是封装格式

在前面《音视频转码工作原理》中讨论过,一个视频文件实质上是分3层的,封装、编码、基础数据

播放器需要同时支持这3层格式才能播放视频。

而大部分浏览器支持的编码、基础数据格式是不可扩展的,所以即使同是MP4文件,但编码格式不一样的话,浏览器也是有可能播放不出来的。

 另外,大部分的封装格式不限制音视频数据的基础参数,如帧率、分辨率、采样率等。

所以,诸如MP4文件比FLV文件清晰等说法,实质上都是谣言。​

那么封装格式有什么用呢? 

简单地说,封装格式只是对音频数据、视频数据、基础信息等数据,按一定的结构规则编排成文件

数据编排虽然对音视频数据本身不会产生影响,但是会对一些特定场景产生影响,如MKV的封装格式支持外接字幕,可切换不同语言字幕。

在线播放视频的场景下,FLV、HLS视频的表现会比MP4文件的表现更优秀。

表现优秀并不是画面、声音质量方面,而是首帧播放所需时间、未加载完跳转等表现更加优秀,下面将详细简介为什么会这样。

MP4

MP4是最常见的封装格式了,应用范围广、灵活性高、兼容性强 。

MP4甚至支持自定义封面图,几乎所有的播放器、甚至是浏览器都支持这个封装格式。

MP4文件是很多个数据块相互嵌套的树状结构,MP4支持的数据块类型有几十种,不同类型的数据块存放的信息不一样。

但是很多数据块都是非必要的,具体MP4文件的数据块结构与数据可以使用mp4info这个工具查看。

我们不需要理解MP4所有的技术细节,但是需要知道ftyb、mdat、moov这三种数据块的作用,这三种数据块是MP4文件必要的数据块。

ftyb数据块存放的是编码格式、标准等信息,播放器需要根据这些信息选择对应的解码器。

mdat数据块存放的是具体的音视频数据,这里记录的音视频数据一般是没有时间戳的。

moov数据块存放的是元数据,包括mdat数据里的映射关系,播放器需要根据moov的数据才能推算出音视频帧的播放时间戳。

常常有这样的情况,网络正常的情况下,在线播放的MP4文件需要一段时间才能播放出来

往往就是因为moov数据块还没获取到,无法计算出音视频帧的播放时间而无法播放。

所以如果MP4文件是用作在线播放的话 ,一般需要将MOOV数据块放在mdat数据块之前,这样有利于更快速地播放出来,很多工具都可以做这样的操作, FFmpeg命令如图所示。

一些人说MP4文件会比FLV文件大,可能是MP4文件记录了很多不必要的信息导致的,正常情况下,相同的视频,MP4封装的文件与FLV封装的文件大小是差不多的。

如果在线播放不是网站系统主要业务,视频文件不大、时长不长的话,是可以直接使用MP4文件的,毕竟浏览器及很多播放器都支持MP4封装格式,用户上传也不需要太麻烦的处理。

但是如果存在文件很大达到几GB、或时长很长的视频文件,那尽量不要使用MP4格式 :一是CDN加速的效果不佳,二是MP4文件长时间在线播放可能会出现播放中断等不良情况。

FLV

FLV格式与往期《直播协议》中的RTMP、HTTP-FLV是类似的,毕竟都是Adobe公司主导或推出的标准。

FLV是一种为网络视频设计的格式,网页加入flv.js插件就可以播放了。

FLV文件的每个音视频数据块都可以有时间戳标识,所以FLV在首帧播放、未加载跳转等场景表现都更为优秀。

这里需要特别说明的是,有时候在线播放FLV视频文件会出现未加载跳转报错的问题,也就是未加载跳转时会报错中断播放的状况。

一般是因为此FLV文件没建立关键帧索引的原因 ,FFmpeg命令追加关键帧索引如图所示。

一般网络视频都采用FLV格式文件,在我们过去的测试体验中,大文件、长时间播放比MP4更为稳定。当然普通CDN加速对FLV大文件效果也不佳,但可以接入大文件CDN缓解这个问题。

HLS

最后是HLS格式,在往期《直播协议》已经详细讨论过HLS了。

在点播的场景下,HLS实质上就是把一整个大的视频文件分成很多个碎片视频文件

HLS格式的文件由两部分组成,一是多个只有几秒长度的.ts碎片视频文件,另一个是记录这些视频文件地址的.m3u8索引文件。

HLS观看地址实质上是.m3u8索引文件,客户端获取到索引文件后,就可以下载对应的碎片视频文件并开始播放了。

HLS的.m3u8索引文件支持二级索引,就是高清、标清、流畅等多个观看地址可以整合到一个索引文件,播放器可以根据当前带宽自动切换不同的观看地址,大部分网页播放器的“自动”也是因为这个。

由于HLS把一个视频文件切为很多段碎片文件,在线播放长视频场景下相对于FLV格式,HLS的未加载跳转、CDN加速、多线程预加载等方面更为优秀。

但是在短视频场景下,HLS的优势并不明显,而且视频碎片ts文件本身也是完整的视频封装格式,也是能单独播放的,所以会额外产生一些不必要的流量。

另外,由于HLS视频实质上是很多个文件组成的,HLS视频一般需要网站系统自己转封装,这也是HLS视频比较麻烦的地方,不过公有云也有视频文件转码服务 一般提供自动转封装的功能。

补充说明一下, HLS协议是苹果推出的标准,与HLS协议类似的还有MPEG-DASH协议。 HLS、MPEG-DASH的工作原理都是差不多的,只是局部标准不一样,这里不作展开。

总结

总的来说 如果是网站系统的视频不多,在线播放不是主要业务,那么视频文件使用常规的MP4格式就可以了。

如果在线播放视频是主要业务,则需要考虑FLV、HLS格式。

短视频偏多的话,则推荐采用FLV格式,长视频、大文件偏多的话,则推荐采用HLS格式。​

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享几个冷门但实用的网站!

今天给大家推荐几个冷门但实用的网站,免费又好用对于打工人来讲十分友好。 Img Cleaner https://imgcleaner.com/ 一个免费的AI智能图片去水印网站,不用注册登录就可以使用,而且操作也比较简单,上传图片之后调整画笔大小&#xf…

小黑子—Java从入门到入土过程:第十章 - 多线程

Java零基础入门10.0 Java系列第十章- 多线程1. 初识多线程2. 并发和并行3. 多线程的实现方式3.1 一:继承Thread类方式实现3.2 二:实现Runnable接口的方式实现3.3 三:利用Callable接口和Future接口方式实现 4. 多线程中常见的成员方法4.1 线程…

❤ Manifest version 2 is deprecated, and support will be removed in 2023. See..

❤谷歌插件开发遇到的问题 开发谷歌插件提示: ❤js 开发谷歌插件提示 提示 Manifest version 2 is deprecated, and support will be removed in 2023. See… 当导入到chrome,提示如下错误: Manifest version 2 is deprecated, and suppo…

物联网:智慧城市还要做的事情

摘要:本文简介关于智慧城市,还有哪些需要做的事情。 1.传统城市需要向智慧城市转型 传统的城市中心已被证明不足以满足社会当前和未来的各种需求,这增加了应用智慧城市理念的需求。智慧城市可以对健康、交通、休闲和工业等多个领域产生重大…

VLC可见光通信:2、高速LED驱动电路

背景 在VLC可见光通信中,需要高速的控制LED的通断,因此需要高速LED驱动电路。 文中出现的低压是指24V电压以下,中压是指24V~60V电压,高压是指60V ~ 160V。 低速是指500KHZ以下,高速是指2MHZ。 小功率是指20W以下,大功率指20W~100W。 低压小功率LED低速&高速:20W、…

你是时候拥抱chatgpt了

随着chatgpt热度不断上升,chatgpt已经广泛应用到各个行业了,很多人都感觉自己地位受到威胁,有人预测chatgpt会取代80%程序员的工作,我也用了chatgpt有几个月了,不得不说是真的牛逼。我甚至用它写了一个python的聊天脚本…

MapReduce计算广州2022年每月最高温度

目录 数据集 1.查询地区编号 2.数据集的下载 编写MapReduce程序输入格式 输出格式 Mapper类 确定参数 代码 Reducer类 思路 代码 Runner类 运行结果 数据集 1.查询地区编号 NCDC是美国国家气象数据中心的缩写,是一个负责收集、存储和分发全球气象和气…

C#中将32位二进制转换为float【Real】十进制类型

已知一个32位二进制字符串,转换为float【Real】十进制。 参考本人一篇博客 float数转二进制 C#关于32位浮点数Float(Real)一步步按位Bit进行解析_real32位浮点数_斯内科的博客-CSDN博客 现在是32位二进制转化为十进制浮点数,C#有…

电动汽车入网技术(V2G)调度优化(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 近年来我国电动汽车行业飞速发展,其中电动汽车入网技术(vehicle-to-grid,V2G)在…

RapidScada Linux安装教程

官方安装步骤:在 Linux上安装 - Rapid SCADA,安装过程中遇到一些坑,记录详细步骤。 官方推荐的Ubuntu,未测试Centos 1. 安装ASP.Net运行环境(Runtime) 下载地址:下载 .NET 6.0 (Linux、macOS 和 Windows)&a…

selenium还能这么玩:连接已经存在的浏览器

测试和爬虫对selenium并不会陌生,现有的教程已经非常多。但是因为 selenium 封装的方法比较底层,所以灵活性非常高,我们可以基于这种灵活性来实现非常丰富的定制功能。 这篇文章介绍一个操作,可以让 selenium 连接我们手动打开的…

AI绘画-Midjourney基础2-超强二次元风格模型 niji 5

niji 模型是 mj 的一种模型,可以生成二次元风格的图片。 在控制台输入 /settings 指令,进入设置页面。 选择第二行的 Niji version 5 模型,就可以创作二次元风格的图片了! 一、expressive 风格 expressive 风格是 niji 5 模型的默认风格。 Step into the world :: of a …

14个最佳创业企业WordPress主题

要创建免费网站?从易服客建站平台免费开始 500M免费空间,可升级为20GB电子商务网站 创建免费网站 您网站的设计使您能够展示产品的独特卖点。通过正确的主题,您将能够解释为什么客户应该选择您的品牌而不是其他品牌。 在本文中&#xff0…

信息(文档)和配置管理

信息(文档) 配置管理 小改动增加Y的值,大改动增加X的值 配置控制

jRebel实现热部署以及云热部署

idea使用jRebel教程很多,不再累述 服务器部署jRebel 1.下载激活工具(github,别忘了加速):下载链接 因为是linux,固下载下方资源 放进服务器执行下方命令运行,port就是端口号,看着改,我用的888…

什么是GHZ?炫云到底是怎么收费的?

作为一家云渲染“老牌”服务商,炫云的行业资历无疑是悠久的。在广大用户的支持与认可下,炫云砥砺前行迎来蓬勃发展。注册用户体量的剧增,为炫云带来了更多新面孔。在客服汇总的新用户常见问题里,有关“GHZ”与“收费”的字眼出现频…

Hyperf使用WebSocket 服务

1.安装服务 composer require hyperf/websocket-server2.配置 Server 修改 config/autoload/server.php&#xff0c;增加以下配置。 <?phpdeclare(strict_types1); /*** This file is part of Hyperf.** link https://www.hyperf.io* document https://hyperf.wiki*…

ChatGpt使用、小白上手指南,整理5个ChatGpt学习文库和平台

ChatGpt目前很火&#xff0c;话题度很高&#xff0c;关于它的账号售卖、视频课程网上遍地都是&#xff0c;尝试没有窍门&#xff0c;学习付费太高&#xff0c;一不小心就会被割韭菜。 闲暇之余也从网上搜集整理了5个平台&#xff0c;里面系统的介绍了有关ChatGpt的应用和相关&…

IM即时通讯系统[SpringBoot+Netty]——梳理(五)

文章目录 十一、打造QQ在线状态功能之为你的应用增添色彩1、在线状态设计2、Netty网关用户状态变更通知、登录ack3、逻辑层处理用户上线下线4、在线状态订阅—临时订阅5、实现手动设置客户端状态接口6、推拉结合实现在线状态更新 十二、IM扩展—能做的事情还有很多1、如何让陌生…

​ NISP一级备考知识总结之信息安全概述、信息安全基础

参加每年的大学生网络安全精英赛通过初赛就可以嫖一张 nisp&#xff08;国家信息安全水平考试&#xff09; 一级证书&#xff0c;nisp 一级本身没啥考的价值&#xff0c;能白嫖自然很香 1.信息安全概述 信息与信息技术 信息概述 信息奠基人香农认为&#xff1a;信息是用来消…