1.视频编码是什么?

现在视频编码主流是h.264,对应着输入格式为AVC

H.264/AVC是2003年制定的视频编码压缩标准 ,集中了以往标准的优点,并吸收了以往标准制定中积累的经验,采用简洁设计,使它比MPEG4更容易推广。H.264创造性了多参考帧、多块类型、整数变换、帧内预测等新的压缩技术,使用了更精细的分象素运动矢量(1/4、1/8)和新一代的环路滤波器,使得压缩性能大大提高,系统更加完善。

有兴趣深入了解可以好好看看

好学直通车

https://baike.baidu.com/item/%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/839038?fr=aladdin

2.获取视频的基本信息

  • 我们通过input拿到系统对象e里面的文件信息很有限,而且没有我们想要的东西。

  • 引入插件mediainfo.js

    这是出色的MediaInfoLib的JavaScript端口, 可以直接在浏览器或Node.js中运行。它使用Emscripten从C ++源代码进行编译 。

演示地址https://mediainfo.js.org/

github地址https://github.com/buzz/mediainfo.js

看下他的魔法,使用很简单可以直接用CDN

<script type="text/javascript" src="https://unpkg.com/mediainfo.js/dist/mediainfo.min.js"></script>
function base_videoInfo(id) {
const fileinput = document.getElementById(id);
const onChangeFile = (mediainfo) => {
const file = fileinput.files[0]
if (file) {
const getSize = () => file.size
const readChunk = (chunkSize, offset) =>
new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = (event) => {
if (event.target.error) {
reject(event.target.error)
}
resolve(new Uint8Array(event.target.result))
}
reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize))
})
mediainfo.analyzeData(getSize, readChunk).then((result) => {
// console.log(result)
// console.log(result.media.track[1].Format)
//result.media.track[1].Format == "AVC"说明是h264
if (result.media.track[1].Format != "AVC") { }
}).catch((error) => {
console.log(error)
})
}
}
MediaInfo({ format: 'object' }, (mediainfo) => {//format结果值的格式(选择:object,JSON,XML,HTML或text)
fileinput.addEventListener('change', () => onChangeFile(mediainfo))
})
}

看下拿到的东西够不够详细

3.用canvas给上传视频画个缩略图

没用插件之前我是通过先在页面创建video标签然后播放视频最后拿到视频的宽高、时长等信息,用了插件完全不需要了

		function drawVideoImage() {
var videoUrl = window.URL.createObjectURL(file);
var video = document.createElement('video');
video.src = videoUrl;
// 让视频自动播放来来获取宽高和缩略图
video.autoplay = true;
video.muted = true;
$('#createDynamicMadal .video').html('');
$('#createDynamicMadal .video').append(video);
// 当video加载完成时获取的
$('#createDynamicMadal .video video')[0].onloadedmetadata = function () {
videoHeight = $(this).height();
videoWidth = $(this).width();
}
$('#createDynamicMadal .video video')[0].play();
var index = 0;
$('#createDynamicMadal .video video')[0].ontimeupdate = function () {
var time = Math.floor(this.duration);
var canvas = document.createElement('canvas');
canvas.width = videoWidth;
canvas.height = videoHeight;
var context = canvas.getContext('2d');
context.fillStyle = '#000';
context.drawImage(this, 0, 0, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height);
var src = canvas.toDataURL('image/jpeg');
// 将视频的缩略图渲染到页面中
if (src != 'data:,') {
var dynamicImg = new Image();
dynamicImg.src = src;
$(dynamicImg).attr('index-video', '1');
// 将压缩的后的图片渲染到页面中
$('.upload-video').before(`<div class="upload-item upload-items upload-video-img" style="display:inline-block;margin-right:5px;"><img src="${src}" index-video='2'><i class="iconfont icon-guanbishixin delete-img"></i><div class="edit_cover">编辑封面</div></div>`)
thumbnailImg = dataURLtoFile(src, 'thumbnailImg.jpeg');
duration = time;
this.ontimeupdate = null;
$('#file-upload').val('');
// 隐藏选择视频框
$('.upload-video').hide();
$('#loading').hide();
$('#loading .loading-item .loading-text').text('');
// 清空创造的video标签,避免造成性能浪费以及报错
$('#createDynamicMadal .video').html('');
// 加载完成后销毁url,节省性能
window.URL.revokeObjectURL(videoUrl);
}
}
}

JavaScript判断视频编码是否为h.264的更多相关文章

  1. 最简单的视频编码器:基于libx264(编码YUV为H.264)

    ===================================================== 最简单的视频编码器系列文章列表: 最简单的视频编码器:编译 最简单的视频编码器:基于libx ...

  2. 电影编码JPEG2000与H.264

    电影的第三次革命是数字电影的诞生,数字电影取代了胶片,那么数字电影就一定有其独特的封装(压缩)格式.在网络上,我们经常见到许多视频格式,诸如mp4.mkv.flv.rmvb等,这些都是在通用计算机上播 ...

  3. MPEG-4与H.264的区别 , 编码 以及 应用

    MPEG4是适用于监控领域的压缩技术 MPEG4于1998年11月公布,原预计1999 年1月投入使用的国际标准MPEG4不仅是针对一定比特率下的视频.音频编码,更加注重多媒体系统的交互性和灵活性.M ...

  4. H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  5. 【图像处理】H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  6. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  7. Android IOS WebRTC 音视频开发总结(七九)-- WebRTC选择H.264的四大理由

    本文主要介绍WebRTC选择H.264的理由(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacke ...

  8. 最简单的基于FFMPEG的视频编码器(YUV编码为H.264)

    本文介绍一个最简单的基于FFMPEG的视频编码器.该编码器实现了YUV420P的像素数据编码为H.264的压缩编码数据.编码器代码十分简单,可是每一行代码都非常重要,适合好好研究一下.弄清楚了本代码也 ...

  9. 【视频编解码·学习笔记】2. H.264简介

    一.H.264视频编码标准 H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响.严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG- ...

随机推荐

  1. centos8 mysql8遇到的问题

    1.装了第一遍,连接没遇到问题,没注意是怎么装的:本机连,外部连都没碰到问题: 遇到了表名大小写的问题,改了配置文件my.cnf或/etc/my.cnf.d/mysql-server.cnf的文件 在 ...

  2. 设置cmd默认管理员模式启动

    打开cmd文件位置

  3. 建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上

    前言 对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来.另外提醒一点,充分复习,是消除你 ...

  4. MathType中如何编辑求和公式

    在学习过程中,尤其是在写需要用到数学公式的论文的时,需要输入数学公式并进行格式编辑等,那么对于简单的公式可以使用Office自带的公式编辑器,对于复杂的公式建议使用专业的公式编辑器MathType,该 ...

  5. CorelDRAW常用工具之手绘工具

    对于平面设计师来说,一个好用顺手的手绘工具是必不可少的,CorelDRAW的手绘工具能将手绘笔触转换成平滑的线条或者形状. 1.基础操作 CorelDRAW的手绘工具组包含手绘.2点线.贝塞尔.钢笔. ...

  6. 好端端的数据结构,为什么叫它SB树呢?

    大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实是英文Size balanced tree的 ...

  7. Mac 上超好用的代码对比工具 beyond compare,对比json差异

    导读 昨天下午,公司业务跑不通,然后开发组长让架构师联系我,给我发一个json和部署到dev上的微服务url,让我去测试下,将发来的json放到json.cn上愣是解析不出来,我就用之前的json请求 ...

  8. 2. 三数之和(数组、hashset)

    思路及算法: 该题与第一题的"两数之和"相似,三数之和为0,不就是两数之和为第三个数的相反数吗?因为不能重复,所以,首先进行了一遍排序:其次,在枚举的时候判断了本次的第三个数的值是 ...

  9. [自学] MIT的EECS本科+研究生课程【持续更新中-2020.06.02】

    前言 我的本科是读的电子信息工程,研究生跟着老师做项目,参与到深度学习中来,毕业后做了算法工程师,工作之后愈发发现,不论从事什么岗位,基础都很重要,但现在也没有时间再读一遍本科了,自学的话也不知道从何 ...

  10. 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行

    [NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...