咳咳,众所不太周知,很多小伙伴在使用华为手机进行屏幕录制的时候,可能会遇到这样一个现象:一旦有电话打过来,录屏就会戛然而止,并且系统会自动把当前已经录制好的视频片段妥善保存在图库里。那你知道它为什么要这样设计吗?其实,这背后隐藏着系统底层严密的逻辑。我们的系统已经把能想到的问题、可能遇到的场景,都提前给我们做好了预判和解答。
在深入探讨来电停止录屏的原因之前,我们先来科普一下,录屏功能究竟是如何把声音录进去的?从技术原理上讲,一共有两种主要方式。第一种方式是通过麦克风采集外部声音。当用户触发录屏时,系统底层会向正在执行或将要执行录屏任务的 APP 发送一条明确的指令:“下面的 APP 听着,我现在要启动录屏了。我希望你调用麦克风来录制外部的环境声音,而不是通过虚拟声卡去抓取系统内录的音频。” APP 接收到这条指令后,就会乖乖调用麦克风收音,而非直接使用系统内录通道。这样做有几个非常明显的优点:首先,它能够精准录到外部别人说话的声音,或者环境中的各种白噪音;其次,对于需要做讲座、游戏解说或者教程演示的用户来说比较方便,无需后期再费力配音,完全可以边录边讲,实现音画同步。但缺点自然也是显而易见的,那就是音质相对较差,容易录入环境杂音,这一点在声学物理层面是无可辩驳的。
第二种方式则是录制系统内部发出的声音,我们通常简称为“系统内录”。在这种模式下,系统会告诉正在录屏或将要录屏的 APP:“我希望在录屏的时候,只录制系统内部发出的声音。并且,我希望你通过虚拟声卡技术,把麦克风接收到的所有外部环境声音全部过滤掉,只保留系统最底层声源(比如媒体播放器、游戏引擎)发出的纯净声音。”但这一步其实还没完,为了优化用户体验和存储空间,录制进行中时,系统还会进一步向 APP 下达优化指令:“为了不让录出来的视频文件显得过于臃肿、占用太多内存,所以我想让你在录制的时候,边录边就把音频信号下混渲染成单声道,不需要保留立体声。并且,我还有一个硬性要求:我希望你在有电话打来时,立刻停止录屏,并把当前的录屏文件自动保存在图库中。”
至于为什么系统设定的是“电话打来”时停止录屏,而不是等到用户“接通后”再停止?这个原因其实非常贴近我们的日常生活,且关乎隐私安全。大家知道,录屏的时候是把整个屏幕画面也一并录进去的。电话打来的时候,虽然你还没有接听,但手机已经跳转到了来电接听界面,此时屏幕上会清晰地显示对方的号码、归属地,甚至可能还有对方的头像和来电标签。此时如果继续录屏,那么录出来的视频画面就会不可避免地包含这些敏感的个人通讯信息。为了保护用户的隐私,防止视频分享时造成隐私泄露,系统做了一个前置的拦截策略,在电话打来的前一秒(也就是来电界面即将弹出的瞬间)就强制停止录屏。当然,具体到每个手机厂商的底层调度机制可能略有不同,有的是提前2秒,有的是提前1秒,这个时间阈值因人而异,也因手机厂商的系统策略而异。
这时候你可能还有疑问:“那为什么微信、QQ 等第三方的 APP 一旦有语音或视频电话打来,录屏却会继续保持,而非停止呢?这是什么原因?”其实原因并不复杂,我们需要从多个维度来剖析。首先,得看这个“电话”到底是谁的电话。华为自带录屏功能强制停止的,是传统的系统电话,也就是走运营商底层通话通道的那类常规电话;而微信、QQ 里的语音、视频通话,本质上是基于互联网数据的应用内网络通话(VoIP)。在系统底层看来,这并不属于同一个“电话打来”的系统级事件,所以自然不会触发那套统一的停止录屏逻辑。
其次,界面展示的差异也决定了系统的处理方式。第三方 APP 来电时,其界面未必是全屏的通话页,很多时候只是屏幕顶部的一个横幅提示,或者是一个悬浮通知,对方的号码和归属地也不一定完整露出来(很多时候只显示昵称),系统自然没必要为了一个不完整的界面信息去一刀切地停掉录屏。还有一层更核心的控制权问题:录屏到底要不要停、什么时候保存文件,最终是由调用录屏能力的那个 APP 自己决定的。华为自带录屏作为系统级应用,拥有最高权限,能直接拿到电话状态并做前置的隐私处理;而第三方录屏软件或社交 APP,如果没有在代码里监听电话状态、没有申请相关的系统权限,或者产品经理在策略上就选择了“不打断录制”,那它就会继续录。即便此时真的有运营商系统电话打来,第三方 APP 也可能只是把音频焦点让出去,画面继续录制,但声音可能会变成静音或者根本录不到对方的声音。所以,并不是第三方 APP 在隐私保护上“更勇敢”或者“更头铁”,而是它们走的系统通道、拿到的底层权限以及自身的产品策略不一样。真要把来电号码原封不动地录进去了,那一般也是这个第三方 APP 自身的隐私处理机制没做好,这口锅可不能扣在系统内录的头上。
洋洋洒洒、掰开揉碎了说了这么多底层逻辑,现在终于可以回答昨天那位希望“录音机增加系统内录”功能的朋友的问题了。我看到那个求助帖子,评论区里有很多网友信誓旦旦地说“系统底层不允许”、“安卓机制限制”等等,实际上,结合我们刚才剖析的系统调度逻辑来看,这个说法是不太准确的,甚至是对系统权限机制的一种误解。
目录
咳咳,众所不太周知,很多小伙伴在使用华为手机进行屏幕录制的时候,可能会遇到这样一个现象:一旦有电话打过来,录屏就会戛然而止,并且系统会自动把当前已经录制好的视频片段妥善保存在图库里。那你知道它为什么要这样设计吗?其实,这背后隐藏着系统底层严密的逻辑。我们的系统已经把能想到的问题、可能遇到的场景,都提前给我们做好了预判和解答。
在深入探讨来电停止录屏的原因之前,我们先来科普一下,录屏功能究竟是如何把声音录进去的?从技术原理上讲,一共有两种主要方式。第一种方式是通过麦克风采集外部声音。当用户触发录屏时,系统底层会向正在执行或将要执行录屏任务的 APP 发送一条明确的指令:“下面的 APP 听着,我现在要启动录屏了。我希望你调用麦克风来录制外部的环境声音,而不是通过虚拟声卡去抓取系统内录的音频。” APP 接收到这条指令后,就会乖乖调用麦克风收音,而非直接使用系统内录通道。这样做有几个非常明显的优点:首先,它能够精准录到外部别人说话的声音,或者环境中的各种白噪音;其次,对于需要做讲座、游戏解说或者教程演示的用户来说比较方便,无需后期再费力配音,完全可以边录边讲,实现音画同步。但缺点自然也是显而易见的,那就是音质相对较差,容易录入环境杂音,这一点在声学物理层面是无可辩驳的。
第二种方式则是录制系统内部发出的声音,我们通常简称为“系统内录”。在这种模式下,系统会告诉正在录屏或将要录屏的 APP:“我希望在录屏的时候,只录制系统内部发出的声音。并且,我希望你通过虚拟声卡技术,把麦克风接收到的所有外部环境声音全部过滤掉,只保留系统最底层声源(比如媒体播放器、游戏引擎)发出的纯净声音。”但这一步其实还没完,为了优化用户体验和存储空间,录制进行中时,系统还会进一步向 APP 下达优化指令:“为了不让录出来的视频文件显得过于臃肿、占用太多内存,所以我想让你在录制的时候,边录边就把音频信号下混渲染成单声道,不需要保留立体声。并且,我还有一个硬性要求:我希望你在有电话打来时,立刻停止录屏,并把当前的录屏文件自动保存在图库中。”
至于为什么系统设定的是“电话打来”时停止录屏,而不是等到用户“接通后”再停止?这个原因其实非常贴近我们的日常生活,且关乎隐私安全。大家知道,录屏的时候是把整个屏幕画面也一并录进去的。电话打来的时候,虽然你还没有接听,但手机已经跳转到了来电接听界面,此时屏幕上会清晰地显示对方的号码、归属地,甚至可能还有对方的头像和来电标签。此时如果继续录屏,那么录出来的视频画面就会不可避免地包含这些敏感的个人通讯信息。为了保护用户的隐私,防止视频分享时造成隐私泄露,系统做了一个前置的拦截策略,在电话打来的前一秒(也就是来电界面即将弹出的瞬间)就强制停止录屏。当然,具体到每个手机厂商的底层调度机制可能略有不同,有的是提前2秒,有的是提前1秒,这个时间阈值因人而异,也因手机厂商的系统策略而异。
这时候你可能还有疑问:“那为什么微信、QQ 等第三方的 APP 一旦有语音或视频电话打来,录屏却会继续保持,而非停止呢?这是什么原因?”其实原因并不复杂,我们需要从多个维度来剖析。首先,得看这个“电话”到底是谁的电话。华为自带录屏功能强制停止的,是传统的系统电话,也就是走运营商底层通话通道的那类常规电话;而微信、QQ 里的语音、视频通话,本质上是基于互联网数据的应用内网络通话(VoIP)。在系统底层看来,这并不属于同一个“电话打来”的系统级事件,所以自然不会触发那套统一的停止录屏逻辑。
其次,界面展示的差异也决定了系统的处理方式。第三方 APP 来电时,其界面未必是全屏的通话页,很多时候只是屏幕顶部的一个横幅提示,或者是一个悬浮通知,对方的号码和归属地也不一定完整露出来(很多时候只显示昵称),系统自然没必要为了一个不完整的界面信息去一刀切地停掉录屏。还有一层更核心的控制权问题:录屏到底要不要停、什么时候保存文件,最终是由调用录屏能力的那个 APP 自己决定的。华为自带录屏作为系统级应用,拥有最高权限,能直接拿到电话状态并做前置的隐私处理;而第三方录屏软件或社交 APP,如果没有在代码里监听电话状态、没有申请相关的系统权限,或者产品经理在策略上就选择了“不打断录制”,那它就会继续录。即便此时真的有运营商系统电话打来,第三方 APP 也可能只是把音频焦点让出去,画面继续录制,但声音可能会变成静音或者根本录不到对方的声音。所以,并不是第三方 APP 在隐私保护上“更勇敢”或者“更头铁”,而是它们走的系统通道、拿到的底层权限以及自身的产品策略不一样。真要把来电号码原封不动地录进去了,那一般也是这个第三方 APP 自身的隐私处理机制没做好,这口锅可不能扣在系统内录的头上。
洋洋洒洒、掰开揉碎了说了这么多底层逻辑,现在终于可以回答昨天那位希望“录音机增加系统内录”功能的朋友的问题了。我看到那个求助帖子,评论区里有很多网友信誓旦旦地说“系统底层不允许”、“安卓机制限制”等等,实际上,结合我们刚才剖析的系统调度逻辑来看,这个说法是不太准确的,甚至是对系统权限机制的一种误解。