问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在浏览器console控制台中播放视频?

发布网友 发布时间:2024-10-01 12:06

我来回答

1个回答

热心网友 时间:2024-10-01 12:07

如何在浏览器console控制台中播放视频?

要实现这个目标,主要涉及到这几个点:

如何获取和解析视频流?

如何在console里播放动态内容?

如何在console里播放彩色内容?

如何连接视频流和console?

事实上最后的代码极其简单,我们就一步一步简单讲一下

效果

测试地址:https://yu-tou.github.io/colors-web/dist/camera.html

如何获取和解析视频流?

这里我们用电脑摄像头捕获视频流,然后获取视频流每一帧的图像数据,作为下一步的输入。

//捕捉电脑摄像头的视频流constmediaStream=awaitnavigator.mediaDevices.getUserMedia({video:true,audio:true,});//创建一个video标签constvideo=document.createElement("video");document.body.appendChild(video);video.onloadedmetadata=function(e){video.play();//等摄像头数据加载完成后,开始播放};//video标签播放视频流video.srcObject=mediaStream;

如何获取每一帧图像的数据?创建一个canvas画布,可以将video当前的内容绘制到画布上,然后通过canvas的方法即可拿到图像的像素数据。

constctx=canvas.getContext("2d");canvas.width=width;canvas.height=height;ctx.drawImage(video,0,0,width,height);constimageData=ctx.getImageData(0,0,width,height);constdata=imageData.data;//imageData的结构是平铺的,需要自己去学习下如何在console里播放动态内容?

视频每帧的图像内容我们已经可以拿到了,继续下一步,如果需要在console中完成播放视频,首先需要能够一帧一帧绘制内容,但是这个好像是不太现实的,console.log只能输出文本。

回想远古时代,在终端里大家怎么播放视频的?没错,用字符画一帧一帧绘制,连起来不就是动态的视频了。

当然chromedevtool里如果每一帧绘制后都调用console.clear()清空重绘,体验不是很好,闪烁会很严重,所以我们采用持续输出的方式绘制,当你停留在console的最后的时候,看起来也算是动态内容了。

如何在console里播放彩色内容?

console.log支持部分css特性,可以为输出的字符串指定简单的样式,最基本的支持背景色、字体颜色、下划线等,甚至支持background-image、padding等特性,利用这些特性,甚至可以插入图片,但是这些特性在不同浏览器的console中或多或少有些兼容问题,不过要实现字体着色,或者输出色块(用背景色),问题不大。

我们在此使用colors-web来更方便地输出彩色内容到控制台。

这是一个非常方便的库,可以使用链式调用在控制台快速输出彩色内容,并且支持诸多特性,无需自己去了解,直接使用对应的方法即可。

如:

import{logger,colors}from"colors-web";logger(colors().red().fontsize(48).fontfamily("SignPainter").log("hello"),colors().white.redBg("hello").linethrough(),"world",colors().white.padding(2,5).underline().lightgrey("芋头"));

相信我不解释,大家也基本理解这些用法,非常简单和自由,而且支持typescript。

我们这里,用colors-web输出色块:

for(leti=0;i<height;i++){for(letj=0;j<width;j++){if(i*width+j<data.length){constcolor=`rgb(${data[(i*width+j)*4+0]},${data[(i*width+j)*4+1]},${data[(i*width+j)*4+2]})`;colors().bg(color).color(color).fontfamily(/Chrome/.test(navigator.userAgent)?"Courier":"").log("╳");}}}最终逻辑

最终我将每一帧所有的像素值都转换成一个colors的实例,记录到数组之后,最终统一调用logger即可完成一帧的渲染。

constframeColors=[];for(leti=0;i<height;i++){for(letj=0;j<width;j++){if(i*width+j<data.length){constcolor=`rgb(${data[(i*width+j)*4+0]},${data[(i*width+j)*4+1]},${data[(i*width+j)*4+2]})`;frameColors.push(colors().bg(color).color(color).fontfamily(/Chrome/.test(navigator.userAgent)?"Courier":"").log("╳"));}}}//绘制,colors()只是在准备数据结构,logger才是真正的输出logger(...frameColors);

大功告成啦!

相关资料:

colors-web的代码地址:https://github.com/yu-tou/colors-web

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 孩子上学的年龄? 国庆晚会串联词 串联的是诗朗诵《祖国啊,我亲爱的祖国》和歌曲《走进... 羊皮卷讲的啥 羊皮卷介绍 羊皮卷内容讲的是啥羊皮卷简单介绍 羊皮卷内容讲的是啥 羊皮卷简单介绍 少儿编程是不是有必要学啊? 如何把手机屏幕弄干净?求日常用品就能搞定的方法~谢谢啦~ 写5个60字的运动会加油稿。不能抄网上的 韩国街舞比较厉害还是欧美的街舞厉害?求大神帮助 ...locking,c-calk,jazz,的意思及意义跟我讲一下?求大神帮助_百度... hip-hop和rap有什么区别吗?求大神帮助 我想买张多功能茶台,请问那个品牌的比较啊,高手指点。 多功能茶台 正品森海塞尔cx500多少钱能买到 头条号怎么才能日赚50元+呢? 合肥有多少个森海迷啊 今日头条创作文章怎样才有收益?今日头条高收益技巧! 在今日头条怎么才能赚钱? 安徽哪里有icemat的西伯利亚卖? 今日头条怎么有收益?怎么提现? IPAD上看监控问题,使用的是大华的DVR以及他们提供的软件(IDMSS),出不... 调整深入浅出Linux系统时间调整linux系统时间 黑色丝袜怎么配衣服 黑色丝袜配什么穿好看 穿黑色丝袜应该要如何搭配衣服 眼睛上下眼皮红肿、发痒怎么办 眼皮又红又肿又痒怎么办 下眼睑有红点怎么回事 13400mAh双向快充 乐视超级移动电源有哪些特色? 乐视超级移动电源怎么样?芯值口快亮点揭秘 乐视超级移动电源 乐视超级移动电源怎么充电 上海华通高压开关电器有限公司的彩票是真的吗 乐视双向快充超级移动电源怎么样 乐视超级手机充电头能不能给乐视超级移动电源充电? 上海华通高压开关有限公司彩票是真的吗 有这样一个公司吗 抽真空原理 管道如何抽真空 用铁锅炒菜能有效补铁,说法靠谱吗 空调抽真空是什么原理? 这个女的好拽的,是个惹不起的+是别人旁人说我+是个什么意思解释一下... 如何设置文件夹的打开方式为详细信息?