chrome网页视频抓取( 谷歌浏览器仅支持H264编码,但是视频流的编码可能不一样)
优采云 发布时间: 2021-12-14 20:25chrome网页视频抓取(
谷歌浏览器仅支持H264编码,但是视频流的编码可能不一样)
某些 MP4 视频无法在 Google Chrome 中播放
本质上,html 使用标签来播放视频,我相信大多数浏览器都支持。
但是我今天遇到了一个问题。我在APP上拍了两个视频,一个可以播放,另一个失败。
排除服务器和文件存储服务器的问题。怀疑是前端代码写错了。疑似网速受限,视频被截断。
没想到,原来是mp4视频流格式问题,谷歌浏览器不支持。
mp4都是mp4,但这只是让操作系统识别哪些应用程序可以播放。实际内容取决于视频流的格式或编码,但视频流的编码可能不同。
据说谷歌浏览器只支持H264编码,因为支持视频编码需要专利费,所以只支持这个。
原因
由于之前的文章文章已经基本查清了服务器的原因,这次还是发现视频播放失败,所以重点放在了前端和网络上。
通过控制台发现视频数据已经取到了,但是仍然显示“播放失败”。
怀疑:
第一点是从日志来看,没有看到错误日志;
第二点是从前端控制台检查,发现传输完成;
三、 第四(PS:因为前端人手不足所以做了原来的改动)因为经验有限,请前端*敏*感*词*姐帮忙查一下。
找方向
但是前台*敏*感*词*很忙,不能坐等死。决定继续考虑。
怀疑是视频问题,直接通过url下载视频。下载到本地就可以正常播放了,说明视频本身是完整的。
所以我写了一个tag-only html,写了视频源,分别用edge和google打开。
Sorry, your browser doesn't support embedded videos.
原来edge可以正常播放,google却不能。那只能是视频本身的问题。
找到方向后,启动google(这个google不是别的google)。发现经常有这样的问题,结论是谷歌只支持h264。
视频格式和编码
相关介绍见文章:Chrome使用视频无法正常播放MP4视频的解决方法-Yellow_ice-博客园()
验证猜想
既然怀疑是视频编码问题,需要验证一下。如何查看视频的编码?我不能直接看到它。
这里需要用到ffmpeg软件。
从官网下载解压后,将“安装目录/bin”写入系统变量Path。
ffmpeg -i 0b9a8a522ae84fa69e15068cbf044c1e.mp4
无法播放的视频输出 hevc(别名 H265):
可以播放的输出是h264:
验证解决方案
用这个软件把hevc转成264扔到OBS服务器上,确认能不能正常播放。
结论自然是可以的。
综上所述
结论是视频拍摄完成后APP端存储的编码有误。因为这次拍摄的是第二个视频,所以和上一个不同。一个是h264可以播放,一个是hevc不能播放。
请在前端更改视频编码,应该没问题。
无底线
如果无法解析,否则OBS服务器会自动转码。
然后服务器需要在拉取视频后进行转码。
目前google了一下,发现有两种说法:
其实这两种方法本质上是一样的。前者需要您自己在服务器或本地计算机上安装软件。后者不如前者灵活,但可以直接使用。
因为本质是调用ffmpeg,所以视频流必须保存在服务器上,代表的是File文件。
因此,原创文件和转换后的文件需要经过内存、服务器,然后才能删除,占用内存和时间。
所以尽量统一编码格式。
该工具包是:GitHub-a-schild/jave2:JAVE(Java 音频视频编码器)库是 ffmpeg 项目上的 Java 包装器
参考链接
Chrome无法正常使用视频播放MP4视频-Yellow_ice-博客园()
GitHub-a-schild/jave2: JAVE(Java 音频视频编码器)库是 ffmpeg 项目上的 Java 包装器