{"id":20595796,"url":"https://github.com/azasypkin/rust-cast","last_synced_at":"2025-05-15T17:06:04.390Z","repository":{"id":55101934,"uuid":"53164284","full_name":"azasypkin/rust-cast","owner":"azasypkin","description":"Library written in Rust to communicate with the Google Cast devices","archived":false,"fork":false,"pushed_at":"2024-10-20T12:55:00.000Z","size":327,"stargazers_count":147,"open_issues_count":3,"forks_count":26,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-09T12:22:21.326Z","etag":null,"topics":["cast","chromecast","chromecast-api","rust","video","video-streaming","youtube"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/rust_cast","language":"Rust","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/azasypkin.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":"2016-03-04T20:44:00.000Z","updated_at":"2025-04-20T13:00:51.000Z","dependencies_parsed_at":"2024-03-03T12:30:00.178Z","dependency_job_id":"df08687a-a205-4c9f-bc5f-7f79e66be1f4","html_url":"https://github.com/azasypkin/rust-cast","commit_stats":{"total_commits":91,"total_committers":8,"mean_commits":11.375,"dds":"0.20879120879120883","last_synced_commit":"244d1376ad5fdd4c1836677c6bcbf75db5f092e5"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azasypkin%2Frust-cast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azasypkin%2Frust-cast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azasypkin%2Frust-cast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azasypkin%2Frust-cast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azasypkin","download_url":"https://codeload.github.com/azasypkin/rust-cast/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254384988,"owners_count":22062422,"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":["cast","chromecast","chromecast-api","rust","video","video-streaming","youtube"],"created_at":"2024-11-16T08:14:07.142Z","updated_at":"2025-05-15T17:05:59.381Z","avatar_url":"https://github.com/azasypkin.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"[![Docs](https://docs.rs/rust_cast/badge.svg)](https://docs.rs/crate/rust_cast/)\n![Build Status](https://github.com/azasypkin/rust-cast/actions/workflows/ci.yml/badge.svg)\n\n# Usage\n* [Documentation](https://docs.rs/crate/rust_cast/)\n* Try out [Rust Caster](./examples/rust_caster.rs) example to see this crate in action!\n\n# Build\n\nProto files are taken from [Chromium Open Screen GitHub mirror](https://chromium.googlesource.com/openscreen/+/8cce349b0a595ddf7178d5730e980ace3a1d1a53/cast/common/channel/proto).\n\nBy default `cargo build` won't try to generate Rust code from the files located at `protobuf/*`, if you want to do that\nuse `GENERATE_PROTO` environment variable during build and make sure you have `protoc` binary in `$PATH`:\n\n```bash\n$ GENERATE_PROTO=true cargo build\n```\n\n# Run example\n\n## Generic features\n\nFirst, you need to figure out the address of the device to connect to. For example, you can use `avahi` with the following command:\n```bash\n$ avahi-browse -a --resolve\n```\n\n```bash\n// Get some info about the Google Cast enabled device (e.g. Chromecast). \n$ cargo run --example rust_caster -- -a 192.168.0.100 -i\n\nNumber of apps run: 1\nApp#0: Default Media Receiver (CC1AD845)\nVolume level: 1\nMuted: false\n\n// Run specific app on the Chromecast.\n$ cargo run --example rust_caster -- -a 192.168.0.100 -r youtube\n\n// Stop specific active app.\n$ cargo run --example rust_caster -- -a 192.168.0.100 -s youtube\n\n// Stop currently active app.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --stop-current\n\nThe following app has been stopped: Default Media Receiver (CC1AD845)\n```\n\n## Media features\n```bash\n// Stream a video.\n$ cargo run --example rust_caster -- -a 192.168.0.100 -m http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\n\n// Stream a video of specific format with buffering.\n$ cargo run --example rust_caster -- -a 192.168.0.100 -m http://xxx.webm --media-type video/webm --media-stream-type buffered\n\n// Stream video from YouTube (doesn't work with the latest YouTube app, fix is welcome).\n$ cargo run --example rust_caster -- -a 192.168.0.100 -m 7LcUOEP7Brc --media-app youtube\n\n// Display an image.\n$ cargo run --example rust_caster -- -a 192.168.0.100 -m https://azasypkin.github.io/style-my-image/images/mozilla.jpg\n\n// Change volume level.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --media-volume 0.5\n\n// Mute/unmute media.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --media-mute [--media-unmute]\n\n// Pause media.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --media-app youtube --media-pause\n\n// Resume/play media.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --media-app youtube --media-play\n\n// Seek media.\n$ cargo run --example rust_caster -- -a 192.168.0.100 --media-app youtube --media-seek 100\n```\n\nFor all possible values of `--media-type` see [Supported Media for Google Cast](https://developers.google.com/cast/docs/media).\n\n# DNS TXT Record description\n\n* `md` - Model Name (e.g. \"Chromecast\");\n* `id` - UUID without hyphens of the particular device (e.g. xx12x3x456xx789xx01xx234x56789x0);\n* `fn` - Friendly Name of the device (e.g. \"Living Room\"); \n* `rs` - Unknown (recent share???) (e.g. \"Youtube TV\");\n* `bs` - Uknonwn (e.g. \"XX1XXX2X3456\");\n* `st` - Unknown (e.g. \"1\");\n* `ca` - Unknown (e.g. \"1234\");\n* `ic` - Icon path (e.g. \"/setup/icon.png\");\n* `ve` - Version (e.g. \"04\").\n\n# Model names\n\n* `Chromecast` - Regular chromecast, supports video/audio;\n* `Chromecast Audio` - Chromecast Audio device, supports only audio.\n\n# Useful links and sources of inspiration\n\n* [DIAL Protocol](http://www.dial-multiscreen.org/);\n* [An implementation of the Chromecast CASTV2 protocol in JS](https://github.com/thibauts/node-castv2);\n* [Chromecast - steps closer to a python native api](http://www.clift.org/fred/chromecast-steps-closer-to-a-python-native-api.html);\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazasypkin%2Frust-cast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazasypkin%2Frust-cast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazasypkin%2Frust-cast/lists"}