{"id":13905015,"url":"https://github.com/AAkira/ExoPlayerManager","last_synced_at":"2025-07-18T02:32:32.477Z","repository":{"id":71686185,"uuid":"83787384","full_name":"AAkira/ExoPlayerManager","owner":"AAkira","description":"An android library that wraps the ExoPlayer and the IMA Android SDK which plays a video advertisement. This is written in Kotlin.","archived":false,"fork":false,"pushed_at":"2018-10-19T09:42:11.000Z","size":558,"stargazers_count":79,"open_issues_count":3,"forks_count":24,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-21T20:13:19.332Z","etag":null,"topics":["android","android-library","exoplayer","hls-sample","hls-video","ima-sdk","kotlin"],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AAkira.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-03-03T10:35:01.000Z","updated_at":"2024-01-05T13:16:48.000Z","dependencies_parsed_at":"2023-02-23T13:31:24.368Z","dependency_job_id":null,"html_url":"https://github.com/AAkira/ExoPlayerManager","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AAkira%2FExoPlayerManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AAkira%2FExoPlayerManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AAkira%2FExoPlayerManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AAkira%2FExoPlayerManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AAkira","download_url":"https://codeload.github.com/AAkira/ExoPlayerManager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226336421,"owners_count":17608834,"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":["android","android-library","exoplayer","hls-sample","hls-video","ima-sdk","kotlin"],"created_at":"2024-08-06T23:01:08.516Z","updated_at":"2024-11-25T13:30:46.456Z","avatar_url":"https://github.com/AAkira.png","language":"Kotlin","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# ExoPlayerManager\n\nAn android library that wraps the ExoPlayer and the IMA Android SDK which plays a video advertisement.  \nThis is written in Kotlin.\n\n[![Platform](http://img.shields.io/badge/platform-android-brightgreen.svg?style=flat)](http://developer.android.com/index.html)\n[![Language](http://img.shields.io/badge/language-kotlin-green.svg?style=flat)](https://kotlinlang.org)\n[![License](http://img.shields.io/badge/license-apache2.0-lightgrey.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Download PlayerManager](https://api.bintray.com/packages/aakira/maven/exoplayer-manager/images/download.svg)](https://bintray.com/aakira/maven/exoplayer-manager/_latestVersion)\n[![Download IMA plugin](https://api.bintray.com/packages/aakira/maven/exoplayer-manager-ima/images/download.svg)](https://bintray.com/aakira/maven/exoplayer-manager-ima/_latestVersion)\n\n## Preview\n\n### Play a HLS video\n\n![HLS_SAMPLE][hls_sample]\n\n### Play a video advertisement\n\n![IMA_SAMPLE][ima_sample] \n\n## Features\n\n* Play a HLS video\n* Play a video advertisement using the [IMA SDK v3](https://github.com/googleads/googleads-ima-android).\n* Can limit the bitrate\n\n## Requirements\n\n* Kotlin 1.1.0 or above\n* ExoPlayer 2.8 or above\n* Android SDK version 4.1 or above (ExoPlayer requirements)\n\n## Usage\n\n### Play HLS\n\n```Kotlin\n\n// inject from xml\nval playerView: PlayerView by bindView(R.id.playerView)\n\nval playerManager: ExoPlayerManager = ExoPlayerManager.Builder(context).run {\n            build(\n                    renderersFactory = createRenderersFactory(), // You can set your RenderersFactory\n                    loadControl = createDefaultLoadControl(      // You can set your LoadControl  \n                            minBufferMs = 15000,\n                            maxBufferMs = 50000,\n                            bufferForPlaybackMs = 2500,\n                            bufferForPlaybackAfterRebufferMs = 5000\n                    ),\n                    drmSessionManager = null                     // You can set your drmSessionManager \n            )\n        }\n\n// inject PlayerView\nplayerManager.injectView(playerView)\n\nval dataSource = DataSourceCreator.UrlBuilder(\n        url = HLS_SAMPLE_URL,\n        userAgent = Util.getUserAgent(this, \"UserAgent\"),\n        okHttpClient = your ok http client, // you can use your okhttp client if you want use it.\n        dataSourceCreatorInterface = your data source // you can use your data source if you want use it.\n)\nplayerManager.setHlsSource(dataSource.build())\n\n// play\nplayerManager.play()\n\n// pause\nplayerManager.pause()\n\n// stop\nplayerManager.stop()\n\n// release\nplayerManager.release()\n\n// mute\nplayerManager.toMute()\n\n// limit bitrate\nplayerManager.setMaxVideoBitrate((60 * 1000).toLong())\n\n// change playback speed (speed, pitch)\nplayerManager.setPlaybackParameters(2f, 2f)\n\n// state listener\nplayerManager.addOnStateChangedListener { playWhenReady: Boolean, playbackState: Int -\u003e\n}\n\n// error listener\nplayerManager.addOnPlayerErrorListener {\n}\n\n```\n\n```xml\n\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cRelativeLayout \n    xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:keepScreenOn=\"true\"\u003e\n\n    \u003ccom.google.android.exoplayer2.ui.PlayerView\n        android:id=\"@+id/playerView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:focusable=\"true\"\n        app:surface_type=\"texture_view\"\n        app:use_controller=\"false\" /\u003e\n\u003c/RelativeLayout\u003e\n```\n\n### Play a video advertisement\n\n```Kotlin\n\nval adPlayerController: AdPlayerController = AdPlayerController.Builder(\n        context = this,\n        playerView = playerView,\n        adUiContainer = adUiContainer,\n        language = \"us\",\n        userAgent = Util.getUserAgent(this, \"UserAgent\"),\n        playerManager = playerManager)\n        .create()\n\n// call in Activity onResume()\nadPlayerController.resume()\n\n// call in Activity onPause()\nadPlayerController.pause()\n\n// call in Activity onDestroy()\nadPlayerController.destroy()\n\n// call in Activity detachedFromWindow()\nadPlayerController.release()\n\n```\n\n## Setup\n\n### Gradle\n\nAdd the dependency in your `build.gradle`\n\n```groovy\nbuildscript {\n\trepositories {\n\t\tjcenter()\n\t}\n}\n\ndependencies {\n\timplementation 'com.github.aakira:exoplayer-manager:0.13.0@aar'\n\timplementation 'com.github.aakira:exoplayer-manager-ima:0.13.0@aar' // if you use an IMA SDK\n}\n```\n## Using libraries\n\n* [Exo Player r2.x](https://github.com/google/ExoPlayer)\n* [googleads-ima-android(IMA Android SDK v3)](https://github.com/googleads/googleads-ima-android) (plugin)\n* [kotterknife](https://github.com/JakeWharton/kotterknife) (only sample)\n* [timber](https://github.com/JakeWharton/timber) (only sample)\n\nreference : [exoplayer-textureview](https://github.com/satorufujiwara/exoplayer-textureview)\n\n## Author\n\n### Akira Aratani\n\n* Twitter\n - [@_a_akira](https://twitter.com/_a_akira)\n* Mail\n - developer.a.akira@gmail.com\n\n## License\n\n```\nCopyright (C) 2017 A.Akira\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n[hls_sample]: /art/hls_sample.gif\n[ima_Sample]: /art/ima_sample.gif\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAAkira%2FExoPlayerManager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAAkira%2FExoPlayerManager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAAkira%2FExoPlayerManager/lists"}