手机摄像头:USB 还是 Wi-Fi,差在哪
关于这个话题的每一篇指南,说的其实都是同样的一句话:USB 更快,Wi-Fi 更方便。这句话本身当然是对的,但是它并不怎么有用,因为它并没有告诉你到底快了多少、为什么会快,以及这个差距在什么时候才真的要紧。
下面要讲的,是在一套把手机当作网络摄像头来用的方案里,那些延迟到底是从哪里来的,其中包含了我们在 TapCam 里面实际测量过的那几个环节,以及你应该按照什么样的思路,在这两条路之间做出选择。
延迟实际上出在哪里
从手机的传感器一直到你电脑上显示出来的画面之间,一帧图像一共要经过四个阶段。
- 在手机上采集并编码。 摄像头先产生出一帧画面,然后手机把它压缩成 H.264 格式。这在两个平台上都是硬件完成的工作,而且速度很快。
- 链路。 压缩好的这一帧穿过 Wi-Fi 或者数据线,到达电脑那一端。
- 缓冲。 电脑有可能先把这一帧短暂攥住再显示出来,目的是抹平参差不齐的到达速率。
- 解码并显示。 电脑把这一帧解压开,然后当作一帧摄像头画面交给 Windows。
真正有意思的地方,在于这四个阶段里面到底哪几个是要花掉时间的。在 TapCam 里,第四个阶段并不是问题所在的地方:在电脑上解码一帧 720p 的画面,大约只需要 4 毫秒,这相当于在面对一条 30 帧每秒(30 fps)的流时,还留着大约 250 帧每秒的余量。解码这一步离真正的瓶颈还差得非常远,而且就算换一台再快的电脑,也不会让画面早一点到达。
而第二和第三这两个阶段,才是数据线和 Wi-Fi 之间那个差别真正所在的地方。
为什么 Wi-Fi 需要缓冲,代价是什么
Wi-Fi 并不会以一个均匀的节奏把画面一帧一帧地送过来。它会把其中的绝大部分都很快地送到,然后把另外一小部分送得晚一些,因为它必须和信号范围之内的所有其他东西一起共享同一段空气。而视频编码器还会有意无意地把这件事弄得更糟一些:它每隔一段时间就会发送一个关键帧(keyframe),而一个关键帧的体积是普通帧的好几倍,因此它到达所花的时间也会相应地变得更长。
如果每一帧一落地就立刻把它播放出来,那么最后得到的结果并不会流畅,反而会一顿一顿的:一连串画面提前到达并且挤在了一起,然后又有那么一帧迟到了,于是画面就会卡住一小会儿。TapCam 曾经就遇到过一模一样的问题,它当时表现为每隔十秒钟左右就抖动一下,而它背后真正的成因,正是那些关键帧所造成的突发流量。
解决的办法是一个抖动缓冲区(jitter buffer):把每一帧都先短暂地攥在手里,然后再以一个稳定的速率,把它们一帧一帧地放出去。TapCam 攥住的是一帧画面,而在 30 帧每秒的情况下,这大约就是 33 毫秒。这就是在 Wi-Fi 上换取流畅动作所要付出的那笔价钱,而且这笔价钱是完全值得付的,因为一次卡顿要远比三十分之一秒的延迟显眼得多。
而在数据线上,TapCam 会把这个攥住不放的动作整个跳过去。 数据线上并不存在那种到达时间参差不齐的现象,而抖动缓冲区的存在本来就是为了吸收这种参差的,所以这里根本没有什么需要被抹平的东西。这也正是两者之间那大约 33 毫秒的差距真正的来源:它并不是因为数据线莫名其妙地更快,而是因为 Wi-Fi 需要那个缓冲,而 USB 并不需要。

那么 33 毫秒要紧吗?
说实话,对于绝大多数通话来说,它并不要紧。三百毫秒的延迟,在一场对话里面是能够明显感觉出来的,而三十三毫秒则完全感觉不出来,而且你的视频应用自己的那条网络路径,在把画面送到其他参会者那里的途中,还会额外加上比这更多的延迟。
不过它在下面这三种情况下,还是相当要紧的。
- 在做录制或者做直播时,因为你需要把视频和另外单独录制下来的那条音频对上。一层层累积起来的延迟,正是让唇音和画面逐渐不同步的东西。
- 任何一种你一边移动、一边又在屏幕上看着自己的场合,比如用双手演示某个东西。看着自己的动作慢上半拍,那种迷失方向的感觉,和看着别人慢半拍完全不是一回事。
- 当你本来就已经处在临界点上时,比如在一个非常繁忙的网络上,那个抖动缓冲区正在真刀真枪地干活。
而如果上面这三条对你来说都不适用,那就不要按照延迟来选,而是按照下面列出的那些标准来选。
其他差别,往往更要紧
充电这件事。 这一点一直被人严重地低估。充当一个网络摄像头,对一部手机来说是相当重的一份活:摄像头、视频编码器和无线电模块这三样东西全都在同一时间满负荷运转,而一部手机的电量掉得有多快,可能会完全出乎你的意料。一根数据线可以让它一直保持在充电的状态。而如果走的是 Wi-Fi,那么一场漫长的会议结束之后,你的手机很可能还是得去插上充电器。
在一个你自己控制不了的网络上的可靠性。 访客 Wi-Fi、酒店、办公室和校园网络,非常经常地会把它们的客户端彼此隔离开来,而这一点会让任何一款把手机当作网络摄像头来用的应用在那个网络上都彻底用不起来。数据线则完全不受这些东西的影响,因为在它的路径上根本不存在网络这一环。
摆放的位置。 这才是 Wi-Fi 真正的优势所在,而且这还是一个相当大的优势。走数据线的话,手机就只能一直待在离电脑一两米的范围之内。而走 Wi-Fi 的话,它可以坐在房间那一头的三脚架上,可以夹在显示器的顶端,可以居高临下地俯视一张工作台,也可以正对着一块白板。如果这个机位需要把手机放在一根线根本够不到的地方,那么这件事就没有什么可争的了。
线缆带来的杂乱。 这确实只是一件小事,但是对于一张你每天都要盯着看上好几个小时的桌子来说,它又是实实在在的一件事。
数据线在每个平台上需要什么
在这件事上,数据线并不只是一根普通的电线而已。它承载的是一条真正的网络连接,所以它的两端都必须有能力在它上面互相对话。
在 iPhone 上面,Windows 需要的是 Apple Mobile Device Service,也就是 iTunes 在安装时会一并装上的后台服务。安装 iTunes 或者 Apple Devices 应用,把它打开一次,然后在 services.msc 里确认这个服务的启动类型已经被设成了“自动”。如果没有它,这根线就只能给手机充电而已,除此之外什么事情都不会发生。
在 Android 上面,电脑的那一边不需要任何额外的软件,但是手机有可能会在第一次连接时,要求你先确认一下这个连接。
而在这两个平台上,都必须用一根真正的数据线(data cable),而不是充电线。市面上作为充电线卖出去的线缆里,有相当大的一部分只负责输送电力,而这正是一套 USB 方案不工作时,最常见的单一原因。如果手机确实在充电,但是电脑那边却从来没有看见过它,那就先去怀疑这根线,然后再去怀疑别的任何东西。
该怎么选
当手机可以就近坐在电脑旁边时,那就用数据线,尤其是当你在做录制、在做直播、身处在一个你自己完全控制不了的网络上、或者正处在一场电量很要紧的长时间会话里时。
而当这个机位需要把手机放到房间里别的什么地方去时,那就用 Wi-Fi。那是一个实实在在的、创作层面上的优势,而不是一次妥协,而 33 毫秒对于它来说,是一个非常小的代价。
如果你实在拿不定主意,那就先从 Wi-Fi 这一边开始试。它设置起来更快,对于几乎每一场通话来说它都已经足够好了,而且以后想要改用数据线,也只需要花上几秒钟。
常见问题
USB 到底快多少?+
在 TapCam 里大约是 33 毫秒,而原因很具体:走 Wi-Fi 时有一帧会被抖动缓冲区攥住,用来抹平参差不齐的到达;走数据线时这次攥住被跳过,因为没有什么需要抹平。并不是数据线莫名其妙更快。
电脑的解码速度够吗?+
绰绰有余。解码一帧 720p 大约需要 4 毫秒,面对一条 30 帧每秒的流,这相当于约 250 帧每秒的余量。延迟并不出在解码上。
33 毫秒要紧吗?+
对一场普通通话来说,不要紧。它在你录制或者直播时、在你一边演示一边看屏幕上的自己时,以及在缓冲区真正在干活的繁忙网络上,才会要紧。
为什么我的 USB 数据线不工作?+
最常见的原因是它只能充电,而不是一根数据线。在 iPhone 上,Windows 还需要 Apple Mobile Device Service,它由 iTunes 或者 Apple Devices 应用安装。
什么时候 Wi-Fi 是更好的选择?+
只要机位需要把手机放在数据线够不到的地方:房间那头的三脚架上、夹在显示器上、俯视一张工作台。那是实实在在的创作优势,为它多付一点点延迟很划算。



