{"id":13437045,"url":"https://github.com/canalplus/rx-player","last_synced_at":"2026-03-09T18:14:48.647Z","repository":{"id":33934232,"uuid":"37657658","full_name":"canalplus/rx-player","owner":"canalplus","description":"DASH/Smooth HTML5 Video Player","archived":false,"fork":false,"pushed_at":"2026-03-06T13:12:30.000Z","size":156439,"stargazers_count":928,"open_issues_count":73,"forks_count":137,"subscribers_count":47,"default_branch":"dev","last_synced_at":"2026-03-06T17:27:36.270Z","etag":null,"topics":["dash","eme","hss","html5","live-streaming","mse","player","streaming","video","video-player","video-streaming"],"latest_commit_sha":null,"homepage":"https://developers.canal-plus.com/rx-player/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canalplus.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-06-18T12:16:05.000Z","updated_at":"2026-03-02T23:22:35.000Z","dependencies_parsed_at":"2023-09-23T09:33:36.059Z","dependency_job_id":"21d0364e-27fb-425e-9701-b294bc2077cf","html_url":"https://github.com/canalplus/rx-player","commit_stats":{"total_commits":5183,"total_committers":32,"mean_commits":161.96875,"dds":"0.23577078911827132","last_synced_commit":"b9beded75c7260fa604b357a321a21beea5193cd"},"previous_names":[],"tags_count":125,"template":false,"template_full_name":null,"purl":"pkg:github/canalplus/rx-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canalplus%2Frx-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canalplus%2Frx-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canalplus%2Frx-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canalplus%2Frx-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canalplus","download_url":"https://codeload.github.com/canalplus/rx-player/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canalplus%2Frx-player/sbom","scorecard":{"id":264091,"data":{"date":"2025-08-11","repo":{"name":"github.com/canalplus/rx-player","commit":"ba3e16250129973b1f4b17caa2e3f4f51da14307"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"name":"Code-Review","score":5,"reason":"Found 10/19 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'packages' permission set to 'write': .github/workflows/publish_test_package.yml:36","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish_test_package.yml:37","Warn: no topLevel permission defined: .github/workflows/checks.yml:1","Warn: no topLevel permission defined: .github/workflows/demo_check.yml:1","Warn: no topLevel permission defined: .github/workflows/perfs.yml:1","Warn: no topLevel permission defined: .github/workflows/publish_test_package.yml:1","Warn: no topLevel permission defined: .github/workflows/script_check.yml:1","Warn: no topLevel permission defined: .github/workflows/sonarcloud_analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/tests_check.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v4.3.0 not signed: https://api.github.com/repos/canalplus/rx-player/releases/206496629","Warn: release artifact v3.33.5 not signed: https://api.github.com/repos/canalplus/rx-player/releases/209616528","Warn: release artifact v4.2.0 not signed: https://api.github.com/repos/canalplus/rx-player/releases/175252775","Warn: release artifact v3.33.4 not signed: https://api.github.com/repos/canalplus/rx-player/releases/180241169","Warn: release artifact v4.1.0 not signed: https://api.github.com/repos/canalplus/rx-player/releases/163516486","Warn: release artifact v4.3.0 does not have provenance: https://api.github.com/repos/canalplus/rx-player/releases/206496629","Warn: release artifact v3.33.5 does not have provenance: https://api.github.com/repos/canalplus/rx-player/releases/209616528","Warn: release artifact v4.2.0 does not have provenance: https://api.github.com/repos/canalplus/rx-player/releases/175252775","Warn: release artifact v3.33.4 does not have provenance: https://api.github.com/repos/canalplus/rx-player/releases/180241169","Warn: release artifact v4.1.0 does not have provenance: https://api.github.com/repos/canalplus/rx-player/releases/163516486"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":6,"reason":"dependency not pinned by hash detected -- score normalized to 6","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:144: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:146: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/checks.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/checks.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/checks.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/demo_check.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/demo_check.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/demo_check.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/demo_check.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/perfs.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/perfs.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/perfs.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/perfs.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/perfs.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/perfs.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_test_package.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/publish_test_package.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_test_package.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/publish_test_package.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_test_package.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/publish_test_package.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_test_package.yml:75: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/publish_test_package.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/script_check.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/script_check.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/script_check.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/script_check.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/sonarcloud_analysis.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/sonarcloud_analysis.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests_check.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/tests_check.yml/dev?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests_check.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/canalplus/rx-player/tests_check.yml/dev?enable=pin","Warn: downloadThenRun not pinned by hash: scripts/install_rust_toolchain.sh:94","Warn: npmCommand not pinned by hash: scripts/update-version:43","Info:   0 out of  25 GitHub-owned GitHubAction dependencies pinned","Info:   2 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:  11 out of  12 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'dev'","Warn: branch protection not enabled for branch 'stable'","Warn: branch protection not enabled for branch 'legacy-v3'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":-1,"reason":"internal error: internal error: Client.Checks.ListCheckRunsForRef: error during graphqlHandler.setupCheckRuns: non-200 OK status code: 502 Bad Gateway body: \"\u003chtml\u003e\\r\\n\u003chead\u003e\u003ctitle\u003e502 Bad Gateway\u003c/title\u003e\u003c/head\u003e\\r\\n\u003cbody\u003e\\r\\n\u003ccenter\u003e\u003ch1\u003e502 Bad Gateway\u003c/h1\u003e\u003c/center\u003e\\r\\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\\r\\n\u003c/body\u003e\\r\\n\u003c/html\u003e\\r\\n\"","details":null,"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T11:31:58.010Z","repository_id":33934232,"created_at":"2025-08-17T11:31:58.010Z","updated_at":"2025-08-17T11:31:58.010Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30306346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T17:35:44.120Z","status":"ssl_error","status_checked_at":"2026-03-09T17:35:43.707Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["dash","eme","hss","html5","live-streaming","mse","player","streaming","video","video-player","video-streaming"],"created_at":"2024-07-31T03:00:53.959Z","updated_at":"2026-03-09T18:14:48.637Z","avatar_url":"https://github.com/canalplus.png","language":"TypeScript","funding_links":[],"categories":["Media Players","HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./doc/static/img/logo.png#gh-light-mode-only\" alt=\"RxPlayer's logo\"/\u003e\n  \u003cimg src=\"./doc/static/img/logo-white.png#gh-dark-mode-only\" alt=\"RxPlayer's logo\"/\u003e\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003ca href=\"https://developers.canal-plus.com/rx-player/doc/api/Overview.html\"\u003e📖 \u003cb\u003eAPI documentation\u003c/b\u003e\u003c/a\u003e\n  -\n  \u003ca href=\"https://developers.canal-plus.com/rx-player/\"\u003e⏯ \u003cb\u003eDemo\u003c/b\u003e\u003c/a\u003e\n  -\n  \u003ca href=\"https://developers.canal-plus.com/rx-player/doc/Getting_Started/Welcome.html\"\u003e🎓 \u003cb\u003eGetting Started\u003c/b\u003e\u003c/a\u003e\n  -\n  \u003ca href=\"./CONTRIBUTING.md\"\u003e🔧 \u003cb\u003eContributing\u003c/b\u003e\u003c/a\u003e\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003ca href=\"https://github.com/canalplus/rx-player/releases\"\u003e\u003cimg src=\"https://img.shields.io/badge/dynamic/json.svg?label=Latest%20release\u0026url=https://api.github.com/repos/canalplus/rx-player/releases/latest\u0026query=$.tag_name\u0026colorB=blue\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/canalplus/rx-player/actions/workflows/checks.yml\"\u003e\u003cimg src=\"https://github.com/canalplus/rx-player/actions/workflows/checks.yml/badge.svg\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://sonarcloud.io/summary/new_code?id=rx-player\"\u003e\u003cimg src=\"https://sonarcloud.io/api/project_badges/measure?project=rx-player\u0026metric=alert_status\" /\u003e\u003c/a\u003e\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003ca href=\"https://nodei.co/npm/rx-player/\"\u003e\u003cimg src=\"https://nodei.co/npm/rx-player.png?compact=true)\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nThe RxPlayer is a library implementing a\n[DASH](https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP) and\n[Microsoft Smooth Streaming](https://en.wikipedia.org/wiki/Adaptive_bitrate_streaming#Microsoft_Smooth_Streaming)\nmedia player on a browser, by relying on the HTML5\n[Media Source Extensions](https://en.wikipedia.org/wiki/Media_Source_Extensions) and\n[Encrypted Media extensions](https://en.wikipedia.org/wiki/Encrypted_Media_Extensions)\nbrowser APIs.\n\nThis library only implements the core, non-UI part of a media player - you provide the\ninterface while it handles the streaming. See our\n[demo page](https://developers.canal-plus.com/rx-player/) for an example implementation.\n\nInitially built for Canal+'s complex requirements across diverse devices, it prioritizes\nconfigurability and integration flexibility.\n\n---\n\nThe RxPlayer can be seen as the \"engine\" providing adaptive streaming capabilities to an\napplication:\n\n- Beyond DASH and Smooth Streaming support (and HLS on devices with native support like\n  Safari), it handles complex scenarios like multiple DRM keys, fallback mechanisms for\n  undecipherable or undecodable qualities, most subtitle formats and advanced heuristics\n  to keep the playback going.\n\n- Multi-threaded architecture: core logic can be offloaded to a separate thread, keeping\n  the player from blocking your application and vice-versa.\n\n- Production-tested across a wide device range: from low-end set-top boxes to high-end\n  computers, with optimizations for constrained environments.\n\n- Highly configurable with\n  [a well-documented API](https://developers.canal-plus.com/rx-player/doc/api/Overview.html):\n  player behavior can be controlled at a granular level.\n\n## How to use it?\n\nThe fastest way to use the player directly in your code is to add this repository as a\ndependency.\n\nYou can do it via [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/):\n\n```sh\n# when using npm:\nnpm install --save rx-player\n\n# or, when using yarn instead:\nyarn add rx-player\n```\n\nYou can then directly import and use the RxPlayer in your code:\n\n```js\nimport RxPlayer from \"rx-player\";\n\nconst player = new RxPlayer({\n  videoElement: document.querySelector(\"video\"),\n});\n\n// play a video\nplayer.loadVideo({\n  url: \"http://vm2.dashif.org/livesim-dev/segtimeline_1/testpic_6s/Manifest.mpd\",\n  transport: \"dash\",\n  autoPlay: true,\n});\n```\n\nWe've also written short tutorials to help you familiarize with the RxPlayer API:\n\n- [Quick start into the API](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Quick_Start.html).\n- [Playing contents with DRMs](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Content_with_DRM.html).\n- [Selecting a track](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/Selecting_a_Track.html)\n- [Listening to events contained in the content](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Tutorials/EventStream_Handling.html)\n\nTo be able to play with the player without needing to perform any setup we also created\nmultiple live-editable demos:\n\n- [Playing a clear DASH content](https://codesandbox.io/s/rx-player-classic-wc38j)\n- [Playing an encrypted DASH content](https://codesandbox.io/p/sandbox/rx-player-drm-forked-nf6tnx)\n- [Playing an RxPlayer-specific MetaPlaylist content](https://codesandbox.io/p/sandbox/rx-player-metaplaylist-forked-4ww55x)\n\n### Minimal Builds\n\nTo reduce the size of the final code, you might also want to import a minimal version of\nthe player and only import the features you need. This is documented\n[here ](https://developers.canal-plus.com/rx-player/doc/Getting_Started/Minimal_Player.html):\n\nFor example, to play encrypted DASH contents, you could just write:\n\n```js\nimport RxPlayer from \"rx-player/minimal\";\nimport { DASH, EME } from \"rx-player/features\";\n\n// Allow to play encrypted DASH contents\nRxPlayer.addFeatures([DASH, EME]);\n```\n\n## API\n\nWe documented the API in every little detail in\n[the API documentation](https://developers.canal-plus.com/rx-player/doc/api/Overview.html).\n\nYou can also refer to the documentation of our previous versions\n[here](https://developers.canal-plus.com/rx-player/documentation_pages_by_version.html)\n\nThese documentation pages are automatically generated from the content of the\n[doc/api](./doc/api/Overview.md) directory in this repository.\n\n## Demo\n\nYou can view our online Demo, built from our last version,\n[here](https://developers.canal-plus.com/rx-player/).\n\nThis demo is a small application written in [React](https://github.com/facebook/react)\ndemonstrating a simple usage of the player.\n\nDemo pages for our previous versions are also available\n[here](https://developers.canal-plus.com/rx-player/demo_page_by_version.html).\n\n## Contribute\n\nAfter cloning our repo, you should first install our dependencies via\n[npm](https://www.npmjs.com/):\n\n```sh\nnpm install\n```\n\nYou can then run the `list` script to see the different scripts provided to test your\nmodifications, run a demo locally etc.:\n\n```sh\nnpm run list\n```\n\nDetails on how to contribute is written in the [CONTRIBUTING.md file](./CONTRIBUTING.md)\nat the root of this repository.\n\n## Features\n\nKey features:\n\n- live and VoD DASH (including low-latency) / Smooth / HLS* / Downloaded contents / MP4* /\n  WebM\\* contents and more.\n\n- advanced encryption configuration: multiple keys in a single or separate licenses for a\n  given content, automatic fallbacks on undecipherable contents, persistent licenses,\n  complex `MediaKeySystemConfiguration`.\n\n- TTML, WebVTT, SAMI and SRT subtitles.\n\n- multi-threading support.\n\n- extensive APIs: audio-only, video track selection, manual garbage collection of\n  segments, Peer-To-Peer integration, quality filtering...\n\n- adaptive streaming algorithms: both a network-based for quick start-up and buffer-based\n  to provide the best quality possible.\n\n- complex segment scheduling logic: prioritizing closer media segments while making sure\n  that the bandwidth usage is always optimal and the rebuffering risks always low.\n\n- heuristics to ensure playback stays smooth, the RxPlayer monitors playback and take\n  actions if the current device has issues while decoding the stream.\n\n- optional WebAssembly-based MPD parser for DASH contents (for very large Manifests).\n\n\\* In \"directfile\" mode, on compatible browsers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanalplus%2Frx-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanalplus%2Frx-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanalplus%2Frx-player/lists"}