移动端Video标签踩坑记录
需求
用户能在手机上上传视频并预览。
问题
- 上传完成后安卓下封面展示正常,ios下封面空白。如下图所示:

- 利用canvas截取视频第一帧发现,ios下截取到的第一帧一直是空白图片, 安卓正常。
- 后端利用javacv库截取,返回给前台封面图,ios竖屏拍摄下的视频截取到的图片有90度旋转,javacv库无法取得旋转信息,但是控制台打印出的视频元信息带有旋转信息。安卓无论横屏竖屏都没有旋转。
解决方案
- 上述的前两个问题,ios下html开发的文档中指出了video标签只有用户触发了playback才会展示封面图,否则建议指定poster,参考链接如下
https://developer.apple.com/library/archive/documentation/AudioVideo/Co 大专栏 移动端Video标签踩坑记录nceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW1
那么既然要触发播放,我就想到利用js模拟click事件之后截取第一帧,发现依然是空白,于是放弃用后台截取。
这里如果前端能实现利用第一帧作为封面图,那么视频上传预览时,完全不必要把视频传到后端了,利用URL.createObjectURL这个api可以轻松做到前端预览,但是由于这个封面问题只能上传到后端。 - 后端利用javacv轻松截取到,但是竖屏拍摄图片旋转的问题难以解决。不知道为何getMetaData获取到的永远是个空的map,但是控制台红色输出的信息中又包含了各种元信息,虽然怀疑是java调用c的api出了问题,但是水平实在不够,于是只能放弃。最终由于时间紧,也没要求到必须旋转回来,毕竟空白问题解决,所以只能草草了之。但是也预备了个方案,继续寻找第三方能获取到视频元信息的依赖,这条路肯定是可以走通的。
总结
移动端的坑还是挺多的,尤其是展示上的,除此以外就是考虑到wx这个大平台的展示,只能是碰到了就一点点的记录。但是随着技术的发展,这点小坑终将会被填平。
移动端Video标签踩坑记录的更多相关文章
- VUE使用微信JDK(附踩坑记录)
VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- SUCTF 2019 Upload labs 2 踩坑记录
SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...
- [技术博客]iview组件样式踩坑记录
[技术博客]iview组件样式踩坑记录 iview官方文档. 在本次项目开发中,前端项目主要使用vue框架+iview组件构建,其中iview组件在使用过程中遇到了许多官方文档中没有明确说明或是很难注 ...
- unionId突然不能获取的踩坑记录
昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
随机推荐
- getitem
#一般如果想使用索引访问元素时,就可以在类中定义这个方法(__getitem__(self, key) )class Foo(object): def __init__(self): self.dat ...
- Java--Excel操作
public static List<Info> readXml(String fileName, Map<String, Fuck> pcMap) throws Except ...
- runlevel 运行级别
linux启动过程 关于Ubuntu 12.04修改默认运行级别,启动字符界面的个人理解 网上通常的做法是:(亲自试验,不管用),如果想直接操作请看绿色字体部分 (1)第一种方法: 由于Red ...
- 合并两个django的queryset
有queryset:A和B 要合并它们,根据网上的答案,貌似是用itertools库的chain对象比较好,地址 c=chain(x,y) 但是当c用于分页的时候,就有问题,会报chain没有le ...
- PHP静态方法和普通方法的区别
<?php header('content-type:text/html;charset=utf-8'); /* 普通方法,存放类内,只有一份 静态方法,也是存放于类内,只有一份 区别在于:普通 ...
- 17.3.10--C语言运行的步骤
编译-->生成-->调试-->链接-->运行 编译就是:将你编写的C语言程序翻译成机器能识别运行的指令集 生成就是:根据编译完成的指令集制造出机器可以具体执行的指令序列 调试就 ...
- 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作
spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ...
- 60年前美国军方的这个编程原则,造就了多少伟大的框架--KISS原则
摘自:https://kb.cnblogs.com/page/654057/ 作者: 贺卓凡 来源: ImportSource 发布时间: 2020-01-23 19:52 阅读: 2324 次 ...
- git submodule update --init 和 --remote的区别
git 的submodule 工具方便第三方库的管理,比如gitlab 上的各种开源工具,spdlog等 在项目目录下创建.gitmodule 里可以添加第三方库,然后在更新第三方库时,有两个选项 g ...
- python_pycharm控制台输出带颜色
一.书写格式: 设置颜色开始:\033[显示方式;前景色;背景色m] 结束:\033[0m 二.颜色参数: 前景色 背景色 颜色 ----------------------------------- ...