关于html5的video标签不能播放视频的问题及解决方法_<video>不播放视频-程序员宅基地

最近实习过程中遇到了音频视频流的格式问题,进行了一些学习和总结。

问题背景

使用html5中的 video 标签去播放视频,但是发现有的flv/mp4格式的视频可以播放,有的flv/mp4格式的视频不能播放。而且视频不能播放,但音频可以播放(也就是音频编码格式是video可以解析的)。
关于video标签的使用示例如下:

<video width="400" controls="controls">
	<source src="some.flv" type="video/mp4">
</video>

video标签支持什么样的视频格式?

html5中的 video 标签只支持MPEG4,Ogg,WebM 三种视频格式,浏览器支持情况如下:
浏览器对视频格式的支持情况
video标签对这三种视频格式是有具体要求的:

Ogg = 带有 Theora 视频编码 + Vorbis 音频编码
MPEG4 = 带有 H.264 视频编码 + AAC 音频编码
WebM = 带有 VP8 视频编码 + Vorbis 音频编码

在项目中,遇到的视频其实是视频流解析不成功,说明视频流的编码不符合要求。那么我们看看H.264视频编码到底是什么,在了解它之前,我们需要先了解一下MPEG-4这个协议簇

MPEG-4协议簇

MPEG-4是个协议簇,包含了多个协议。
MPEG-4协议簇
这里面需要了解的,第一个是mp4v,是一些视频文件中比较常用的视频流编码格式,使用本地的一些播放器其实是可以解析的。但对于html5 的 video 标签,我们也说了,只支持H.264,所以使用了这种视频流编码格式的视频,在html5 的 video 标签中是解析不了的。
第二个,是mp4a,这是MPEG-4协议簇下的音频协议,MPEG-4中包含了一部分AAC类型的定义,主要就是和它相关的,它是AAC类型的音频编码。
关于AAC类型在MPEG-4中只有一部分的定义,其实是因为AAC类型早在1997年就完成了,当时被称为MPEG-2 AAC,把它作为MPEG-2标准的延伸。但是随着MPEG-4音频标准在2000年成型,MPEG-2 AAC也被作为它的编码技术核心,同时追加了一些新的编码特性,所以我们又叫MPEG-4 AAC。所以AAC类型的定义其实在MPEG - 2、MPEG - 4中都有出现,详细情况如下,分别在MPEG - 2 的第7部分和MPEG - 4 的第三部分,也就是我们的mp4a了:AAC标准
再看看第三个,H264 或者说 AVC,AVC协议可以认为是mp4v的升级:

The biggest difference you will typically see is file size.
(两者的区别主要在于文件大小)
H.264 will typically be able to compress video at a much lower bitrate than the standard MPEG-4 codec.
(H264协议能够比mp4v压缩得更小)
You should be able to get comparable quality video with much smaller file sizes.
(你得到的视频,视频流的部分将会被显著的压缩,质量更小)

意思是说,与mp4v相比,AVC具备更高的压缩效率,更适合传输,尤其对于我们网页来说,在后端管理视频的时候做好转码处理还是有帮助的。

可以来破案了

先看一个可以播放的视频,可以看到音频流是mp4a,视频流是H264,video标签是支持的。
可播放的视频
再看一个播放不了的视频,音频流是mp4a,但视频流是mp4v
mp4v的视频流,video标签是不支持的。所以播放的时候只能听到声音,但视频播放不了。
不能播放的视频

解决方法

现在找到问题的原因了,不能被播放的视频,视频的编码格式不是 h264。
利用格式工厂对视频,用h264视频编码格式重新编码,得到的视频就可以使用了。
参考例子
图源自blog——html5 video标签不能播放mp4的问题

参考文章

[1] html5 video标签不能播放mp4的问题
[2] html5网页中用video标签无法播放MP4视频的解决方法

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

智能推荐

linux下编译GDAL外加扩展格式支持(五)--完-程序员宅基地

文章浏览阅读229次。接1、2、3、4篇。10、安装mysql支持安装fedora15或者16系统时若选择安装mysql数据库,则必须自行安装mysql开发包。因为自带默认数据库不会安装这个包。否则会遇到mysql错误:ogr_mysql.h:34:23: fatal error: my_global.h: No such file or directory#问题原因:找不到mysql头文件..._linux gdal netcdf5

Linux tc qdisc 模拟网络丢包延时-程序员宅基地

文章浏览阅读1.2k次。Linux tc qdisc 模拟网络丢包延时_tc qdisc

linux64bit 安装 jdk 1.7-程序员宅基地

文章浏览阅读336次。linux64bit 安装 jdk 1.7下载地址 : https://edelivery.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.rpm0. 卸载rpm版的jdk: #rpm -qa|grep jdk 显示:jdk-1.6.0_10-fcs 卸载:#rpm -e --nodep..._liunx64位得jdk1.7

【Linux笔记】-----Nginx/LVS/HAProxy负载均衡的优缺点_中间件应用场景nginx lvs proxy-程序员宅基地

文章浏览阅读552次。开始听到负载均衡的时候,我第一反应想到的是链路负载均衡,在此之前主要是在学习网络方面知识,像在NA、NP阶段实验做链路负载均衡时常会遇到,后来还接触到SLB负载分担技术,这都是在链路基础上实现的。 其实负载均衡可以分为硬件实现负载均衡和软件实现负载均衡。 硬件实现负载均衡:常见F5和Array负载均衡器,配套专业维护服务,但是成本昂贵。 软件实现负载均衡:常见开源免费的负载均衡软件有Ngin..._中间件应用场景nginx lvs proxy

多维时序 | MATLAB实现CNN-LSTM多变量时序预测_cnn可以进行多步预测-程序员宅基地

文章浏览阅读4.7k次。多维时序 | MATLAB实现CNN-LSTM多变量时序预测目录多维时序 | MATLAB实现CNN-LSTM多变量多步预测基本介绍模型特点程序设计学习总结参考资料基本介绍本次运行测试环境MATLAB2020b,MATLAB实现CNN-LSTM多变量多步预测。模型特点深度学习使用分布式的分层特征表示方法自动提取数据中的从最低层到最高层固有的抽象特征和隐藏不变结构. 为了充分利用单个模型的优点并提高预测性能, 现已提出了许多组合模型。CNN 是多层前馈神经网络, 已被证明在提取隐藏_cnn可以进行多步预测

随便推点

【9.3】用户和组的管理、密码_polkitd:input 用户和组-程序员宅基地

文章浏览阅读219次。3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理3.4 usermod命令3.5 用户密码管理3.6 mkpasswd命令_polkitd:input 用户和组

pca算法python代码_三种方法实现PCA算法(Python)-程序员宅基地

文章浏览阅读670次。主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Prin..._inprementation python code of pca

内存地址Linux下内存分配与映射之一-程序员宅基地

文章浏览阅读35次。发一下牢骚和主题无关:地址类型:32位的cpu,共4G间空,其中0-3G属于用户间空地址,3G-4G是内核间空地址。用户虚拟地址:用户间空程序的地址物理地址:cpu与内存之间的用使地址总线地址:外围总线和内存之间的用使地址内核逻辑地址:内存的分部或全体射映,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分..._linux 内存条与内存地址

自动化测试介绍_自动化测试中baw库指的什么-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏16次。什么是自动化测试?   做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。  首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于_自动化测试中baw库指的什么

a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)-程序员宅基地

文章浏览阅读1.6w次。A0纸指的是一平方米大小的白银比例长方形纸(长为1189mm宽为841mm)。A0=1189mm*841mm A1=841mm*594mm 相当于1/2张A0纸 A2=594mm*420mm 相当于1/4.A1图纸大小尺寸:841mm*594mm 即长为841mm,宽为594mm 过去是以多少"开"(例如8开或16开等)来表示纸张的大小,我国采用国际标准,规定以 A0、A1、A2、.GB/T 14..._a0图纸尺寸

TreeTable的简单实现_treetable canvas-程序员宅基地

文章浏览阅读966次。最终效果图:UI说明:针对table本身进行增强的tree table组件。 tree的数据来源是单元格内a元素的自定义属性:level和type。具体代码如下:Java代码 DepartmentEmployeeIDposi_treetable canvas