/minicap

改着玩玩 XD

Primary LanguageC++OtherNOASSERTION

用之前请先耐心的看完这份README,谢谢

目前这部分代码还比较乱,转码功能都集中在JpgEncoder中

TODO

将libyuv的依赖修改为git submodule。 将jpeg抓取与yuv抓取分解为两个不同的模块。 彻底弃用进程间tcp交互的方式,修改为修改为可以向minicap注册回调函数,当编码得到新帧之后,可以在apk中直接操作。

改这玩意儿时遇到的问题集

关于编译

$MINICAP_HOME/jni/Application.mk中修改

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

可指定仅编译特定平台下的minicap 这里我只保留armeabi-v7a,arm64-v8a有需要的自己加上

关于执行

$MINICAP_HOME/run.sh脚本用于整合编译,部署等操作

改脚本会负责编译整个minicap
并将特定的minicap以及minicap.so推送到手机的/data/local/tmp/minicap-dev目录下

确定手机分辨率之后,例如1080x1920
./run.sh -P 1080x1920/1080x1920@0
可在手机中启动minicap进行

关于修改

jpeg输出

在增加了JpgEncoder中增加了ScalingFactor以及Resizer用于调整jpeg图像的输出。

用于调整缩放比例的-x选项,该参数必须与libjpge-turbo所支持的缩放比例匹配(默认:1.00)

    ==============================
    Scaling Table of libjpge-turbo
    ==============================
    Scaling: 2/1 (Percentage: 2.000000)
    Scaling: 15/8 (Percentage: 1.875000)
    Scaling: 7/4 (Percentage: 1.750000)
    Scaling: 13/8 (Percentage: 1.625000)
    Scaling: 3/2 (Percentage: 1.500000)
    Scaling: 11/8 (Percentage: 1.375000)
    Scaling: 5/4 (Percentage: 1.250000)
    Scaling: 9/8 (Percentage: 1.125000)
    Scaling: 1/1 (Percentage: 1.000000)
    Scaling: 7/8 (Percentage: 0.875000)
    Scaling: 3/4 (Percentage: 0.750000)
    Scaling: 5/8 (Percentage: 0.625000)
    Scaling: 1/2 (Percentage: 0.500000)
    Scaling: 3/8 (Percentage: 0.375000)
    Scaling: 1/4 (Percentage: 0.250000)
    Scaling: 1/8 (Percentage: 0.125000)

用于调整图片质量的-Q选项(默认:80)

本来想增加原始图像压缩后的质量选项,后来发现被人捷足先登了,
使用-Q选项即可,参数为0~100

用于调整图片采样方式的-z选项(默认:2)

TJSAMP_440   0
TJSAMP_422   1
TSAMP_420    2
TSAMP_GRAY   3
TSAMP_440    4
TSAMP_411    5

yuv输出

为了将抓取的屏幕图像,转换为h264流,因此在JpgEncoder中增加原始的RGBA_8888转换为YUV的功能。

用于调整缩放比例的-x选项(默认:1.00)

该选项在yuv输出下依然有效,只不过少了libjpge-turbo中只能缩放特定比例的限制。
-x选项的所指定的缩放比例,直接关系到所输出的yuv格式图片的分辨率。
且该分辨率与硬件编码器所支持的Profile以及level息息相关。
因此,在显示指定该参数时,请先确认目标设备的硬件编码器是否有相关Profile的支持。

用于指定特定的YUV格式

安卓平台上的硬编码接口统一采用OpenMax规范,但安卓上的硬编码器来自众多不同的硬件厂商,其实现各有不同。
参考http://bigflake.com/mediacodec/ 中的FQA5时才发现,不同硬编码器所能接收的输入各不相同。
因此修改过的minicap,支持两种yuv输出,既I420以及NV12两种,能够适应大部分硬编码器的场景。

交互方式

由于从Android5.0开始,限制了LocalSocket的使用,因此考虑将LocalSocket替换成普通的TCPSocket。

关于submodules文件夹

请使用git submodules来初始化该文件夹下的项目。 其中包含一些播放器,以及参考代码。

关于原始项目

原始的minicap版本采用LocalSocket与外部进行交互。openstf中使用adb forward命令将minicap所开启的unix domain socket转发出来,进行连接。 jni目录下minicap-shared/aosp/中的所有文件都不会参与编译。如果需要修改这部分代码,建议使用docker搭建对应api level的开发环境进行编译。 具体的操作可以参考jni/minicap-shared/aosp/目录下的README.md文件。 这部分代码全都是预编译的。预先生成好.o文件,放在minicap根目录的prebuilt下。

REMAKE

ImageMagick是一个用来处理图片的好东西~

http://xahlee.info/img/imagemagic.html 常用的调试命令 identity用于识别图片的类型,以及输出图片的详细参数 display,调用xwindows来显示指定的图片