ChromeCast receiver app that plays media using the NoMercy music player https://cast.nomercy.tv/
  • JavaScript 98.2%
  • Vue 0.9%
  • TypeScript 0.8%
  • CSS 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Stoney_Eagle 06490d8451 fix(invalidation): read per-title id from the correct server-key index
mapServerKey read the id at serverKey[2], but the server publishes two-element
per-title keys (["movie","<id>"] / ["tv","<id>"]) with the id at index 1. The
old index left id undefined, so every per-title invalidation silently fell
through to a raw passthrough that never matched the client's ["info",type,id]
key. Now cast conforms to the same key shape web and KMP already handle.
2026-07-18 16:46:37 +02:00
.github/workflows chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
public fix(cast-receiver): SPA deep-link redirect for GitHub Pages 2026-04-29 00:18:42 +02:00
scripts/screenshots debug(cast-receiver): write launch diag to document.title for cast_shell visibility 2026-04-29 21:16:02 +02:00
src fix(invalidation): read per-title id from the correct server-key index 2026-07-18 16:46:37 +02:00
.gitattributes chore: add .gitattributes for consistent line endings 2026-03-16 05:54:06 +01:00
.gitignore feat(cast-receiver): scaffold Phase 1 — Vite + Vue 3 + Tailwind v4 + cast lifecycle 2026-04-28 22:32:48 +02:00
.prettierrc.json chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
.yarnrc.yml security: fix Dependabot vulnerabilities (immutable, rollup) 2026-03-16 06:14:58 +01:00
CLAUDE.md chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
CNAME Create CNAME 2025-01-20 21:26:13 +01:00
eslint.config.js chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
index.html fix(cast-receiver): strip mixed-indent HTML comment that broke CI lint 2026-04-29 00:22:57 +02:00
LICENSE refactor: improve code structure and readability in SyncPlugin; enhance event handling and data management 2025-01-22 00:48:40 +01:00
package.json fix(deps): patch vite security advisory 2026-06-18 21:15:22 +02:00
README.md chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
renovate.json chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
tsconfig.json chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
tsconfig.node.json chore(cast-receiver): adopt antfu eslint config + bump vulnerable deps 2026-04-28 23:48:16 +02:00
vite.config.ts fix(vite): explicit fs.deny for env files + private keys + secret dirs 2026-05-14 22:40:22 +02:00
yarn.lock fix(deps): patch ws, js-yaml and tar advisories 2026-06-18 21:30:22 +02:00

nomercy-cast-player

nomercy-cast-player is a Chromecast Receiver app built to work with the nomercy-video-player. It serves as a lightweight, event-driven application designed to stream media content seamlessly from your NoMercy MediaServer.

Cast Application ID

This project is associated with the Cast Application ID: 925B4C3C.

Features

  • Uses the nomercy-video-player for video playback.
  • Supports custom playlists in multiple formats.
  • Accepts media configuration via CustomData.
  • Communicates with the server via a SignalR /castHub socket.

Media Requirements

To initiate playback, the application expects a Media object to be passed with the following structure:

Example media Object

const media = {
	customData: {
		accessToken: '', // if the media is behind authentication
		basePath: '', // base path for media URLs
		playlist: `https://example.com/api/v1/tv/1234/watch`, // Playlist URL or array
	}
};

Playlist Formats

The playlist property can accept:

  1. A URL string pointing to the playlist (e.g., https://example.com/api/v1/tv/1234/watch).
  2. An array of PlaylistItem objects.

Type definitions

Refer to the nomercy-video-player README for a detailed definition of the PlaylistItem format. note: type definitions and api may not be 100% correct and are subject to change.

SignalR Communication

Events Emitted

The player emits the following events to the /castHub SignalR socket:

Event Name Data Type Description
Play - Player started playing.
Pause - Player paused.
Stop - Player stopped.
Ended - Playlist end.
Time TimeData The current playback time and duration. See TimeData definition.
Seek number The current time.
Volume number The current volume level, from 0 to 100.
Muted boolean Indicates if the player is currently muted.
Playlist PlaylistItem[] The current playlist. See PlaylistItem definition.
Item PlaylistItem The currently playing item in the playlist.
AudioTracks MediaPlaylist[] A list of available audio tracks. See MediaPlaylist definition.
CurrentAudioTrack MediaPlaylist The currently selected subtitle track. See Track definition.
SubtitleTracks Track[] A list of available subtitle tracks. See Track definition.
CurrentSubtitleTrack Track The currently selected subtitle track. See Track definition.
PlayerState PlayerState The current state of the player.

PlayerState

Property Type Description
time TimeData The current playback time and duration. See TimeData definition.
volume number The current volume level, from 0 to 100.
muted boolean Indicates if the player is currently muted.
playlist PlaylistItem[] The current playlist. See PlaylistItem definition.
item PlaylistItem The currently playing item in the playlist.
isPlaying boolean Indicates if the player is currently playing.
subtitles Track[] A list of available subtitle tracks. See Track definition.
currentSubtitleTrack Track The currently selected subtitle track. See Track definition.
audioTracks MediaPlaylist[] A list of available audio tracks. See MediaPlaylist definition.
currentAudioTrack MediaPlaylist The currently selected audio track. See MediaPlaylist definition.

Events Listened To

The player listens to the following events from the /castHub SignalR socket:

Event Name Data Type Description
GetPlayerState Requests the current state of the player.
SetPlay Starts playback.
SetPause Pauses playback.
SetNext Skips to the next item in the playlist.
SetPrevious Skips to the previous item in the playlist.
SetAudioTrack number Sets the active audio track index.
SetSubtitleTrack number Sets the active subtitle track index.
SetPlaylistItem number Sets the current playlist item index.
SetVolume number Adjusts the player's volume, from 0 to 100
SetSeek number Seeks to a specific time in the media, in seconds

Contributions

Contributions are welcome! If you encounter issues or have suggestions for improvement, feel free to open an issue or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contact

For further information or support, visit NoMercy.tv or contact our support team.

Made with ❤️ by NoMercy Entertainment