You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

仅录制特定应用程序而不包括通知和覆盖层的Android屏幕录制器。

要实现仅录制特定应用程序而不包括通知和覆盖层的Android屏幕录制器,你可以使用MediaProjection API来捕获屏幕内容,并使用MediaCodec API将捕获的内容编码为视频文件。以下是一个示例代码:

首先,你需要在AndroidManifest.xml文件中添加必要的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

然后,在你的Activity中,你可以使用以下代码来请求录制屏幕的权限

private static final int REQUEST_CODE_RECORD_SCREEN = 1;
private MediaProjectionManager mediaProjectionManager;
private MediaProjection mediaProjection;
private VirtualDisplay virtualDisplay;
private MediaCodec mediaCodec;
private Surface inputSurface;
private String outputPath;
private int screenWidth;
private int screenHeight;
private int screenDensity;

private boolean isRecording = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 初始化MediaProjectionManager
    mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

    // 获取屏幕尺寸和密度
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    screenWidth = metrics.widthPixels;
    screenHeight = metrics.heightPixels;
    screenDensity = metrics.densityDpi;

    // 设置输出文件路径
    outputPath = Environment.getExternalStorageDirectory() + "/recorded_video.mp4";

    // 请求录制屏幕的权限
    startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE_RECORD_SCREEN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_RECORD_SCREEN) {
        if (resultCode == RESULT_OK) {
            // 获取MediaProjection
            mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);

            // 创建MediaCodec编码器
            try {
                mediaCodec = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
                MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, screenWidth, screenHeight);
                format.setInteger(MediaFormat.KEY_BIT_RATE, 6000000);
                format.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
                format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
                format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
                mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
                inputSurface = mediaCodec.createInputSurface();
                mediaCodec.start();
            } catch (IOException e) {
                e.printStackTrace();
            }

            // 创建VirtualDisplay并开始录制
            virtualDisplay = mediaProjection.createVirtualDisplay("ScreenCapture",
                    screenWidth, screenHeight, screenDensity,
                    DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                    inputSurface, null, null);

            isRecording = true;
        }
    }
}

private void stopRecording() {
    if (isRecording) {
        isRecording = false;

        // 停止并释放VirtualDisplay
        if (virtualDisplay != null) {
            virtualDisplay.release();
            virtualDisplay = null;
        }

        // 停止并释放MediaProjection
        if (mediaProjection != null) {
            mediaProjection.stop();
            mediaProjection = null;
        }

        // 停止并释放MediaCodec编码器
        if (mediaCodec != null) {
            mediaCodec.stop();
            mediaCodec.release();
            mediaCodec = null;
        }

        // 保存录制的视频文件
        try {
            MediaMuxer mediaMuxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);

            // 添加视频轨道
            int videoTrackIndex = mediaMuxer.addTrack(mediaCodec.getOutputFormat());
            mediaMuxer.start();

            // 读取并写入编码后的视频数据
            ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
            ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
            MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
            boolean isEOS = false;
            while (!isEOS) {
                int inputIndex = mediaCodec.dequeueInputBuffer(-1);
                if (inputIndex >= 0) {
                    ByteBuffer inputBuffer = inputBuffers[inputIndex];
                    inputBuffer.clear();
                    int sampleSize = extractor.readSampleData(inputBuffer, 0);
本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

深度解读 Android 14 重要的 8 个新特性|社区征文

对外版本为 **Android 14**。一般来说,升级任务分为 ROM 角度和 App 角度,前者比较关心系统内部实现的变化,后者则更加关心对外的 **New Features** 和 **Behavior Changes**。本文主要聚焦在 App 角度,即作为 3r... 相关文章推荐:[Android 14 新功能之 TextView 搜索结果高亮和焦点移动~](https://juejin.cn/post/7236680350558076983)## 3.New System Back Design随着屏幕越来越大,交互方式的愈加多元、灵活,传统的 Back 按...

漫谈开源许可证:开发者需要知道的法理和事例

**让我们的 C 库使用 GPL 许可证会迫使专有软件的开发者去使用其他的 C 库—对他们不是问题,对我们则是。**但是如果编译 FFmpeg 时启用了 GPL 参数,即便应用仅仅调用编译的 FFmpeg 动态链接库,该应用程序也需... 它可以在浏览器内实现视频和音频的录制、转换和流媒体功能。其核心能力通过 @ffmpeg/core 和 @ffmpeg/ffmpeg 两个 npm 包来提供,前者 fork 自 FFmpeg 用于编译产出其 wasm 产物,后者则是对应的 JavaScript API Bin...

转型,技术人绕不开的坎

昨天在微信公众号看了一篇阅读量过万的文章,讨论的是目前IT领域几个主要技术转型的话题,包括前端,后台,大数据,人工智能等,有兴趣的同学可以点击文末链接阅读原文。相比于前端日新月异,百花齐放,后台相对来说比较稳... 从研究生毕业到现在差不多工作4年,中间也经历了几次大大小小的转型,毕业跨专业找工作,从底层硬件到操作系统,再到上层应用,目前除了Android原生,也会兼任H5。每一次的选择不能说是完全转型,只是在原有的基础上进行了...

基于 Agent 的无侵入 Proxyless Mesh:开启 Java 服务网格的未来

开发者无需修改应用程序代码,即可动态修改和增强 Java 应用程序的行为。> > > MSE Agent 既有微服务 SDK 架构的高性能和多功能优势,又有 Service Mesh 架构的无侵入优势,并且完全适配了主流开源服务网格框... * 会被特定框架所绑定,例如 grpc-proxyless。针对第二个问题,Agent 字节码技术就极大地扩展了对 Java 生态框架的支持范围。目前 MSE Agent 支持包括 SpringCloud、Dubbo、Vert.x 等在内的主流 Java 框架,并且仍...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

仅录制特定应用程序而不包括通知和覆盖层的Android屏幕录制器。-优选内容

私有化V4.2.0发版日志
包括功能权限、数据权限、属性脱敏等。 应用管理支持属性加密 介绍:支持对用户属性、事件属性进行aes加密,加密后对于已加密的字段,该属性在下拉框/Table中进行加密展示。(仅管理员可配置) 算子影响: 包含加密属性... 最近30天查询量(包括分析模块、看板、分群等各项功能用到当前埋点发起的查询)、上报平台(Android、iOS、web等)、是否有数据上报; 追加预置事件和属性 本期增加应用崩溃预置$crash事件,该事件仅支持移动端。 【Find...
深度解读 Android 14 重要的 8 个新特性|社区征文
对外版本为 **Android 14**。一般来说,升级任务分为 ROM 角度和 App 角度,前者比较关心系统内部实现的变化,后者则更加关心对外的 **New Features** 和 **Behavior Changes**。本文主要聚焦在 App 角度,即作为 3r... 相关文章推荐:[Android 14 新功能之 TextView 搜索结果高亮和焦点移动~](https://juejin.cn/post/7236680350558076983)## 3.New System Back Design随着屏幕越来越大,交互方式的愈加多元、灵活,传统的 Back 按...
客户端 SDK
详情参看按需集成插件以缩小应用体积。 Android iOS 端支持将摄像头画面旋转为指定角度,适用于无重力感应设备的视频采集画面适配,例如,金融行业的人脸采集设备等。参看: 功能简述 Android iOS 旋转采集画面 se... 以适配特定播放器作为接收端时接收 SEI 信息。参看: 功能简述 Android iOS macOS Windows 设置合流转推 SEI 信息的 payload type setSeiPayloadType seiPayloadType seiPayloadType sei_payload_type 设置合流转推...
私有化V4.5.0发版日志
开启后不支持关闭,谨慎申请。 功能介绍:将用户行为数据统一转化为固定时区进行查询与展示。支持(项目中不同时区用户、出境业务)能按照统一口径,计算展示特定时区下的数据情况,以保证唯一性。 案例:一位在美国的分析... 和测试效率,帮助业务人员快速查找埋点,并支持车机、电视等无法扫码的场景使用。 支持 Android、iOS、Web、小程序接入,面向开发、测试、产品、业务运营等角色。 功能详细说明&配图: 11. 私有化-单项目多应用(beta)...

仅录制特定应用程序而不包括通知和覆盖层的Android屏幕录制器。-相关内容

SDK历史发布日志

演唱录制、打分互动等功能 纯在线能力SDK 在线API能力的封装集,降低API的接入难度。需要TTNET网络依赖库。仅需在线能力时可用此包 语音合成TTS 全功能(离线+在线)SDK 包含了纯离线SDK和在线API的封装。需要TTNET网络依赖库。同时需要离线能力和在线能力时可用此包 以上所有 SDK 离线SDK 端 版本号 下载链接 资源文件 依赖库 demo android-so 7.0.2-tobsdk 链接 包含了运行需要的模型文件、配置文件等;链接 不需要 ...

服务端 OpenAPI

接口变更 新增回调 新增回调 文件转码进度 文件转码结果 2023-03-26 应用管理更新版本2023-11-01 接口变更 新增接口 新增接口 接口描述 ModifyAppStatus 控制指定应用的启用/停用状态。 2024-03-11 云端录制更新版... 某个应用下进行音视频通话的指定房间内某个用户的上下行数据。 ListUserInfo 查询一段时间内,某个应用下进行音视频通话的指定房间内特定或全部用户信息。 应用管理新增版本2023-11-01 接口变更 新增接口 新增接口 ...

转型,技术人绕不开的坎

昨天在微信公众号看了一篇阅读量过万的文章,讨论的是目前IT领域几个主要技术转型的话题,包括前端,后台,大数据,人工智能等,有兴趣的同学可以点击文末链接阅读原文。相比于前端日新月异,百花齐放,后台相对来说比较稳... 从研究生毕业到现在差不多工作4年,中间也经历了几次大大小小的转型,毕业跨专业找工作,从底层硬件到操作系统,再到上层应用,目前除了Android原生,也会兼任H5。每一次的选择不能说是完全转型,只是在原有的基础上进行了...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

基于 Agent 的无侵入 Proxyless Mesh:开启 Java 服务网格的未来

开发者无需修改应用程序代码,即可动态修改和增强 Java 应用程序的行为。> > > MSE Agent 既有微服务 SDK 架构的高性能和多功能优势,又有 Service Mesh 架构的无侵入优势,并且完全适配了主流开源服务网格框... * 会被特定框架所绑定,例如 grpc-proxyless。针对第二个问题,Agent 字节码技术就极大地扩展了对 Java 生态框架的支持范围。目前 MSE Agent 支持包括 SpringCloud、Dubbo、Vert.x 等在内的主流 Java 框架,并且仍...

MAD,现代安卓开发技术:Android 领域开发方式的重大变革|社区征文

应用打包和分发方式* Kotlin :首推的编程语言* Jetpack :独立于 AOSP 以外,汇集了大量开发框架的开发套件* Jetpack Compose:Android 平台重大变革的 UI 工具包同时,官方针对 MAD 技术提供了认证考试和技能的计... `Layout Editor` 拥有诸多优点,不知大家熟练运用了没有:* 可以直观地编辑 UI:随意拖动视图控件和更改约束指向* 在不同配置(设备、主题、语言、屏幕方向等)下灵活切换预览,免去实机调试* 搭配 `Tools` 标签自由...

超复杂调用网下的服务治理新思路

我们需要区分强依赖和弱依赖,并辅以特定的降级策略,才能够在不稳定的服务环境下获得尽可能稳定的对外效果。 业界尝试 那么对于这些复杂的治理难题,业界会有怎样的尝试呢?**第... 第二层是 **BFF 层** 。BFF 是近几年日趋流行的一个概念,全称是 Backend For Frontend(服务于前端的后端)。如过一个接口的对外主体业务逻辑是一致的,但在 iOS、Android、Web 等不同客户端的可能有一些细微差别,那...

功能发布历史

Android 跑通 Demo iOS 客户端 SDK 1.41.3 版本发布。 2024-04-19 发布历史 API 参考 新增查询转码任务和重启转码任务接口。 2024-04-10 API 发布历史 控制台指南 域名配置支持为拉流域名配置请求头和响应头。 2023-04-07 域名配置 API 参考 新增域名 Header 配置相关接口。 2024-04-07 API 发布历史 2024 年 03 月变更 说明 发布时间 相关文档 客户端 SDK 1.41.2 版本发布。 2024-03-21 发布历史 API 参考 新增创建录制索引文件...

我与音视频的故事|社区征文

应用于日常生活、紧急情况、户外等场景,具有服务器一人直播多人观看的功能。基于IP技术架构,在架构设计上由主播端、观众端、服务端共3端组成。服务端包括2个:信令服务器、媒体服务器;主播端支持2种平台,Android和P... 调用底层RTMP SDK提供的接口,发送到中心流媒体服务器Media Server;当用户想观看某路直播时,RTMP SDK会主动向Media Server订阅视频源,可以接收到音频帧、视频帧,通知给上层进行下一步处理,如解码和播放,从而打通整个...

类型详情

应用通话音量或媒体音量。参看 Android / iOS 的 API 文档了解对应操作系统下的音量类型配置情况。参看通话音量与媒体音量了解更多相关信息。如果以下音频场景类型无法满足你的业务需要,请联系技术支持进行定制。 ... 屏幕录制的音频数据回调 OnRecordScreenAudioFrameEventHandler SyncInfoStreamType csharp public enum bytertc.SyncInfoStreamType媒体流信息同步的流类型 Defined in : IRTCVideo.cs 枚举值类型 值 说明 kSyncI...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询