在安卓中使用 `mobile-ffmpeg` 压缩后的视频,浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案

news2024/10/10 3:33:09

在安卓中使用 mobile-ffmpeg 压缩后的视频,浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案

你可能在安卓开发中使用了 mobile-ffmpeg 进行视频压缩,而当你尝试在浏览器中在线播放压缩后的视频时,看到提示:“没有找到支持的视频格式和 MIME 类型。” 这个问题的原因以及如何解决?今天咱们就用大白话来聊聊。

问题的原因是什么?

你在安卓项目中用 mobile-ffmpeg 压缩视频时,可能默认使用了 H.265 (HEVC) 编码格式。这个格式确实厉害,能把视频压得更小,同时还能保持不错的画质。但是,H.265 并不是所有浏览器都支持的,尤其是在 HTML5 视频播放的环境下。像 Chrome 和 Firefox,虽然在某些情况下支持 H.265,但它并不是默认支持,而且许多移动端浏览器也无法识别这个格式。

当浏览器无法识别视频的编码格式或者容器格式时,就会显示“没有找到支持的视频格式和 MIME 类型”的错误。

浏览器支持的主流视频格式

要保证压缩后的视频能够在大多数浏览器中播放,视频编码格式容器格式必须符合浏览器的要求。这里是主流浏览器普遍支持的格式:

  • 容器格式mp4, webm, ogv
  • 视频编码H.264 (AVC), VP8, VP9
  • 音频编码AAC, Vorbis, Opus

问题就在于,你压缩后的视频可能用了 H.265 (HEVC) 作为视频编码,这种格式并不是浏览器最友好的选择。

解决方案:改用 H.264 视频编码

要让视频在浏览器中顺利播放,最稳妥的做法是将编码格式从 H.265 改为 H.264,这种编码格式兼容性最好,几乎所有浏览器和设备都支持。

如何在安卓中用 mobile-ffmpeg 压缩视频并确保兼容性?

mobile-ffmpeg 中,你可能原本使用了这样的命令来压缩视频:

String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx265 -x265-params crf=28:preset=fast -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);

这里的 libx265 就是告诉 mobile-ffmpeg 用 H.265 编码压缩视频。为了确保视频能在浏览器中播放,我们可以把这个编码器换成 libx264,也就是使用 H.264 编码。修改后的命令如下:

String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx264 -preset fast -crf 28 -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);

解释这些参数

  • -i %s:输入文件的路径。
  • -vf scale=%d:%d:缩放视频到指定的宽高。
  • -c:v libx264:使用 H.264 编码压缩视频。
  • -preset fast:使用快速压缩设置,减少压缩时间。
  • -crf 28:控制视频质量(数值越低,质量越好,文件越大)。
  • -r 30:设置帧率为 30 帧每秒。
确保音频也兼容:使用 AAC 编码

同样重要的是音频编码。为了确保音频部分在浏览器中也能正常播放,我们需要使用浏览器广泛支持的 AAC 编码。因此,我们的命令中还要加上音频编码的设置:

String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx264 -preset fast -crf 28 -c:a aac -b:a 128k -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);
  • -c:a aac:使用 AAC 作为音频编码。
  • -b:a 128k:设置音频比特率为 128kbps,保证音质不错。

使用正确的 mobile-ffmpeg

在引入 mobile-ffmpeg 时,确保使用的包是 com.arthenica:mobile-ffmpeg-full-gpl:4.4,而不是 com.arthenica:mobile-ffmpeg-full:4.4。前者包含了 H.264 编码所需的支持库,确保编码时不会出现问题。

为什么选择 H.264 编码?

H.264 之所以是最好的选择,是因为它兼容性好。几乎所有的主流浏览器、移动设备、视频播放器等都支持 H.264 编码。这样,无论用户是在 Chrome、Safari 还是 Firefox 浏览器上,都可以轻松播放你压缩后的视频。

总结

如果你在安卓开发中使用 mobile-ffmpeg 进行视频压缩,遇到了浏览器无法播放压缩后视频的情况,多半是因为你使用了 H.265 编码。要解决这个问题:

  1. 改用 H.264 编码来压缩视频。
  2. 确保音频使用 AAC 编码,保证最大兼容性。
  3. 使用正确的 mobile-ffmpegcom.arthenica:mobile-ffmpeg-full-gpl:4.4

只要你按照这些步骤调整,压缩后的视频应该能够顺利在浏览器中播放,再也不会看到“没有找到支持的视频格式和 MIME 类型”的错误提示了。

小贴士:
  • 容器格式mp4
  • 视频编码H.264
  • 音频编码AAC

这样做,不仅能压缩视频,还能让它在所有主流浏览器里轻松播放!

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

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

相关文章

利用可解释性技术增强制造质量预测模型

概述 论文地址:https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习(ML)模型性能的方法。该方法已用于铣削质量预测,这一过程首先训练 ML 模型,然后使用可解释性技术识别不需要的特征并去…

库函数相关(上一篇补充)

一、创建自己的头文件 在当前目录下创建一个my_head.h将这个文件移动到/usr/include目录 #ifndef __MY_HEAD_H__ #define __MY_HEAD_H__#include <stdio.h> #include <errno.h> #include <string.h>#define PRINT_ERR(s) do{\printf("%s %s %d\n&quo…

MongoDB初学者入门教学:与MySQL的对比理解

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…

JavaEE: HTTPS的魅力与优势揭秘

文章目录 HTTPSHTTPS 是什么HTTPS 基本工作过程Fiddle 等抓包工具,为啥能解析 HTTPS 的数据? HTTPS HTTPS 是什么 HTTPS 是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层. 几个核心概念: 明文: 要传输的原始数据.密文: 把明文进行加密之后得到一个让别人不能理解…

【算法篇】三道题理解什么是递归,回溯和剪枝

递归&#xff0c;回溯&#xff0c;剪枝 想必大家再学习算法知识的路上经常听到回溯&#xff0c;剪枝类似的概念&#xff0c;对于初学者来说&#xff0c;很容易把他们理解成一种新的算法思想&#xff0c;其实回溯和剪枝只是在递归的基础上稍加修改&#xff0c;对于解决某些特定问…

k8s的pod的管理

常用的Pod基础命令 列出所有命名空间中的所有Pod kubectl get pods --all-namespaces 列出指定命名空间中的所有Pod kubectl get pods -n <namespace> 显示指定Pod的详细信息&#xff0c;包括状态、事件等 kubectl describe pod <pod-name> -n <namespace>…

机器学习入门(一)

一、机器学习概述 1、人工智能 像人一样智能的综合与分析&#xff0c;机器模拟人类。 是一个系统&#xff0c;像人那样思考&#xff0c;像人那样理性思考。 是一个系统&#xff0c;像人那样活动&#xff0c;像人那样合理的系统 2、机器学习 让机器自动学习&#xff0c;而不…

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…

excel 单元格嵌入图片

1.图片右键,设置图片格式 2.属性 随单元格改为位置和大小 这样的话&#xff0c;图片就会嵌入到单元格&#xff0c;也会跟着单元格的大小而改变

10-记录器

这个功能允许记录和重现以前的模拟。所有发生的事件都记录在记录器文件 recorder file中。 1 记录 所有数据仅在服务器端以二进制文件的形式写入。但是&#xff0c;记录器是使用 carla.Client管理的。 注意&#xff1a;在回放结束时&#xff0c;车辆将被设置为自动驾驶&#xf…

强化学习和QLearning及GAN到底是什么关系啊

强化学习&#xff08;Reinforcement Learning&#xff09;、Q-Learning 和生成对抗网络&#xff08;GANs&#xff09;是机器学习中的三个不同概念&#xff0c;它们虽然有一些交叉&#xff0c;但本质上是针对不同问题的技术方法。下面我来详细解释它们之间的关系和区别&#xff…

leetcode每日一题day22(24.10.2)——准时到达的列车最小时速

思路&#xff1a;这种在有约束条件情况下&#xff0c;求最值或最符合要求的情况&#xff0c;首先是很容易想到&#xff0c;从时速为1开始往后找找到满足条件就输出&#xff0c;但这无疑工程量很大&#xff0c;每种可能的速度都要对列车数组进行遍历&#xff0c; 时间复杂度为C…

链表Set_LinkList(并集)

并集是把两个集合合并&#xff0c;去除重复元素后组成的集合。 通过键盘输入将两个集合保存在链表A和链表B中&#xff0c;再创建一个链表C用于保存集合A、B的并集&#xff0c;将链表C打印输出。 提示&#xff1a; 1.相对于上一题&#xff08;链表Set_LinkList&#xff08;建立&…

java 微服务 端口冲突 redis虚拟磁盘满 nacos挂

java 微服务 端口冲突 哥 排除法呀 什么卸载软件QAQ netstat -ano | findstr :48080 输这个呀 然后 taskkill /PID 1234 /F redis虚拟磁盘满 导致 假死 挂了 nacos 挂了重启 nacosrun.bat startup -m standalone

facebook受众选择设置策略的最佳方式

在进行Facebookguanggao投放时&#xff0c;受众的选择是一个至关重要的步骤。正确的受众选择不仅能够帮助我们更好地定位目标用户&#xff0c;还能显著提高guanggao的转化率和投资回报率&#xff08;ROI&#xff09;。然而&#xff0c;受众选择的数量和范围同样是需要认真考虑的…

QtDesign预览的效果与程序运行的结果不一致的解决方法

存在的问题 使用Qt designer软件设计出来的界面&#xff0c;与转换成python程序运行出来的结果不一致&#xff0c;具体看下图 Qt designer预览结果 程序运行出来的结果 原因分析 我自己的电脑是2560*1600分辨率的屏幕&#xff0c;采用的是200%的缩放比例&#xff0c;出现这种…

虚拟机没有网络怎么解决

CentOS7为例 进入虚拟网络编辑器 1.更改设置 2.选中NAT模式点击3点击移除网络 4添加网络&#xff0c;随便选一个 5.点开NAT设置&#xff0c;记住网关 6.DHCP设置&#xff0c;注意虚拟机设置ip必须在起始ip和结束ip范围内 进入虚拟机网络适配器&#xff0c;自定义选中第4步操作…

Tailwind Css的使用

1.Tailwind Css是什么 官网解释&#xff1a;Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类&#xff08;class&#xff09;名&#xff0c;然后生成相应的样式代码并写入 到一个静态 CSS 文件中。 我的理解是利用Tailwind CSS 提供的…

Element-快速入门

什么是 Element 在现代前端开发中&#xff0c;组件化的思想日益盛行&#xff0c;Element组件库作为一款流行的UI组件库&#xff0c;特别适用于基于Vue.js的项目&#xff0c;它为开发者提供了丰富的组件和良好的开发体验。 想要使用Element的组件库&#xff0c;我们需要完成下面…

基于opencv的人脸闭眼识别疲劳监测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…