{"id":18367693,"url":"https://github.com/jwplayer/jwplayer-cast-receiver","last_synced_at":"2025-04-06T16:32:53.505Z","repository":{"id":40625772,"uuid":"85352774","full_name":"jwplayer/jwplayer-cast-receiver","owner":"jwplayer","description":"JW Player Custom Chromecast Receiver Application","archived":false,"fork":false,"pushed_at":"2024-09-26T21:19:22.000Z","size":13419,"stargazers_count":20,"open_issues_count":2,"forks_count":7,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-03-22T03:51:12.649Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","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/jwplayer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-17T20:39:18.000Z","updated_at":"2024-03-14T16:05:38.000Z","dependencies_parsed_at":"2022-09-20T12:25:38.778Z","dependency_job_id":null,"html_url":"https://github.com/jwplayer/jwplayer-cast-receiver","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwplayer%2Fjwplayer-cast-receiver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwplayer%2Fjwplayer-cast-receiver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwplayer%2Fjwplayer-cast-receiver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwplayer%2Fjwplayer-cast-receiver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwplayer","download_url":"https://codeload.github.com/jwplayer/jwplayer-cast-receiver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247513078,"owners_count":20950986,"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":[],"created_at":"2024-11-05T23:23:01.883Z","updated_at":"2025-04-06T16:32:51.591Z","avatar_url":"https://github.com/jwplayer.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JW Player Custom Chromecast Receiver\n\n## Building the Receiver\n\n```bash\n# Install dependencies\nnpm install -g gulp-cli \u0026\u0026 npm install\n\n# Build the receiver\ngulp build\n\n# Serve the receiver\ngulp serve\n\n# Rebuilding the receiver on changes and serving the receiver\ngulp serve watch\n```\n\n## Available gulp tasks\n\nWe're using gulp as build system, currently the following tasks are available:\n\n```code\n$ gulp --tasks-simple\nserve         # starts a http server that serves the receiver.\nclean         # cleans the build directories.\nwatch         # watches the src directories for changes.\ndefault       # invokes build.\nbuild         # builds a debug and a release version of the receiver.\nbuild:debug   # builds a debug version of the receiver.\nbuild:release # builds a release version of the receiver.\ndev           # meta-task that invokes both serve and watch.\n```\n\nFor debug builds, the build script will try to copy jwplayer.js (and assets) from `../../jwplayer-commercial/bin-debug/`.\nIf this fails, the script will build against a player on the CDN, the version of the player it builds against is defined in the build script.\n\n## Setting Up the Receiver\n\n### Receiver Application URL\n\nThere are two options to build the Receiver Application URL.\n\n#### Using a JW Player Key\n\n1. Build and serve the receiver on a secure server that supports **HTTPS** (i.e. `https://domain.com/receiver`)\n2. [URI Encode](http://meyerweb.com/eric/tools/dencoder/) your JW Player Key (i.e. `A1jqZjIUo28r0w==` becomes `A1jqZjIUo28r0w%3D%3D`)\n3. The URL is then `https://domain.com/receiver?key=A1jqZjIUo28r0w%3D%3D`\n4. To verify it is setup correct, load the URL in the browser, which will display a page with a spinner in the middle\n\n**Note:** You will not be able to customize the appearance of the receiver with this method\n\n#### Using a Configuration File\n\n1. Build and serve the receiver on a secure server that supports **HTTPS** (i.e. `https://domain.com/receiver`)\n2. In the `config` folder, rename the `sample` directory to the application name you would like to use\n3. Update `config/{directoryName}/config.json` in the directory with the desired config values\n3. The URL is then `https://domain.com/receiver?appName={directoryName}`\n4. To verify it is setup correct, load the URL in the browser, which will display a page with a spinner in the middle\n\n### Receiver Application ID\n\n1. Sign in to the [Google Cast SDK Developer Console](https://cast.google.com/u/0/publish/#/signup)\n2. [Register](https://developers.google.com/cast/docs/registration) your Custom Receiver URL to obtain an application ID \n\n### Setting up JW Player\n\n#### Web Application\n\nTo support custom receivers, you will need to provide the Application ID in the configuration of your player\n\n```\n{ file: \"bbbuunny.mp4\",\n  cast: {\n    customAppId: \"Your Application ID\"\n  }\n}\n```  \n#### Mobile Applications\n\nIn the `senders` directory, there are sample native apps (Android and iOS) that support the custom receiver.\n\n### Release\n\nTo test your receiver, you need to register the serial number of any Chromecast test devices. Once it is ready to be published,\ngo into the console and go through the publishing process.\n\nFor testing purposes, you will need to register the receiver at the [Google Cast SDK Developer Console\n](https://cast.google.com/u/0/publish/#/signup) to obtain an Application ID. \nThe receiver will use the `appName` from the search portion of the receiver URL in order to load the config file.\nSo when for example your appName is `cast-test` you need to register the following receiver URL with Google: `https://path-to-receiver?appName=cast-test`.\n\n## Customization of the Receiver\n\n### Basic\n\nIn you are using a configuration file to create an Application ID, you are currently able set some basic customizations to the receiver in addition to the JW Player Key (see `config/sample/config.json` as an example):\n- `title`: The title of the HTML page\n- `logoUrl`: The path to a logo that will be displayed when idle or loading\n- `theme`: Two themes are currently available, `light` and `dark`\n\nYou can use multiple config directories and then have multiple receiver URLs. This allows you support different styled receivers using only one instance on your server.\n\n### Advanced\n\nIf your are not using the configuration file or would like to perform more customizations, here are some classes that are available to be styles:\n\n- `app-state-loading`: The application is loading.\n- `app-state-idle`: The application has been loaded and content can be Cast.\n- `content-state-loading`: Content has been cast, and the application is trying to play it.\n- `content-state-playback`: Content is playing.\n- `content-state-buffering`: Content playback has begun and the player is buffering.\n- `content-state-paused`: Content playback has been paused.\n- `content-state-nextup`: Content is {playing,buffering} and the next up overlay is being shown.\n- `app-state-error`: An error occured playing media, the application will try to recover by playing the next item in the queue or transition into `app-state-idle`. If the error is not recoverable, the app will exit.\n- `ad-playback`: Ads are being played.\n\nThe following flags can be used to modify state behavior:\n\n- `flag-seek`: The user is seeking in media.\n- `flag-user-inactive`: Flag set 5 seconds after the user controlled media for the last time.\n- `flag-recoverable-error`: Flag set when an error is recoverable.\n\n### Features\n\n- DRM are supported(Widevine/PlayReady)\n- VAST 3.0 and Google IMA Pre-roll ads are supported only in Android/iOS sender apps\n- Ad skipping and ad click-through are not supported\n- DASH/WEBM VP9 streams are not supported\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwplayer%2Fjwplayer-cast-receiver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwplayer%2Fjwplayer-cast-receiver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwplayer%2Fjwplayer-cast-receiver/lists"}