{"id":24563015,"url":"https://github.com/rafaelcaricio/gst-moq-pub","last_synced_at":"2025-04-19T17:43:30.746Z","repository":{"id":271162556,"uuid":"912464447","full_name":"rafaelcaricio/gst-moq-pub","owner":"rafaelcaricio","description":"A GStreamer plugin that implements a Media over QUIC (MoQ) publisher element.","archived":false,"fork":false,"pushed_at":"2025-03-16T21:37:53.000Z","size":40,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-11T15:19:45.274Z","etag":null,"topics":["gstreamer","mediaoverquic","moq","quic"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rafaelcaricio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-01-05T16:43:22.000Z","updated_at":"2025-04-03T00:24:13.000Z","dependencies_parsed_at":"2025-01-06T08:16:18.431Z","dependency_job_id":null,"html_url":"https://github.com/rafaelcaricio/gst-moq-pub","commit_stats":null,"previous_names":["rafaelcaricio/gst-moq-pub"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcaricio%2Fgst-moq-pub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcaricio%2Fgst-moq-pub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcaricio%2Fgst-moq-pub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelcaricio%2Fgst-moq-pub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafaelcaricio","download_url":"https://codeload.github.com/rafaelcaricio/gst-moq-pub/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249751703,"owners_count":21320358,"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":["gstreamer","mediaoverquic","moq","quic"],"created_at":"2025-01-23T09:20:04.106Z","updated_at":"2025-04-19T17:43:30.726Z","avatar_url":"https://github.com/rafaelcaricio.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GStreamer MoQ Publisher Plugin\n\nA GStreamer plugin that implements a Media over QUIC (MoQ) publisher element. This element allows publishing live media streams to MoQ relay servers using the WebTransport protocol.\n\n## Overview\n\nThe `moqpublisher` element is a bin element that accepts video and/or audio input streams and publishes them to a MoQ relay server. It handles:\n\n- WebTransport connection management\n- CMAF packaging of media streams\n- MoQ catalog generation and updates\n- Track management and prioritization\n- Init segment handling\n\n## Installation\n\n### Prerequisites\n\n- Rust toolchain (latest stable version)\n- GStreamer development files (\u003e= 1.22)\n- pkg-config\n\n### Building\n\n```bash\ncargo build --release\n```\n\n## Element Properties\n\n- `url` (string): The WebTransport URL of the MoQ relay server\n- `namespace` (string): The namespace for the published tracks (default: \"default\")\n- `fragment-duration` (uint64): Duration of each media fragment in milliseconds (default: 2000)\n- `certificate-file` (string): Optional path to TLS certificate file for the WebTransport connection\n\n## Pad Properties\n\nEach sink pad supports the following properties via a \"track-settings\" structure:\n\n- `track-name` (string): Name of the track in the MoQ catalog\n- `priority` (uint8): Priority value for the track's fragments (0-255, default: 127)\n\n## Internal Architecture\n\nThe element works by:\n\n1. Creating a bin containing cmafmux and appsink elements for each input pad\n2. Using cmafmux to package incoming media into CMAF fragments\n3. Processing CMAF fragments into MoQ groups and objects\n4. Managing WebTransport connections to the relay server\n5. Generating and updating the MoQ catalog based on media capabilities\n6. Publishing media tracks with proper prioritization\n\n## Example Usage\n\nThe repository includes a video publishing example that can be run with:\n\n```bash\ncargo run --example videopub -- \\\n    --url https://localhost:4443 \\\n    --namespace example \\\n    --fragment-duration 2000 \\\n    --with-audio  # Optional: enable audio publishing\n```\n\n### Example Pipeline\n\n```bash\ngst-launch-1.0 \\\n    videotestsrc ! x264enc ! h264parse ! \\\n    moqpublisher url=\"https://localhost:4443\" namespace=\"example\" \\\n        fragment-duration=2000\n```\n\n### Building a Custom Pipeline\n\nThe element supports multiple input pads for different media tracks. Each pad must be requested with `request_pad_simple(\"sink_%u\")` and configured with appropriate track settings:\n\n```rust\nlet moqpub = gst::ElementFactory::make(\"moqpublisher\")\n    .property(\"url\", \"https://localhost:4443\")\n    .property(\"namespace\", \"example\")\n    .build()?;\n\n// Request and configure video pad\nlet video_pad = moqpub.request_pad_simple(\"sink_%u\").unwrap();\nlet video_settings = gst::Structure::builder(\"video1-rendition\")\n    .field(\"track-name\", \"video_1\")\n    .field(\"priority\", 127u8)\n    .build();\nvideo_pad.set_property(\"track-settings\", \u0026video_settings);\n```\n\n## Debugging\n\nThe element supports GStreamer's debug system. Enable debug output with:\n\n```bash\nexport GST_DEBUG=moqpublisher:4\n```\n\nThe example program also generates pipeline graphs in dot format when running. These can be converted to images with:\n\n```bash\ndot -Tpng moq-publisher.dot \u003e pipeline.png\n```\n\n## License\n\nThis project is licensed under the Mozilla Public License 2.0 - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelcaricio%2Fgst-moq-pub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafaelcaricio%2Fgst-moq-pub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelcaricio%2Fgst-moq-pub/lists"}