查看详情

【译】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) 这个比较好懂,就是人眼瞳孔的距离,它在双目视觉系统有着重要的影响。瞳距在不同的人之间,性别之间以及人种之间都不一样。错误的瞳距计算会影响眼镜的对齐,图形失真,视觉疲劳以及头晕。 详情 »

查看详情

【转】你真的了解当年看过的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 周围的细节, 详情 »

查看详情

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: ', 详情 »

查看详情

Oculus 自动唤起 VR 模式

移动设备相对传统 PC , 对 Web 的限制相对而言会更加严格一点,尤其 Webkit 针对 网页的权限限制非常严格。 比如我们常见的自动播放,随着 Safari 的限制,后面 Chrome 也开始限制音视频的自动播放功能。 同样的对于头显类设备,注入 Facebook Oculus 系列(Go, Quest 等),三星 MR 等,作为移动设备对音视频同样采取了一些限制。我们在开发 VR 的时候,必然需要唤起 VR 模式, 类似自动播放 的策略,我们也需要做唤起 VR 的手势交互逻辑。 当然唤起失败后,我们需要在界面出现点击的按钮,让用户手动点击。 // display 是 之前 navigator.getVRDisplays() 获取的关于可用头显设备对下 display.requestPresent([ { source: canvasElement, }, ]) .then(() => { console.log( 详情 »

查看详情

Web 多媒体开发指南

一般接触音视频开发的前端比较少,但实际里面涉及的知识点非常多,因此做一个脑图,帮助有兴趣的同学学习和研究相关知识点。 基本 Web 多媒体开发覆盖非常多的方面,其中,视频,音频,以及 WebRTC 都比较成熟,而近年来的 WebXR(AR/VR) 也成为大家比较热情研究的内容。它旨在给人类带来听觉和视觉上的冲击。 其实 Mozilla 做过一个专项的列表 Web media technologies ,列举出当前音视频的知识点。 Audio Video WebRTC Media Capture and Streams API WebGL WebXR WebVR 虽然看着只是一个小的点,但是进去了解后,其实每个领域都需要掌握一定基础知识才能深入学习。 于是自己的初衷便是罗列一些关键的知识点帮助大家有一个总体的概念。 Github 地址: https://github.com/JackPu/web-media-developer-guide 罗列一些常用的知识点和资源: Video Video 元素 Video Element Video Events 详情 »

查看详情

iOS 12 静音模式下 AudioContext 无法正常播放的 Bug

最近收到用户反馈,网页的背景音乐播放没有声音。 然后我们就按照正常的流程 Debug 。但是我拿到我的 iPhone 7 测试的时候,但是发现是可以正常播放的,但是 iPhone XS 确没有办法播放。 而且这次非常悬疑的是,iPhone XS 的又是可以正常播放虾米音乐的的歌曲。 此时此刻,宝宝的心情,只能用如下图表示: 随后开始看代码,项目的背景音乐是启用了 AudioContext 。这个时候我们强制设置 AudioContext 的音量来,看下是不是 iPhone XS 的问题; const audioCtx = new AudioContext(); let source = aCtx.createBufferSource(); let buf; const gainNode = aCtx.createGain(); // Create a gainNode reference. gainNode.connect(aCtx.destination); // Add context to gainNode 详情 »

查看详情

Web 播放 H.265视频

本文主要从H.265 编码格式出发,介绍 H265 使用情况,以及对比 H.264的优势,随后分析如何在前端完成 H265 视频格式的播放。 H.265, HEVC 是当前非常火的视频压缩方式,相对于大家熟知的 H.264 ,平均可以带来接近于 50% 的宽度节省。这对于我们做视频的开发者而言,无疑我们可以在同等流量下拿到更多的 Buffer,无论是直播还是视频播放都是非常有收益的事情。 HEVC (H.265) Vs. AVC (H.264) H.265/HEVC的编码架构大致上和H.264/AVC的架构相似, 主要也包含,帧内预测(intra prediction)、帧间预测(inter prediction)、转换(transform)、量化(quantization)、去区块滤波器(deblocking filter)、熵编码(entropy coding)等模块。 详情 »

查看详情

使用 prefetch 全量加载 音频或者视频

之前写过 《如何强制Html5视频进行全量加载》, 大致实现原理是 通过 XHR 进行资源的请求,然后在通过 URL.createObjectURL 创建一个本地播放对象。初次之外,我们现在还可以通过 prefetch 来实现视频的预加载。 Prefetch Prefetching 是 W3C 新草案提出一种资源预加载的的标记。它允许你提前将一些将来的用到的资源或者图片提前进行请求,并将它存在缓存中方便你调用; <link rel="prefetch" href="./image.png" /> <link rel="prefetch" href="./lib.js" /> 它对浏览器有要求,但是不能识别这个标记类型的,浏览器会自行忽略掉; 虽然不同浏览器的实现不一致,但是最新版本的浏览器都还是支持了这个属性,不过它还取决于网络条件,如果网络条件不是怎么好的话,可能浏览器会放弃这个请求; 当然除了 prefetch 我们还可以了解下 详情 »