{"id":28513492,"url":"https://github.com/livepeer/streamer","last_synced_at":"2025-07-04T07:31:55.184Z","repository":{"id":54782127,"uuid":"297428817","full_name":"livepeer/streamer","owner":"livepeer","description":null,"archived":false,"fork":false,"pushed_at":"2021-02-25T20:38:27.000Z","size":127,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-30T02:49:05.826Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","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/livepeer.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}},"created_at":"2020-09-21T18:36:16.000Z","updated_at":"2022-12-14T12:18:54.000Z","dependencies_parsed_at":"2022-08-14T02:50:45.055Z","dependency_job_id":null,"html_url":"https://github.com/livepeer/streamer","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/livepeer/streamer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fstreamer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fstreamer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fstreamer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fstreamer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/livepeer","download_url":"https://codeload.github.com/livepeer/streamer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/livepeer%2Fstreamer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263467863,"owners_count":23471152,"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":[],"created_at":"2025-06-09T01:07:13.560Z","updated_at":"2025-07-04T07:31:55.170Z","avatar_url":"https://github.com/livepeer.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Livepeer \"Streamer\"\n\nA tool to exercise Livepeer e2e by continuously running test streams,\nmonitoring their output.\n\n## Running\n\nStarting this tool on your local machine is a 3 step process.\n\n1. clone this repository\n2. create a `.env` with the following contents\n```\nINJEST_URL= # can be created at livepeer.com\nPLAYBACK_URL= # can be created at livepeer.com\nREGION= # used to label prometheus metrics\nDURATION= # lenght of time to stream before cycling\n```\n3. Run: `docker-compose up`\n\n## What's included\n\nWhen you `docker-compose up` 3 services will boot:\n\n1. prometheus\n2. grafana\n3. monitor\n\nThe monitor, which is the important service here, will run a prometheus exporter on port 9090\nand also continuously run stream-tester sessions, pausing for a grace period between each stream.\n\n## Monitoring\n\nTo see metrics output for the monitor you can view the following:\n\n- *Prometheus* at http://localhost:9090\n- *Exporter* at https://localhost:9091/metrics\n- *Grafana* at http://localhost:3000 import `./dashboard.json` and configure prometheus datasource\n\n## Metrics\n\nThe following metrics are surfaced:\n\n- active_tests\n- total_tests\n- segment_duration\n- segment_latency\n- startup_latency\n\nThe source of truth is looking at https://localhost:9091/metrics\n\n## Notes\n\nOutput is buffered so when tailing the logs with docker you will notice the\noutput rate is not realtime. We could accelerate the output rate by using PTY\nto call stream-tester but this doesn't seem necessary at the moment.\n\n## Deployment\n\nIncluded is a helm chart for deployment to a kubernetes cluster. The chart\ncreates a deployment for each configured \"stream\" in the given values file.\n\nThe setup for a stream looks like this:\n\n```yaml\n# example values.yaml\nstreams:\n  - name: \"the human name for this test stream\"\n    duration: \"the duration of each stream session before restarting. Ex: 2m\"\n    injest_region: \"the tag for region being exercised, useful for filtering metrics\"\n    playback_region: \"the tag for region being exercised, useful for filtering metrics\"\n    injest_url: \"the full rtmp injest url\"\n    playback_url: \"the full playback url\"\n```\n\nWe rely on prometheus pod scrapers to collect metrics from our test streams. Each pod\nwill be labeled with test.livepeer.io/{important-attribute} for filtering in our\ngrafana dashboards.\n\n## Simulating Conditions\n\n### Playlist rename\n1. create a stream directly in mist\n2. start a cycle using the mist url as ingest\n3. manually change the api for the stream in mist to something wrong\n3. manually change the api for the stream in mist back to the correct value\n\nPlaylist should have changed\n\n### Breaking transcoding for an rtmp stream\n1. delete\n\n### Breaking startup of new streams\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Fstreamer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flivepeer%2Fstreamer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flivepeer%2Fstreamer/lists"}