{"id":15111140,"url":"https://github.com/apivideo/api.video-android-upstream","last_synced_at":"2026-02-27T23:10:59.594Z","repository":{"id":61348268,"uuid":"492902399","full_name":"apivideo/api.video-android-upstream","owner":"apivideo","description":"Record your camera and microphone. Upload your video at the same time.","archived":false,"fork":false,"pushed_at":"2023-11-21T17:02:21.000Z","size":10828,"stargazers_count":23,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T15:47:15.132Z","etag":null,"topics":["android","library","service","video"],"latest_commit_sha":null,"homepage":"https://api.video","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apivideo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2022-05-16T15:50:53.000Z","updated_at":"2025-02-25T09:22:37.000Z","dependencies_parsed_at":"2024-10-09T14:44:35.167Z","dependency_job_id":"af7eea4b-f788-41fb-9844-0f02412e9a0c","html_url":"https://github.com/apivideo/api.video-android-upstream","commit_stats":{"total_commits":38,"total_committers":2,"mean_commits":19.0,"dds":0.3157894736842105,"last_synced_commit":"22d2901f4fee1bd9c65178efe1e03fee3dafe947"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/apivideo/api.video-android-upstream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apivideo%2Fapi.video-android-upstream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apivideo%2Fapi.video-android-upstream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apivideo%2Fapi.video-android-upstream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apivideo%2Fapi.video-android-upstream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apivideo","download_url":"https://codeload.github.com/apivideo/api.video-android-upstream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apivideo%2Fapi.video-android-upstream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29918973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"ssl_error","status_checked_at":"2026-02-27T19:37:41.463Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["android","library","service","video"],"created_at":"2024-09-26T00:01:50.639Z","updated_at":"2026-02-27T23:10:59.563Z","avatar_url":"https://github.com/apivideo.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\u003cdocumentation_excluded\u003e--\u003e\n[![badge](https://img.shields.io/twitter/follow/api_video?style=social)](https://twitter.com/intent/follow?screen_name=api_video)\n\u0026nbsp; [![badge](https://img.shields.io/github/stars/apivideo/api.video-android-upstream?style=social)](https://github.com/apivideo/api.video-android-upstream)\n\u0026nbsp; [![badge](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.api.video)](https://community.api.video)\n![](https://github.com/apivideo/.github/blob/main/assets/apivideo_banner.png)\n\u003ch1 align=\"center\"\u003eAndroid Upstream: camera + progressive upload\u003c/h1\u003e\n\n[api.video](https://api.video) is the video infrastructure for product builders. Lightning fast\nvideo APIs for integrating, scaling, and managing on-demand \u0026 low latency live streaming features in\nyour app.\n\n## Table of contents\n\n- [Table of contents](#table-of-contents)\n- [Project description](#project-description)\n- [Getting started](#getting-started)\n  - [Installation](#installation)\n    - [Gradle](#gradle)\n  - [Permissions](#permissions)\n  - [Code sample](#code-sample)\n- [Tips](#tips)\n- [Documentation](#documentation)\n- [Sample application](#sample-application)\n- [Dependencies](#dependencies)\n- [FAQ](#faq)\n\n\u003c!--\u003c/documentation_excluded\u003e--\u003e\n\u003c!--\u003cdocumentation_only\u003e\n---\ntitle: api.video Android Upstream\nmeta: \n  description: The official api.video Android Upstream package for api.video. [api.video](https://api.video/) is the video infrastructure for product builders. Lightning fast video APIs for integrating, scaling, and managing on-demand \u0026 low latency live streaming features in your app.\n---\n\n# api.video Android Upstream: camera + progressive upload\n\n[api.video](https://api.video/) is the video infrastructure for product builders. Lightning fast video APIs for integrating, scaling, and managing on-demand \u0026 low latency live streaming features in your app.\n\n\u003c/documentation_only\u003e--\u003e\n## Project description\n\nThis library is an easy way to capture your video and microphone and upload it\nto [api.video](https://api.video/) at the same time.\n\n## Getting started\n\n### Installation\n\n#### Gradle\n\nOn build.gradle add the following code in dependencies:\n\n```groovy\ndependencies {\n    implementation 'video.api:android-upstream:1.1.0'\n}\n```\n\n### Permissions\n\n```xml\n\n\u003cmanifest\u003e\n    \u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.RECORD_AUDIO\" /\u003e\n\u003c/manifest\u003e\n```\n\nYour application must dynamically require `android.permission.CAMERA`\nand `android.permission.RECORD_AUDIO`.\n\n### Code sample\n\n1. Add [permissions](#permissions) to your `AndroidManifest.xml` and request them in your\n   Activity/Fragment.\n2. Add a `ApiVideoView` to your Activity/Fragment layout for the camera preview.\n\n```xml\n\n\u003cvideo.api.upstream.views.ApiVideoView android:id=\"@+id/apiVideoView\"\n    android:layout_width=\"match_parent\" android:layout_height=\"match_parent\" /\u003e\n```\n\n3. Create an `ApiVideoUpstream` instance in your fragment or activity.\n\n```kotlin\nclass MyFragment : Fragment() {\n    private var apiVideoView: ApiVideoView? = null\n    private lateinit var upstream: ApiVideoUpstream\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        val apiVideoView = view.findViewById(R.id.apiVideoView)\n        val audioConfig = AudioConfig(\n            bitrate = 128 * 1000, // 128 kbps\n            sampleRate = 44100, // 44.1 kHz\n            stereo = true,\n            echoCanceler = true,\n            noiseSuppressor = true\n        )\n        val videoConfig = VideoConfig(\n            bitrate = 4 * 1000 * 1000, // 4 Mbps\n            resolution = Resolution.RESOLUTION_720,\n            fps = 30\n        )\n        ApiVideoUpstream(\n            context = requireContext(),\n            apiKey = apiKey,\n            timeout = 60000, // 1 min\n            initialAudioConfig = audioConfig,\n            initialVideoConfig = videoConfig,\n            apiVideoView = apiVideoView\n        )\n    }\n}\n```\n\n4. [Create or get your video id](https://github.com/apivideo/api.video-android-client#videosapi)\n   or [create or get an upload token](https://github.com/apivideo/api.video-android-client#uploadtokensapi)\n   from [api.video](https://api.video/)\n   Alternatively, you can create or get an upload token in\n   the [dashboard](https://dashboard.api.video/upload-tokens).\n\n5. Start your record\n\nIf you are using video id:\n\n```kotlin\nupstream.startStreamingForVideoId(\"YOUR_VIDEO_ID\")\n```\n\nIf you are using an upload token:\n\n```kotlin\nupstream.startStreamingForToken(\"YOUR_UPLOAD_TOKEN\")\n```\n\nFor detailed information on this upstream library API, refers\nto [API documentation](https://apivideo.github.io/api.video-android-upstream/).\n\n## Tips\n\n* If a part of the video is not uploaded, you can resume the upload by creating a\n  new `MultiFileUploader` with `ApiVideoUpstream.loadExistingSession`.\n* You can check device supported configurations by using the helper: `Helper`\n\n## Documentation\n\n* [API documentation](https://apivideo.github.io/api.video-android-upstream/)\n* [api.video documentation](https://docs.api.video/)\n\n## Sample application\n\nA demo application demonstrates how to use this upstream library. See `/example` folder.\n\n## Dependencies\n\nWe are using external library\n\n| Plugin                                                  | README                                                                       |\n|---------------------------------------------------------|------------------------------------------------------------------------------|\n| [StreamPack](https://github.com/ThibaultBee/StreamPack) | [README.md](https://github.com/ThibaultBee/StreamPack/blob/master/README.md) |\n\n## FAQ\n\nIf you have any questions, ask us in the [community](https://community.api.video) or\nuse [issues](https://github.com/apivideo/api.video-android-upstream/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapivideo%2Fapi.video-android-upstream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapivideo%2Fapi.video-android-upstream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapivideo%2Fapi.video-android-upstream/lists"}