{"id":20944463,"url":"https://github.com/numq/compose-desktop-media-player","last_synced_at":"2025-06-29T21:06:15.279Z","repository":{"id":155515493,"uuid":"606499322","full_name":"numq/compose-desktop-media-player","owner":"numq","description":"Compose Desktop media player implementation techniques for desktop development","archived":false,"fork":false,"pushed_at":"2024-09-12T22:09:45.000Z","size":246,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-02T10:24:25.009Z","etag":null,"topics":["audio-player","compose-desktop","javafx","kotlin","media-player","video-player","vlcj"],"latest_commit_sha":null,"homepage":"","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/numq.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-25T17:16:46.000Z","updated_at":"2025-02-17T12:14:11.000Z","dependencies_parsed_at":"2024-09-13T11:50:20.887Z","dependency_job_id":null,"html_url":"https://github.com/numq/compose-desktop-media-player","commit_stats":null,"previous_names":["numq/compose-desktop-media-player"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/numq/compose-desktop-media-player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numq%2Fcompose-desktop-media-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numq%2Fcompose-desktop-media-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numq%2Fcompose-desktop-media-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numq%2Fcompose-desktop-media-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/numq","download_url":"https://codeload.github.com/numq/compose-desktop-media-player/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numq%2Fcompose-desktop-media-player/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262667302,"owners_count":23345532,"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":["audio-player","compose-desktop","javafx","kotlin","media-player","video-player","vlcj"],"created_at":"2024-11-18T23:42:19.322Z","updated_at":"2025-06-29T21:06:15.238Z","avatar_url":"https://github.com/numq.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"display:flex;align-items:center;justify-content:start;\"\u003e\n\u003cimg src=\"media/klarity-logo.png\" width=\"64\" alt=\"klarity-logo\"/\u003e\n\u003ca href=\"https://github.com/numq/Klarity\"\u003eCheck out the Klarity Media Player Library for Jetpack Compose Desktop\u003c/a\u003e\n\u003c/div\u003e\n\n___\n\n## About\n\nThis repository includes various media player implementation methods that can be useful if you want to add multimedia\ncomponents to your Jetpack Compose project.\n\n### AWT component\n\nThe standard way to create a media player using the media player library component and container for the AWT component\nprovided by Jetpack Compose `SwingPanel`.\n\n### Frame grabbing\n\n\u003e Using a byte array of pixels as the key of the **remember** function will result in an **exponential memory leak** due\n\u003e to comparing by reference and creating a new key, which will result in an accumulation of unused values!\n\u003e ```kotlin\n\u003e    remember(pixels) // don't do this!\n\u003e    remember(pixels.contentHashCode()) // do this instead\n\u003e ```\n\nA more flexible method that captures video frames as an array of bytes, converts to the required format, and then\ndisplays.\n\n### [JavaFX](https://openjfx.io)\n\n```kotlin\nplugins {\n    id(\"org.openjfx.javafxplugin\") version \"19\"\n}\n\njavafx {\n    version = \"19\"\n    modules(\"javafx.media\", \"javafx.swing\")\n}\n```\n\n- [AWT component](https://github.com/numq/jetpack-compose-desktop-media-player/blob/master/src/main/kotlin/javafx/JfxComponentController.kt)\n- [Frame grabbing](https://github.com/numq/jetpack-compose-desktop-media-player/blob/master/src/main/kotlin/javafx/JfxFrameController.kt)\n\n### [VLCJ](https://github.com/caprica/vlcj)\n\n```kotlin\nimplementation(\"uk.co.caprica:vlcj:4.8.2\")\n```\n\n- [AWT component](https://github.com/numq/jetpack-compose-desktop-media-player/blob/master/src/main/kotlin/vlcj/VlcjComponentController.kt)\n- [Frame grabbing](https://github.com/numq/jetpack-compose-desktop-media-player/blob/master/src/main/kotlin/vlcj/VlcjFrameController.kt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumq%2Fcompose-desktop-media-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnumq%2Fcompose-desktop-media-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumq%2Fcompose-desktop-media-player/lists"}