{"id":19858421,"url":"https://github.com/tuya/tuya-rtc-camera-sdk-android","last_synced_at":"2026-05-10T22:34:31.597Z","repository":{"id":103228799,"uuid":"381018879","full_name":"tuya/tuya-rtc-camera-sdk-android","owner":"tuya","description":"TuyaRTCCamera SDK is a comprehensive solution for audio and video based on WebRTC technology. The solution focuses on providing developers with a set of SDKs that can interact and control with IPC devices (Powered by Tuya)","archived":false,"fork":false,"pushed_at":"2021-07-12T02:59:06.000Z","size":28229,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-01-11T14:25:53.613Z","etag":null,"topics":["tuya"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tuya.png","metadata":{"files":{"readme":"README-ZH.md","changelog":"CHANGELOG-ZH.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-28T12:12:04.000Z","updated_at":"2022-05-08T14:31:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"cc1976d6-c80b-43bf-aa9d-23632ef8c2bb","html_url":"https://github.com/tuya/tuya-rtc-camera-sdk-android","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuya%2Ftuya-rtc-camera-sdk-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuya%2Ftuya-rtc-camera-sdk-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuya%2Ftuya-rtc-camera-sdk-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuya%2Ftuya-rtc-camera-sdk-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tuya","download_url":"https://codeload.github.com/tuya/tuya-rtc-camera-sdk-android/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241255123,"owners_count":19934815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tuya"],"created_at":"2024-11-12T14:23:24.414Z","updated_at":"2026-05-10T22:34:31.565Z","avatar_url":"https://github.com/tuya.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TuyaRTCCameraSDK - RTCCamera 音视频开发套件\n\n[English](README.md)|[中文版](README-ZH.md)\n\n## 功能概述\nTuyaRTCCamera SDK是一套基于WebRTC技术的音视频综合解决方案，通过本SDK可以方便的接入Tuya IoT Colud，然后对Tuya IoT设备\n进行一些列的交互操作，尤其是对音视频处理和控制是本SDK的核心功能。\n通过该sdk可以完成以下核心功能\n- 预览Camera的内容\n- 录制Camera的内容\n- JPEG 抓屏\n- 支持与摄像头进行交互操作\n\n## 集成SDK的步骤\n### 第一步\n修改MainActivity.java中的一些参数，修改为合适的参数\n``` java\n    ...\n    private String clientId = \"input your client id\";\n    private String secret  = \"input your secret id\";\n    private String deviceId = \"input your device id\";\n    private String authCode = \"input your auth code\"; \n    ...\n``` \n\n### 第二步\n配置build.gradle\n在应用目录下找到build.gradle, 并在文件中添加相关依赖\n\n``` gradle\ndependencies {\n    implementation fileTree(dir: 'libs', include: rtcPackageName)\n    implementation group: 'org.eclipse.paho', name: 'org.eclipse.paho.client.mqttv3', version: '1.2.5'\n}\n```\n### 第三步\ncopy 库文件\n- 在当前工程的目录下，如果没有存放库文件的目录，则执行`mkdir libs` 新建一个目录\n- 把Libraries的某一个版本下的aar文件copy到创建好的libs目录面\n\n### 第四步\n- 根据你所在的区域，填入合适的regionCode，可参照下面的内容`RegionCode 对照表`\n- 下面是以我所在的区域(中国，浙江省杭州市），应该填入的参数为\"cn\"\n```java\ntuyaRTCEngine.initRtcEngine(appContext, eglBase,\n           clientId, secret, authCode, \"cn\", (TuyaRTCEngineHandler)caller);\n```\n\n\n\n## 能力概述\n\n**接口说明**\n\n**TuyaRTCEngine接口说明**\n\n| 参数 | 说明 |\n| :------------ | :------------------------------------------------------------------- |\n| initRtcEngine | 引擎初始化 |\n| destoryRtcEngine | 销毁引擎 |\n| createTuyaCamera | 创建一个TuyaRTCCamera对象，每个对象对应一个Camera或者Stream |\n| destoryTuyaCamera | 销毁一个TuyaRTCCamera对象 |\n| setLogConfigure | 设置SDK的log输出. |\n| getSdkVersion | 获取SDK版本信息 |\n| getBuildTime | 获取SDK编译时间 |\n\n\n**TuyaRTCCamera接口说明**\n| 参数 | 说明 |\n| :------------ | :------------------------------------------------------------------- |\n| startPreview | 开始预览Camera的内容 |\n| stopPreview | 停止预览Camera的内容 |\n| startRecord | 开始录制Camera的内容 |\n| stopRecord | 停止录制Camera的内容 |\n| snapShot | 抓拍Camera的画面 |\n| genMp4Thumbnail | 生成MP4文件的封面 |\n| muteAudio | 对Camera声音进行静音操作 |\n| muteVideo | 对Camera画面进行开关操作 |\n| getRemoteAudioMute     | 获取Camera声音的静状态 |\n| getRemoteVideoMute | 获取Camera视频的开关状态 |\n\n\n**TuyaRTCEngineHandler接口说明**\n| 参数 | 说明 |\n| :------------ | :------------------------------------------------------------------- |\n| onLogMessage | SDK中的log输出回调函数 |\n| onInitialized | SDK初始化成功时候的回调函数 |\n| onDestoryed | SDK销毁成功时候的回调函数 |\n\n**TuyaRTCCameraHandler接口说明**\n| 参数 | 说明 |\n| :------------ | :------------------------------------------------------------------- |\n| onVideoFrame | 当前Camera的的视频数据回调函数 |\n| onFirstVideoFrame | 当前Camera的第一帧视频数据回调函数 |\n| onResolutionChanged | 当前Camera的视频分辨率变化时候的回调函数 |\n\n## RegionCode 对照表\n| 区域缩写 | 范围 |\n| :------------ | :------------------------------------------------------------------- |\n| cn | China |\n| us | America |\n| eu | Europe |\n| in | India |\n| ue | EasternAmerica |\n| we | WesternEurope |\n\n## Docs\n开发者可以参考API文档位于doc/html目录，在阅读之前请把代码下载到本地，然后在用浏览器打开\n\n## 约束\n- 应用程序只能有一个 TuyaRTCEngine 引擎\n- 应用程序可以通过不同的 Device Identity 创建不同的TuyaRTCCamera\n- 应用程序在执行录制，snapshot，mute 操作的时候一定是处在预览状态，否则程序执行结果可能不是你想要的\n\n## 用例代码\n\n``` java\n\npublic class P2PEngine {\n    private static final String TAG = \"P2PEngine\";\n\n    private final    TuyaRTCEngine                        tuyaRTCEngine;\n    private final    Context                              appContext;\n    private final    EglBase                              eglBase;\n    private final Activity caller;\n    private          ConcurrentHashMap\u003cString, P2PCamera\u003e p2pCameraMap = new ConcurrentHashMap\u003c\u003e();\n\n    public P2PEngine(Activity caller) {\n        TuyaRTCEngine.setLogConfigure(null, 0);\n        Log.e(TAG, \"SDK info: \" + TuyaRTCEngine.getSdkVersion() + \", Built at : \" + TuyaRTCEngine.getBuildTime());\n        this.caller = caller;\n        eglBase = EglBase.create(null /* sharedContext */, EglBase.CONFIG_PLAIN);\n        appContext = caller;\n        tuyaRTCEngine = new TuyaRTCEngine();\n\n    }\n\n    public void initialize(String clientId, String secret, String authCode) {\n        tuyaRTCEngine.initRtcEngine(appContext, eglBase,\n                clientId, secret, authCode, \"cn\", (TuyaRTCEngineHandler)caller);\n    }\n\n    public void destory() {\n        tuyaRTCEngine.destoryRtcEngine();\n    }\n\n    public int startPreview(String did, SurfaceViewRenderer renderer) {\n        P2PCamera camera = new P2PCamera(caller, tuyaRTCEngine, eglBase, did);\n        camera.startPreview(renderer);\n        p2pCameraMap.put(did, camera);\n        return 0;\n    }\n\n    public int stopPreview(String did) {\n        P2PCamera camera = p2pCameraMap.get(did);\n        if (camera != null) {\n            camera.destroy(did);\n            camera.stopPreview();\n        }\n        return 0;\n\n    }\n\n    public int startRecord(String deviceId, String mp4File) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.startRecord(mp4File);\n        }\n        return 0;\n    }\n\n    public int stopRecord(String deviceId) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.stopRecord();\n        }\n        return 0;\n    }\n\n\n    public int muteAudio(String deviceId, boolean mute) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.muteAudio(mute);\n        }\n        return 0;\n    }\n\n    public int muteVideo(String deviceId, boolean mute) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.muteVideo(mute);\n        }\n        return 0;\n    }\n\n    public boolean getAudioMute(String deviceId) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.getAudioMute();\n        }\n        return false;\n    }\n\n\n    public boolean getVideoMute(String deviceId) {\n        P2PCamera camera = p2pCameraMap.get(deviceId);\n        if (camera != null) {\n            return camera.getVideoMute();\n        }\n        return false;\n    }\n\n\n\n\n    static class P2PCamera {\n        private       TuyaRTCCamera       tuyaRTCCamera;\n        private       TuyaRTCEngine       tuyaRTCEngine;\n        private final String              deviceId;\n        private final EglBase             eglBase;\n        private       SurfaceViewRenderer viewRenderer;\n        private Activity activityCaller;\n\n        public P2PCamera(Activity activity, TuyaRTCEngine engine, EglBase egl, String did) {\n            this.activityCaller = activity;\n            this.eglBase = egl;\n            tuyaRTCEngine = engine;\n            deviceId = did;\n            tuyaRTCCamera = tuyaRTCEngine.createTuyaCamera(did);\n        }\n\n\n        public void destroy(String did) {\n            tuyaRTCEngine.destoryTuyaCamera(did);\n        }\n\n        public int startPreview(SurfaceViewRenderer renderer) {\n            viewRenderer = renderer;\n            activityCaller.runOnUiThread(new Runnable() {\n                @Override\n                public void run() {\n                    viewRenderer.setKeepScreenOn(true);\n                    viewRenderer.setZOrderMediaOverlay(true);\n                    viewRenderer.setZOrderOnTop(false);\n                    viewRenderer.init(eglBase.getEglBaseContext(), null);\n                    viewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT, RendererCommon.ScalingType.SCALE_ASPECT_BALANCED);\n\n\n                }\n            });\n\n            tuyaRTCCamera.startPreview((VideoSink)renderer, new TuyaRTCCameraHandler() {\n                @Override\n                public void onVideoFrame(VideoFrame videoFrame) {\n\n                }\n\n                @Override\n                public void onFirstVideoFrame(int i, int i1) {\n\n                }\n\n                @Override\n                public void onResolutionChanged(int i, int i1, int i2, int i3) {\n\n                }\n            });\n            return 0;\n        }\n\n        public int stopPreview() {\n            if (viewRenderer != null) {\n                activityCaller.runOnUiThread(new Runnable() {\n                    @Override\n                    public void run() {\n                        viewRenderer.release();\n                    }\n                });\n            }\n            return tuyaRTCCamera.stopPreview();\n        }\n\n        public int startRecord(String mp4File) {\n            boolean ret = tuyaRTCCamera.startRecord(mp4File);\n            return ret ? 0 : -1;\n        }\n\n        public int stopRecord() {\n            boolean ret = tuyaRTCCamera.stopRecord();\n            return ret ? 0 : -1;\n        }\n\n        public int muteAudio(boolean mute) {\n            return tuyaRTCCamera.muteAudio(mute);\n        }\n\n        public int muteVideo(boolean mute) {\n            return tuyaRTCCamera.muteVideo(mute);\n        }\n\n        public boolean getAudioMute() {\n            return tuyaRTCCamera.getRemoteAudioMute();\n        }\n\n        public boolean getVideoMute() {\n            return tuyaRTCCamera.getRemoteVideoMute();\n        }\n    }\n}\n``` \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuya%2Ftuya-rtc-camera-sdk-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftuya%2Ftuya-rtc-camera-sdk-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuya%2Ftuya-rtc-camera-sdk-android/lists"}