查看详情

VR 中 Monoscopic 和 Stereoscopic 的区别

无论是 VR 拍摄还是 VR 开发中,我们都会遇到这个问题,关于Mono(monoscopic) 和 Stereo(stereoscopic) 的选择。这里简单给大家科普下 在 AR/VR 显示技术原理 (上) 中,曾经涉及到,双眼和单眼成像的区别。而 Monoscopic 和 Stereoscopic 的区别就和这个相关。 Monoscopic (简称 mono) 实际上来源一个镜头的采集,通过本身角度的变化,类似于从0-360 这样来进行连续采集,而这样的图片在还原的时候,有个特点,就是周围距离自己的距离是一致的,比如最近自如VR 的单摄像头拍摄就是这个原理。 Stereoscopic(简称 stereo ) 实际上是双摄像头进行采集。我们知道人体双眼对距离的感知是很明显,所以这种方式采集对物体的距离感非常明显,这也是专业 VR 摄像所采用的设备。比如 Insta360 Pro2 我们可以看到它的镜头分布。 而它由于是多摄像头拍摄,因此平面视频会是不同的风格, 由于这是模拟人眼的方式,因此人类在感知还原的时候对于深度和距离非常准确,VR 详情 »

查看详情

Swift 使用 Observe 监测页面滚动

Swift 以前是通过 addObserver 来实现对某个属性的变化监听,而最新的变化,书写起开更加方便。 observer = test.observe(\.field, options: [.new, .initial]) { (object, change) in print(change) } 一定要用属性赋值当前的 observe 结果,没有的话可能会造成 change 不生效。 对 UIScrollView 的滚动监听,我们可以使用 UIScrollViewDelegate extension UIScrollViewDelegate{ func scrollViewDidScroll(scrollView: UIScrollView){ //do something } } 这里推荐使用 Observe 比较方便的是可以进行模块的逻辑的拆分,我们只需在自己的组件里面进行监听 class ComponetView: UIVIew { private var observation: NSKeyValueObservation? init(targetView: UIView) { observation = targetView.observe(\.contentOffset, options: 详情 »

查看详情

gerrit 保持 commit id

最近接触到了 gerrit ,主要方便大家进行代码 Review; 当然大家可能会遇到 review 发出去后,发现还有一些需要更改的,又需要重新提交一些。为了保持同一个 commit id ,你可以使用 # 回撤 git reset --soft HEAD~1 git add . git commit -m 'paste your commit content' 你只需要把网页里面的 commit 内容粘贴进去就好,这样发就回指向到同一个 review url 地址了。 详情 »

查看详情

iOS WebView 对 H5 视频播放的控制

各大厂商在媒体播放这块一般管控都比较严格,所以经常会出现一些非常规的行为,比如 iOS 唤出全屏,比如自动播放,比如画中画(PiP) 无法唤起等问题。 在 iOS 中,我们各个 App 引入的 Webview 容器都是官方推荐的 WKWebView ,我们需要它来加载我们的网页,从而完成部分功能。但是处于安全隐私的考虑,它默认的一些属性是并不开启的。其中我们比较关注的视频播放有这么几项: applicationNameForUserAgent 用于设置 WebView user agent allowsInlineMediaPlayback 是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放 mediaTypesRequiringUserActionForPlayback 允许哪些媒体格式需要用户手动触发播放 allowsAirPlayForMediaPlayback 是否允许 Apple 的 Airplay allowsPictureInPictureMediaPlayback 是否允许 画中画模式(PiP) 在 Swift 中,我们可以简单的初始化一个 webview struct WebView: UIViewRepresentable { let request: URLRequest var config = WKWebViewConfiguration( 详情 »

查看详情

Vue-core-video-player support HLS format now

As is known to us. HLS is an important video format for all big video service platform for Apple, Netflix and Tencent Video Entertainment. HLS is a media streaming protocol for delivering visual and audio media to viewers over the internet. HLS protocol chops up MP4 video content into short (10-second) chunks with the .ts file 详情 »

查看详情

五月天

发觉断了一个月,因为一些事情没有落地。 五月的北京,热了许多,空气中夹杂躁动的气息。毕竟被所谓的疫情“关了”这么久,很多人还是憧憬着自由的气息。 破局 几年前调试视频的时候看然看了郭天王的《破局》,很多时候需要有人作出决断。作出决断意味着有可能会否定之前的自己。我觉得大佬在做决定的时候,这一点特别让人佩服,能够在关键时间点止住,然后调整。人其实挺害怕迷之坚持。就像新喜剧之王一般,合适不合适,优势逆势,纵观很多事情,都是没那么容易,也没那么凑巧。 困局 三四月份,会有很多调整,有朋友换工作,有各种各样的原因,这么些年来早日习惯,突然某些人会告诉你 Last Day 是几号。从去年开始自己不停的接受这样的消息,我认为所谓大轮换,虽然很惨,但是面对这样的事情,更多的是无力。自己也会警醒,如何避免这种事情发生,自己其实也还是没有所谓好的措施,大概创业为什么九死一生,我觉得可能这个问题就很难想到特别好的解决方法。 败局 一直想用这个词来总结过去一些日子。从某种角度这是个人对于这年龄面临问题的一种态度的散漫。无论时间管理怎样,自始至终一直认为,意志力是一个特别重要的事情。越发感觉这个年龄的执行力,尤其个人事情的执行力,和几年前退步越发明显。很难去界定什么因素影响了这些,计划于兑现的出入, 详情 »

查看详情

iOS 13+ Safari 启用陀螺仪授权

iOS 13 在升级的时候 Webkit 更新了部分描述,其中有一点 Added a permission API on iOS for DeviceMotionEvent and DeviceOrientationEvent. 开始对设备运动和旋转进行授权才可以启用数据的读取。 关于设备运动和旋转的数据,iOS 12+ 时候就进行过一次调整,需要用户手动前往 Safari 设置。这个时候你需要提示用户如何进行设置; 当然对于 iOS 13 的话,我们需要在用户和页面交互后,出发 权限申请; $('.btn').on('click', function() { if (typeof DeviceOrientationEvent.requestPermission === 'function') { DeviceOrientationEvent.requestPermission() .then(permissionState => { if (permissionState === 'granted') { // handle data } else { // handle denied } }) .catch( 详情 »

查看详情

头条/支付宝/猿辅导 Web 前端面试经历

由于公司年前的一些战略调整,和自己预感公司路线的担忧,自己也不得不提前准备一些后路,这期间陆续面试了头条,西瓜视频这边,支付宝公益这边和猿辅导这块。这次和三年前的职业变更,leetcode 刷了一些,但是其实也没刷多少,至少面头条的时候,也只是刷了少数 easy / medium 和那些后端相比少了很多。 然后就是特别推荐这个技术图,去准备复习的知识点: 现代前端技术知识体系 这期间,还有就是对自己特别模糊记忆不清楚的一定记笔记,这期间自己 Evernote 也不断誊抄“答案” 也有 32篇左右,主要还是需要不断加强记忆,尤其面试前。 简单说下三家的各自经历吧。 字节跳动-视频架构 这个大概是十一月面的,这个时候离职意愿还没有那么强烈,而是帮助前同事去完成一个内推名额。打心底,我觉得头条加班多,以及江湖一些小恩怨,我不太偏向去。不过面试还是认认真真的准备,听闻面试很难,加上自己本身是偏 Engineering (Production > Science)多点那种, 所以感觉跪的概率还是比较大。 大概一面是交叉面,是在头条的海淀总部那边,是安全的前端小哥,感觉年龄很年轻(我前同事说她去头条最大感觉就是小鲜肉太多了)。一面纯粹是基础面试题,涉及 JS 的非常多,大概题目我后面记录了下: 详情 »

查看详情

Web 前端崩溃监控优化历程

如何监听浏览器崩溃一直都是前端的难点。本文利用 Service Worker 的一些特性,实现对页面的崩溃的监控。 详情 »

查看详情

【译】人眼对 AR 空间的理解

原文链接: https://uxdesign.cc/human-eyes-understanding-of-space-for-augmented-reality-d5ce4d9fa37b @Kore 从工程的角度来看,我们的眼睛是精密的光学传感器,其结构长期以来一直被用作设计相机的蓝图。光通过一系列光学元件进入,其中折射和聚焦都发生在这里。光圈控制通过光圈的光量。随后的光图案落在图像平面上,电信号从该图像平面发送到大脑。然后将这些信号解码为图像。尽管眼睛的功能本身就是一个有趣的话题,但是为了简单起见,我还是自由地忽略了眼睛如何工作的很大一部分。但是,我敢肯定,您会有所了解。 可见光谱 人类的视觉离不开光的存在。光是电磁辐射的一种形式,是刺激人类视觉的关键。这种辐射以波的形式在空间中移动,并能够刺激视网膜产生视觉感。电磁辐射根据其波长进行分类,波长是波的两个波峰之间的距离。尽管整个电磁频谱都包括无线电波,红外线,X射线和其他波类型,但人眼仅对380-740纳米之间的款窄带*敏感。这称为可见光谱。 1纳米= 1米的十亿分之一 人眼的基本特性 视场角(FOV) 它定义为两只眼睛都能看到的图像的总角度大小。平均而言,水平双眼FOV为200度,其中120度为双眼重叠。双眼重叠对于进一步讨论的立体和其他深度提示尤其重要。垂直视场约为130度。 瞳距(IPD) 顾名思义,它是眼睛的瞳孔之间的距离,是双目观察系统的一个非常重要的考虑因素。这个距离因性别和种族而异。不正确的IPD可能会导致不良的眼镜对准,图像失真,眼睛疲劳和头痛。成人的平均IPD约为63mm, 详情 »