zoukankan      html  css  js  c++  java
  • 视频直播技术(五):移动端实现录屏推流的方案

    一、录屏推流实现的步骤

    1. 采集数据

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

    2. 数据格式转换

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

    3. 编码处理

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

    4. 封包&推流

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

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

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

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

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

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

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

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

    注:此API在Android 6.0之前存在UI漏洞,具体可参见:https://blog.csdn.net/jiangwei0910410003/article/details/52135654

    在编写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录制屏幕

    // TODO

     

  • 相关阅读:
    c#2005中的各个控件转换为html代码
    支付宝接口参数详谈
    IE6兼容菜单
    cookie版购物车
    火狐执行子页面方法
    easyui中datebox文本框输入非数字报错的改善
    右侧悬浮菜单
    内边距、边框和外边距
    自我超越
    DateUtils 时间工具类
  • 原文地址:https://www.cnblogs.com/renhui/p/9106486.html
Copyright © 2011-2022 走看看