查看详情

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

查看详情

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( 详情 »

查看详情

《天气之子》圣地巡礼

《天气之子》 已经热映许久,大陆上映也基本确认消息 新海诚新作《天气之子》上映倒计时 。 当然新海诚的作品,由于很多写实的手法,导致观众可以在动画里看到很多现实的场景的重绘,比如言叶之庭的 新宿御园,比如你的名字里面东京,统一《天气之子》大量采景是在东京完成的,因此你可以看到台场,新宿的诸多场景。 感谢 @小希在日本 提供的搜集信息,这里汇总一下一些动画电影里的场景。 后续有新的,也会在这里更新。 详情 »

查看详情

新海诚新作《天气之子》上映倒计时

国庆节前,终于官宣。11月1日上映。官微里说的 2019日本年度票房冠军, 导演新海诚历时三年打造! 穿过云之彼端,无论你在哪里,我一定会去见你! 11月1日,再一起看吧 💙 同时更新了一版定档海报。 之前光线旗下动画工作室 彩条屋 发布关于《天气之子》 的定档消息。 新海诚导演全新力作#天气之子确认引进#,即将定档! 三年前,和你在@你的名字官微 相遇, 三年后,我们在@电影天气之子 重逢。 有一种陪伴,是#从你的名字到天气之子#,一直在你身边。 ​​​​ 还发布一款宣传海报。 三年前,《你的名字》第一次登陆中国大陆院线,让新海诚的全球票房赶超老前辈宫崎骏的《千与千寻》,三年过去了,相对前作,《天气之子》对于新海诚更加重要,记得《你的名字》看完后,自己评价: 了解新海诚的话,看过之前的作品,除了《追逐繁星的孩子》,其余短而美。几十分钟的时间支撑起线性的故事。然而这次很惊喜,如同彼此连接的红绳,相互连接,穿越彼此的交织。 详情 »

查看详情

开学第一天

八月一晃就过,北京天气晚上渐渐凉了起来,多风的阳光,晴空里慢散的云,晨曦里慢慢吹起的雾,秋日或许就慢慢来了。 虽说公司走的季度来划分,但是自己还是分成寒假后或者暑假后。每次开学第一天,想想春节回来在个人主页上的目标,又是尼克杨表情? 原来我还写了这么多... 当然,这也无疑意味亚历山大的下半年。 八月中旬第一次去了深圳,确实高楼耸立,夜景很赞。节奏和环境都那么适宜,有时候就感叹人对于城市的宿命,毕业最不想去北京,可是还是来了这个城市,谁也没想到还能呆这么久,或者更久。一年半后再见 Momoko,聊的最多的是希望,很多人一路走来,很多时候觉得“大义”很重要,记得09年高三申请QQ陆陆续续加回一些好友,十年过去了,还能聊的朋友渐少,大概这就是曾经一直理解的羁绊吧。 突然的离别。没能想到八月份的时候会和很多朋友道别离。长这么大,其实这种经历也算别样的体验。大概一直以来都没能经历所谓那种悬崖式的掉落,但是也还是佩服 Ayden 的果断。这种执行力和“果断”确实不是一般人。或许有的时候其实别离也挺好的,新的机遇或许会更适合。 开学第一天,愿希望与你同在。 Cover via Penzi.Wechat. 详情 »

查看详情

微信小程序连接蓝牙打印机采坑之旅

目前小程序生态越来越丰富,微信给予了小程序一定的硬件通信能力这是之前 Web 很少尝试的事情。 关于蓝牙,常见的就下面几个 API: startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 openBluetoothAdapter 初始化蓝牙模块 wx.onBluetoothDeviceFound 监听寻找到新设备的事件 wx.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 wx.onBLEConnectionStateChange 监听低功耗蓝牙连接状态的改变事件 wx.createBLEConnection 连接低功耗蓝牙设备 不过实际我们在实现过程中,我们可能还会遇到一些本身 API 在不同平台上 BUG。 中文乱码 打印的时候,第一个发现的问题便是打印机无法正常打印中文字符串。在向蓝牙写数据的时候,我们实际上市向蓝牙发送的 buffer ,因此我们需要将对应的字符串转换成设备可支持的中文转码,比如 GBK GB2312,网上有一些现成的库,安利一个简单的 github https://github.com/inexorabletash/text-encoding 这样的话,我们只需要进行引用,然后 // text-encoding 为引用的代码目录 import { TextEncoder } from '../text-encoding'; 详情 »

查看详情

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 详情 »

查看详情

【译】Netflix 是如何重构新的播放器 UI

原文地址: https://medium.com/netflix-techblog/modernizing-the-web-playback-ui-1ad2f184a5a0 这一篇是奈飞前端工程师分享 Web团队在构建新的播放器时候遇到的困惑和解决思路,我们在设计播放器的时候,可能需要考虑到诸多方面,UI 扩展,测试,底层设计,面向多业务多团队等。希望这篇文章可以帮助到你。 从2013年开始,Netflix 的团队一直将重心放到开发视频播放的新特性,而始终未关注播放的视觉UI的改进。 而在过去两年,Web UI 团队制定了一个非常长远的计划,给我们的会员提供更加出色的播放体验。 播放由下面三个维度构成: 播放前(Pre Play,前贴) 主要是视频播放前给用户呈现的内容 视频播放中(Video Playback, 中场) 当用户正在观看视频,用户进行视频播放、暂停控制,调节音量等 播后结束(Post Play, 后贴)当用户观看的视频结束的时候,出现下一集或者推荐内容等 在经过复杂的 AB 测试, 以及随后的总结,我们完成了我们播放器的 UI,下面是我们的分享这一路的心得体会。 成功没那么容易 从2016开始,我们优先是使用 React 详情 »

查看详情

立秋

今日立秋,刚好也碰上北京奥运会11周年。从08年到19年,很快,如果说08年奥运会的晚上发生了什么,除了震撼的开幕式,记得印象深刻的是那天居然下午4点钟停电了,然后大家都自嘲着,关键时刻让大家看不成奥运会,中央可以要问广播站罪的。自己喜欢70,80年代的小说,总的来说书中描绘的场景离童年所经历的一些事情有那么相似。固然,回忆就是那么回事,更多让人充满着惆怅和坦然。 挣扎 」 不知不觉在新的职责上又是一年。其实这个年龄段似乎越发变成一条挣扎线。往前是挥别风华正茂 的年青岁月,往后是步入人们严重油腻的中年大叔。挣扎的不是时间,可能更多的是 不得不去接受曾经不认可的现实 压力 」 记得去年立秋 自己希望送给一句话: 快乐工作,认真生活 相信这也是很多同事所梦想的事情。不觉得现在工作有多大压力? 说实话压力是无形的,虽然不曾会有洛瑞所描述的: 洛瑞在采访中说:“其实我知道你想听到什么,但我想谈谈别的。在我看来,生活的压力才是真正的压力。我的母亲和外祖母经历过这些真正的压力,我自己、我哥哥、我堂兄、我的其他小兄弟都经历过。我的母亲和外祖母每天早上5点起床上班,在出门前她们还要为我做早餐,她们每天都会在冰箱里为我放上一碗麦片粥和一些牛奶以防我会饿到。我的亲人为了让我能生活下去拼尽了全力,这些才是压力。” 是的我们中的大多数,不会有为了生计如此拼搏,可是,我一直觉得压力最大的时候,是我们明明可以做的更好,我们却因为自己的失误或者懈怠,而选择视而不见。 详情 »