查看详情

快速实现本地 https 预览

一般我们本地预览的时候,一般就用 localhost + 端口 就行了,再有需要的话,会类似修改 Hosts ,然后进行域名的绑定 127.0.0.1 dev.xxxx.com 这样我们可以借助本地 hosts 来实现对域名访问本地的服务。 借助 Fiddler 或者 Charles 可以实现代理,从而让手机进行域名的访问。 不过我们有的时候需要访问 https 的服务。 这个时候相对来说,我们可以在使用 serve 基础上,安装 https-localhost 来进行服务的启动。 在这之前,我们也需要安装 nss 。 brew install nss 然后,我们执行 npm 安装命令就好。 npm i -g --only=prod https-localhost 安装完成后,这个时候我们进入目录。 serve ./ 如果我们看到这些字样 Serving 详情 »

查看详情

【译】AR/VR 显示技术原理 (上)

原文地址: https://medium.com/hackernoon/fundamentals-of-display-technologies-for-augmented-and-virtual-reality-c88e4b9b0895 @Kore 随着 Google Glass 和 HTC Vive 给大家带来了对于增强现实和虚拟现实的体验,头戴设备正在成为新型趋势。核心的是对于 头戴设备屏幕 (head-mounted displays,HMDs),它包含两个基本的元素: 光学元件和 图形显示。 光学 在了解光学基础之前,我们需要先弄懂人眼的基本属性。 视场 FOV (Field of View) 它主要表示人眼所能看到的图像最大角度范围。一般人的话,我们水平方向双眼是 200 度,会有 120 度的重叠。双眼重叠部分对于人眼构建立体和景深非常重要,这个我们会在后面讲到,而垂直视角大约为 130 度。 瞳间距 IPD (Inter-pupillary distance) 这个比较好懂,就是人眼瞳孔的距离,它在双目视觉系统有着重要的影响。瞳距在不同的人之间,性别之间以及人种之间都不一样。错误的瞳距计算会影响眼镜的对齐,图形失真,视觉疲劳以及头晕。 详情 »

查看详情

WebP 可用性探测

webp 是目前 Web 比较流行的解决方案,相对于 Jpeg/png, 基于 VP8 的压缩,有着非常不错的压缩率。 WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index 比较基础的方法,还是检测 UA 白名单来说,毕竟这些版本都是很早就支持。 这个方法可控性大,而且能够支持 SSR 渲染,在服务端做 UA 判断然后输出对应的图片格式。 当然,常规的另外一种解决方式是,就是远程加载一张 webp 图片观测是否报错 function checkWebPSupport) 详情 »

查看详情

【转】你真的了解当年看过的AVi么

感谢 “珠思码记” 授权转载,微信搜索 “珠思码记” 关注公众号。 自从接手优酷的web播放器之后,点了快一年的播片儿技能点,感觉技术面变得越来越偏门,至少在前端界播片儿(音视频)技术一直水花甚少,真是一入片儿技深似海,从此前端是路人。 想在被世人遗忘之前 出书立传,又恐无人问津。 哈哈扯远了,既然一只脚伸到音视频技术这个泥潭里搅和了一圈之后,总要写点什么。这篇主要是来闲聊,从大家打小看过的片儿里扯一扯音视频格式的前世今生。 主要是讲故事,感兴趣的话可以一看。不感兴趣的话,可以直接点赞打赏红包转账了[手动狗头]。 想必很多人的硬盘里都会有这些奇奇怪怪的文件吧。文件名啥的可能各有不同,但扩展名大家一定耳熟能详:.avi .rmvb .mkv .3gp bla bla~。 而且随着时间的推移,当你在网上down片儿的时候,发现有些已经不常见了,新的又冒了出来。那这些都是什么玩意儿呢? 那我要先解释一个概念 敲黑板 0x01 封装格式/编码格式 可以看出,上面像mkv avi什么的都是视频的封装格式,或者说容器格式。如果把视频的内容比作酒的话,那所谓封装格式其实就是这个酒瓶。有酒瓶才好运输(网络传输下载)和保存(文件形式放在硬盘上) 详情 »

查看详情

理解 MPEG 的 MOVIE ATOM

原文地址: https://www.adobe.com/devnet/video/articles/mp4_movie_atom.html @Maxim Levkov 本文是来自 Adobe 的工程师撰写的,用于帮助大家学习 moov atom 以及对比了整个 Adobe Flash Player 支持的视频流格式,加深对 moov atom 的功能和位置的理解。有助于我们进一步理解视频编解码想过的知识。 User level Advanced 要在Adobe Flash Platform上播放的视频文件比较简单。但是,经常令人困惑的一个不太能够理解 moov atom, 它包含有关视频文件相关的信息。moov atom 也被叫做 Movie atom,它里面定义视频的时间尺度,时长,显示特性,以及含有用于在电影每个轨道信息。moov atom 的最佳位置取决于所选的传输方式。本文深入研究moov atom 周围的细节, 详情 »

查看详情

React-360 框架最新进展

由于 react-360 已经很久没有进行代码变动了,让人都很怀疑这个项目是不是快要关停了,最近 OC6 也没有发布新的 设备,让人还是很担心这个项目的未来。 不过最近开发者一,统一回复了大家 传送门 #75 作者回答了关于 WebXR 的集成和最近一些变化, 大概总结下: 作者表示一直在默默的工作,但是需要有明显的变化才会加快目前代码的变动,新的架构方式,可以关注 packages 增加内容 WebXR 草案上周才刚刚结束,因此我们会保持等待的姿势等待 WebXR 正式推出,当前代码的设计会非常方便的进行对 WebXR 的支持 计划取消掉 React-Native 的引入,我们会自己实现模块管理和渲染的方式,这位有助于提升在 Oculus go 或者 Oculus Quest 上的渲染速度 总之,大家需要等待,并保持耐心。 详情 »

查看详情

新博客改造的一些有趣的技术要点

最近随着 Ghost 升级,博客主题也做了一些动效的调整,这里面有一些比较有意思的细节,可以和大家分享下。 Ghost-Theme 落地页动画衔接 从首页列表点击进去,实际上是比较简单的 transition 过渡,主要是利用透明度变化和背景图片的放大缩小来完成的。 .cover, .overlay{ content: ''; display: block; position: absolute; top: 0; left: 0; right: 0; height: 100%; background-color: #000; background-position: center center; opacity: .2; background-size: cover; } .cover{ opacity: 0; transition: opacity 1.5s, transform 2s; transition-timing-function: cubic-bezier(0.5, 0, 0.2, 1); background-color: 详情 »

查看详情

Ghost 版本升级

Ghost 是一款 Node.js 上非常好用的的内容发布平台。 The professional publishing platform 由于博客是 15年暑假弄得,那个时候 Node 版本还比较低,而且那个时候 Ghost 还并非是一个特比出色的产品。不像现在非常强大,有很多的主题可以选择,更加人性化的后台管理。 升级到 1.x 由于我已经很多年没有升级了,这次升级需要先从 0.x 的版本升级到 1.x 的版本,然后再升级到 2.x 的版本保持和 Ghost 的产品线一致。 无论如何都先请备份好你的博客 JSON 数据 资源和图片(content/images) 这目录。 你可以在后台 labs 选项里看到 export 选项,然后选择导出即可获得博客的 JSON 数据资源。 而图片目录需要自己去服务器上进行拷贝。 安装 Ghost-cli ghost-cli 详情 »

查看详情

WebVR 可用性探测

Chrome 在 72 或者之后的版本开始支持 WebVR 的 API (75+ 移至 WebXR 的草案之中)。包括所有集成 Blink 内核的浏览器都会默认支持这个 API。但是实际上,我们做 VR 开发体验的时候还是希望能在合适的头显设备(HMDs)进行功能展示。 我们看下 caniuse 对 WebVR 的支持情况 其中显示: 这个意思是目前依旧需要手动开启功能,对于 Oculus 或者 HTC vivi 的头显,集成 Chrome 内核的浏览器都对该功能表示支持。 由于国内厂商集成内核版本的问题导致一些移动端浏览器默认开启了对 webVR 的支持,但是实际效果并不是理想。 我们常规检测是 if (typeof navigator.getVRDisplays === 'function') { navigator.getVRDisplays().then(displays => { if (displays.length) { // support 详情 »

查看详情

Web Video MimeCodec 究竟代表什么意思?

大家才开始学习 MediaSource 的时候,我们都会好奇,其中指定 mimeCodec 的行为: var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'; if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) { var mediaSource = new MediaSource(); //console.log(mediaSource.readyState); // closed video.src = URL.createObjectURL(mediaSource); mediaSource.addEventListener('sourceopen', sourceOpen); } else { console.error('Unsupported MIME type or codec: ', 详情 »