Skip to main content

adb_scr_py

通过 ADB 和 scrcpy 控制 Android 设备,并使用 macOS VideoToolbox 解码屏幕视频。Python 导入名为 adb_scr

支持 USB 和网络调试连接、点击/滑动/长按/粘贴、单指及多指手势、应用启动与停止、按需 JPEG 截图,以及 H.264/AAC MP4 屏幕录制。内部保留 BGRA8 原始帧通路,供 NumPy/OpenCV 消费;截图和录制都直接使用原生解码帧。

安装

  • Python 3.10 或更高版本;本地开发使用普通 3.14。支持 free-threaded CPython,已验证 3.14t;需要对应 ABI 的构建,详见 Python 兼容性
  • macOS,使用 VideoToolbox 硬件编解码和部分 Metal 特性,推荐 Apple silicon。不保证 Intel Mac 能正常使用;源码仍允许构建 x86_64,具体 wheel 可用性以发布文件为准。
  • 已安装 ADB,设备已授权 USB 调试,或已具备 ADB 网络调试条件。
uv add adb_scr_py

快速开始

将示例序列号替换为自己的设备。网络设备使用 AndroidDevice("192.168.1.100:5555", "tcp")

import asyncio
from pathlib import Path

from adb_scr import AndroidDevice, deinit_lib, init_lib, set_screen_record_fps


async def main() -> None:
    await init_lib()
    device = AndroidDevice("YOUR_DEVICE_SERIAL", "usb")
    try:
        set_screen_record_fps(30)  # 后续启动会话的上限,不改变正在运行的会话
        if not await device.connect():
            print(device.last_disconnect_reason)
            return
        print(device.get_screen_size())  # connect 已等待有效的视频元数据

        # 解码首帧可能晚于连接成功;使用截止时间,而不是固定 sleep 猜测。
        deadline = asyncio.get_running_loop().time() + 5
        while device.is_connected:
            jpg = await device.get_screenshot_jpg(quality=90)
            if jpg is not None:
                await asyncio.to_thread(Path("screenshot.jpg").write_bytes, jpg)
                break
            if asyncio.get_running_loop().time() >= deadline:
                print("等待首帧超时")
                break
            await asyncio.sleep(0.05)
    finally:
        try:
            await device.disconnect()
        finally:
            await deinit_lib()


asyncio.run(main())

截图、裁剪与缩放

get_screenshot_jpg() 支持可选的质量、缩放比例和原图裁剪区域:

jpeg = await device.get_screenshot_jpg()  # quality=75, scale=1.0, roi=None
jpeg = await device.get_screenshot_jpg(
    quality=85, scale=0.5, roi=(100, 200, 600, 400)
)  # 裁剪原图区域,再缩小为 300 × 200

ROI 使用原图左上角坐标 (x, y, width, height),必须完全位于图内;None 表示整图。先裁剪再缩放,比例可大于 1。三个参数都有默认值,无参数或只传质量的现有调用无需修改;参数范围、取整和异常见 API 文档

连接与断连

from adb_scr import AndroidDevice, ConnectionOptions

options = ConnectionOptions(
    connect_timeout=30,
    io_timeout=5,
    close_timeout=5,
    probe_interval=5,
    probe_failures=3,
)
device = AndroidDevice("YOUR_DEVICE_SERIAL", "usb", options=options)

EOF、接收/发送失败、服务端进程退出或设备存活探测连续失败会触发会话清理。await device.wait_disconnected() 等待清理完成并返回原因;device.is_connected 可读取当前状态。库不自动重连,调用方可在设备恢复后再次 await device.connect()

静态画面可能没有新视频帧,控制上行也可能长期无数据,因此不设置普通空闲读取超时。默认每 5 秒通过设备端 shell true 探测 transport,连续 3 次失败后断开;probe_interval=None 可禁用。探测不能证明编码器持续产帧,也不是精确的断连检测时限。

屏幕录制

连接成功且首帧已经解码后:

await device.start_recording("capture.mp4", quality=0.75)  # 默认 0.75,可传 0.0–1.0
try:
    await asyncio.sleep(5)  # 此期间仍可截图或操作设备
finally:
    await device.stop_recording()  # 等待 MP4 封装完成后再读取文件

开始时使用缓存画面立即生成关键帧,停止时补足静止画面的持续时间;录制期间没有新视频包也能生成有效文件。视频使用 VideoToolbox 硬件 H.264 编码,通过 quality 控制画质与体积的取舍,默认 0.75,不指定固定码率;音频直接封装手机回传的 AAC,不重新编码。录制要求可用的 Metal 设备,输出尺寸固定为首帧尺寸,旋转后由 GPU 直接缩放 NV12 平面并居中留黑。quality 越高通常画质越好、文件越大;它不是体积比例,1.0 不保证 H.264 无损,实际体积取决于画面和硬件。不覆盖已有文件,也不自动创建父目录。

连接时自动读取 Android API 级别并开启支持的音源:Android 13+ 使用 playback + audio_dup 保留手机播放声音;Android 11–12L 使用 output,采集期间手机静音(从连接开始,即使尚未录制);Android 11 启动时还需要解锁屏幕。Android 10 及以下不启用音频。服务端明确禁用音频时保留视频连接,开始录制会记录警告并生成纯视频文件。应用可以限制音频采集,系统行为见 scrcpy 音频说明

每台设备同时最多一份录制,重复开始会报错;重复停止安全。断连会自动结束录制,异步写入错误可通过 stop_recording() 获取。接口异常与时间精度见 录制 API

MCP 服务

可选的 adb_scr_mcp 包提供 FastAPI + Streamable HTTP 服务,lifespan 自动初始化 库,并在 Ctrl+C/SIGTERM 时等待设备、录制和 ADB 清理完成。启动后由客户端显式连接设备。

uv run --python 3.14 --locked --extra mcp adb-scr-mcp --port 8000

客户端地址为 http://127.0.0.1:8000/mcp。提供设备枚举/连接、JPEG 截图、触控、 应用控制及 MP4 录制工具。安装、参数和退出流程见 MCP 服务文档

API 索引

入口 用途
await init_lib(adb_path=None) 初始化共享 ADB daemon
await list_devices() 获取 ADB 列出的序列号
set_screen_record_fps(fps) 设置后续会话的帧率上限
ConnectionOptions(...) 配置连接、I/O、关闭及存活探测
AndroidDevice(...) 设备会话、截图及控制 API
await device.start_recording(output_file, quality=0.75) / await device.stop_recording() 开始录制及等待 MP4 文件完成
GestureAction / GestureActionNode 通过 pointer_id 区分手指的单指/多指手势序列
await deinit_lib() 所有设备关闭后停止共享 daemon

完整签名、参数单位、失败行为和示例见 API 参考(仓库内见 docs/api.md)。原生 API 的类型及说明随包内 .pyi 提供。

使用边界

  • 一个设备实例应在同一 asyncio 事件循环内使用。设备锁和解码器锁保护各自操作;并非所有公开方法共用一把锁,也不提供跨事件循环共享保证。
  • connect() 成功表示流和尺寸就绪,截图仍可能因为首帧未到而返回 None
  • 控制方法返回不代表手机 UI 已执行动作;断连时不能保证手势抬起消息送达。
  • 设备用完后显式 await disconnect(),再 await deinit_lib()。停止全局 daemon 会影响其他 ADB 客户端。
  • 网络操作超时会开始取消与清理,实际返回可能稍晚。原生销毁等待硬件和队列完成,没有强制释放在用内存的超时。
  • 不提供固定截图吞吐保证或历史帧回放。录制从调用时的缓存画面开始,不包含调用前的历史视频。

开发文档

架构 · 控制流程与 BGRA8 · Python 兼容性

仓库开发文档与测试不进入 sdist/wheel。项目通过 setuptools 构建原生扩展;CMake 仅用于 IDE 索引。

许可证与依赖

MIT License。屏幕传输使用 scrcpy;媒体处理使用 Apple VideoToolbox、AVFoundation/CoreMedia、AudioToolbox、Accelerate/vImage、ImageIO/CoreGraphics 和 Core Image/Metal。

Release files for adb-scr-py 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for adb-scr-py 0.3.2
File Size Uploaded
adb_scr_py-0.3.2.tar.gz 162.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for adb-scr-py 0.3.2
File
adb_scr_py-0.3.2-cp314-cp314t-macosx_26_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp314-cp314t-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 15.0+ ARM64 Details
adb_scr_py-0.3.2-cp314-cp314-macosx_26_0_arm64.whl CPython 3.14 CPython 3.14 macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp314-cp314-macosx_15_0_arm64.whl CPython 3.14 CPython 3.14 macOS 15.0+ ARM64 Details
adb_scr_py-0.3.2-cp313-cp313-macosx_26_0_arm64.whl CPython 3.13 CPython 3.13 macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details
adb_scr_py-0.3.2-cp312-cp312-macosx_26_0_arm64.whl CPython 3.12 CPython 3.12 macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details
adb_scr_py-0.3.2-cp311-cp311-macosx_26_0_arm64.whl CPython 3.11 CPython 3.11 macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp311-cp311-macosx_15_0_arm64.whl CPython 3.11 CPython 3.11 macOS 15.0+ ARM64 Details
adb_scr_py-0.3.2-cp310-cp310-macosx_26_0_arm64.whl CPython 3.10 CPython 3.10 macOS 26.0+ ARM64 Details
adb_scr_py-0.3.2-cp310-cp310-macosx_15_0_arm64.whl CPython 3.10 CPython 3.10 macOS 15.0+ ARM64 Details

Total release size: 2.2 MB

Release files / adb_scr_py-0.3.2.tar.gz

Download URL adb_scr_py-0.3.2.tar.gz
Size 162.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0ed10dd92676a7e11ebc23b07af47bdb04ed3a317d46e84046915ebda77aa04e
BLAKE2b-256 checksum
How to use checksums
a8d0e1938982ecad31f7b53f5cefbd80a342895fefd60eeda43b53a0a9878684
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp314-cp314t-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp314-cp314t-macosx_26_0_arm64.whl
Size 173.1 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
b926ca76067dd6d3a2e2adcf853bbb3230f4bc85cfea307743235e2795d1e907
BLAKE2b-256 checksum
How to use checksums
f1a1abaec409a73e1db40a6808bb74f717997754e273dfdd87978d94d481aa3e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp314-cp314t-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp314-cp314t-macosx_15_0_arm64.whl
Size 173.1 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
4753f251889875452b60532bc9613f132dd4d8ffc8726639a4876358f0a97544
BLAKE2b-256 checksum
How to use checksums
634c901805be363c83767156dedcbfb51bca95c434b2670f6843f649ffb1e3b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp314-cp314-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp314-cp314-macosx_26_0_arm64.whl
Size 173.1 kB
Tags CPython 3.14 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
e64f7c77deade016496bae8d038b418dc5e6024630ae82cae4a2dcc7b112c80b
BLAKE2b-256 checksum
How to use checksums
1f27464b1be321a087fda25f924c976d75c32e52da5c7903a0b37caa87f4ccc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp314-cp314-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp314-cp314-macosx_15_0_arm64.whl
Size 173.0 kB
Tags CPython 3.14 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
8af2dfa1498f4f09032b01622853919591491b2928ac704043b827f2bdd986c9
BLAKE2b-256 checksum
How to use checksums
0f815eaa9edb4b47f795e12648ce49f3a379628d17fbe3f02323977342f3b2b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp313-cp313-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp313-cp313-macosx_26_0_arm64.whl
Size 173.1 kB
Tags CPython 3.13 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
9026d71f2fb5057ce868f58dbe3f8f9a328d8697d70299bc9b4caa2a64db4287
BLAKE2b-256 checksum
How to use checksums
588f8f609cb0e236fea3636fb581f4defc4cb9c617177de293fcae38b39a2741
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp313-cp313-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp313-cp313-macosx_15_0_arm64.whl
Size 173.0 kB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
8aae62df4962c51ad20f2387fb2db62ca9797e2fda9966170087d7d8e49c6164
BLAKE2b-256 checksum
How to use checksums
df3c04c198bdb899fb1cf311b78115d10e4670b0746ac9688536a996e7f289e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp312-cp312-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp312-cp312-macosx_26_0_arm64.whl
Size 173.1 kB
Tags CPython 3.12 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
082215af993ad11370d4523ac46a3a25078bb7fb5f50ac02e966121edb65cc00
BLAKE2b-256 checksum
How to use checksums
1a482b8541366147e6f6aca601c56f3752bc310eff7f3e16f380e65f7dc408c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp312-cp312-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp312-cp312-macosx_15_0_arm64.whl
Size 173.0 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
2b96c8e3559f5837b861e880b271ed901f56e2193429b52e573ad84cbb618830
BLAKE2b-256 checksum
How to use checksums
a9edd2c0ebe0ccea7dd0df2f1c2ce71764a3e6d382ec09250549b7d74b749f64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp311-cp311-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp311-cp311-macosx_26_0_arm64.whl
Size 173.1 kB
Tags CPython 3.11 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
80156719698576cd979089db65d6495f9648d62bd575ba1b2f04a4c39ffbe19f
BLAKE2b-256 checksum
How to use checksums
a25a27f0a730ca9355e4d1e63de5c83e047ae996c93c35e896585e3f14bb60c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp311-cp311-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp311-cp311-macosx_15_0_arm64.whl
Size 173.1 kB
Tags CPython 3.11 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
0e16ae10892dac83a0cdf9c9d4f5d2da3c5da49c0f7c367cfa2ecb47892a3384
BLAKE2b-256 checksum
How to use checksums
a69d79fdddd7d675b4f5ca97dbd7c1b2ebf04c0f07c192bf1fa0e09dcbda85e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp310-cp310-macosx_26_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp310-cp310-macosx_26_0_arm64.whl
Size 173.2 kB
Tags CPython 3.10 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
9187a07bf12b7cecf6b75503322a1a9c4ee2c299f729eb31db3ccc1a55360372
BLAKE2b-256 checksum
How to use checksums
4bccd0ba065d2874386cce2d8fc144e4d57a0e69fbeb3c1ad26670cdf2bac1fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release files / adb_scr_py-0.3.2-cp310-cp310-macosx_15_0_arm64.whl

Download URL adb_scr_py-0.3.2-cp310-cp310-macosx_15_0_arm64.whl
Size 173.1 kB
Tags CPython 3.10 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
66ddafde9c3c1b4b9067de4464d54502c1343549a1792d989cbff14283c28b5b
BLAKE2b-256 checksum
How to use checksums
b16bcb0d05cdda41d79f6f03fd809c126a063f7029d20f0982ae160dbf97cc1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.0

21 release files

This release

0.3.2 This release

13 release files

0.3.1

13 release files

0.3.0

7 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page