视频直播技术之移动端实现录屏推流的方案

∥☆過路亽.° 提交于 2020-04-06 12:54:22

一、录屏推流实现的步骤

1. 采集数据

主要是采集屏幕获得视频数据,采集麦克风获得音频数据,如果可以实现的话,我们还可以采集一些应用内置的音频数据。

2. 数据格式转换

主要是将获取到的视频和音频转换成常见的推流的标准格式,这样能保证让观看终端正常观看。

3. 编码处理

如果不进行编码的话,数据量会非常大,这样不仅浪费带宽,而且会浪费观看终端的性能,所以需要对音视频数据进行编码处理。

4. 封包&推流

这块的逻辑可以采用和普通的直播方式进行封装和推流。

总结:其实录屏推流直播和普通的直播的区别就是采集源发生了变化,而在技术层面来将真正需要我们做的事情就是将录屏获取到的数据处理成稳定的编码格式。

二、Android 实现录屏功能的思路

Android 实现录制屏幕的功能的技术方案现阶段主要为以下两种:

1Android5.0以下,获取root权限使用 adb shell screenrecord 命令功能进行录制。

2Android5.0以上,使用系统Api功能:MediaProjection VirtualDisplay

目前的主流实现和使用的思路为: MediaProjection + VirtualDisplay 方法。

这两种方式其实在底层的实现机制是一样的,因为在5.0之前,Google可能介于录制屏幕功能具有一定的危险性,所以就没有开放此功能。在Android 5.0 发布后,谷歌开放了截屏的接口,我们可以通过VirtualDisplay来实现录屏的视频源数据的获取。

在编写App的时候,如果不想某些应用的页面被录屏软件捕捉,可以在所在页的代码中添加WindowManager.LayoutParams.FLAG_SECURE 属性。

1. 使用命令行录制屏幕

Android 5.0 以下,我们截屏可以使用 adb shell screencap 命令,录制屏幕可以使用 adb shell screenrecord

这里我们讲一下录制屏幕的命令行的使用方式:

(1). 基本使用

adb shell screenrecord /sdcard/demo.mp4

命令说明:录制手机屏幕,视频格式为mp4,存放到手机sd卡里,默认录制时间为180s

(2). 限制录制时间

参数: --time-limit

adb shell screenrecord  --time-limit 10 /sdcard/demo.mp4

命令说明:限制视频录制时间为10s,如果不限制,默认180s

(3). 指定视频分辨率大小:

参数: --size

adb shell screenrecord --size 1280*720 /sdcard/demo.mp4

命令说明:录制视频,分辨率为1280*720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小

(4). 指定视频的比特率:

参数: --bit-rate

adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4

命令说明:指定视频的比特率为6Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率

备注:

1. 此录制方式不支持声音,需单独录制。

2. 此命令使用需要Root权限,很大程度上限制了使用。

3. 随着Android的版本不断升级,我们更建议使用MediaProjection类来进行屏幕录制。

2. 使用 MediaProjection+VirtualDiaplay录制屏幕

 

 

三、iOS 实现录屏功能的思路

1. 主流思路: 通过 ReplayKit 实现

ReplayKit 是苹果 iOS 10 以上版本提供的用于录屏并对外直播的功能。简单而言就是苹果通过这个功能把采集到的屏幕视频信息和音频信息回调给开发者,开发者可以任意处理这些信息。

但是问题是,ReplayKit 使用上限制较多,首先要求系统必须为 iOS 10 以上;其次,被录屏的 App 必须支持 ReplayKit 功能。这也很容易理解,毕竟录屏是比较敏感的行为。所以必须游戏本身支持,以表示被录制方已经同意录屏。

2. 偏门思路: 通过 Airplay Mirroring 实现

Airplay Mirroring 是苹果用于屏幕投影的功能,投屏的原理就是把设备的屏幕数据和音频数据通过 Airplay Mirroring 协议传输给第三方的支持该协议的显示播放设备。但 Airplay Mirroring 是苹果的私有协议,传输过程中音视频数据都是被苹果加密的,不对第三方开放。因此要想获得这些数据,只能通过破解协议的方式来达成。

图玩智能为企业提供直播平台的二次开发服务,帮助企业最大化节约软件开发的成本,欢迎随时咨询www.toivan.com.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!