{"id":13907659,"url":"https://github.com/jfreeland/mpdq","last_synced_at":"2026-01-14T17:39:06.123Z","repository":{"id":39899128,"uuid":"323526023","full_name":"jfreeland/mpdq","owner":"jfreeland","description":"A cli tool to parse MPEG-DASH manifests.","archived":false,"fork":false,"pushed_at":"2022-05-22T22:48:30.000Z","size":70,"stargazers_count":7,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-18T08:31:01.781Z","etag":null,"topics":["cli","go","mpeg-dash"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfreeland.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":".github/CODEOWNERS","security":null,"support":null}},"created_at":"2020-12-22T05:04:34.000Z","updated_at":"2024-06-22T14:09:02.000Z","dependencies_parsed_at":"2022-09-17T14:10:56.266Z","dependency_job_id":null,"html_url":"https://github.com/jfreeland/mpdq","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jfreeland/mpdq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfreeland%2Fmpdq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfreeland%2Fmpdq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfreeland%2Fmpdq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfreeland%2Fmpdq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfreeland","download_url":"https://codeload.github.com/jfreeland/mpdq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfreeland%2Fmpdq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28428902,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T16:38:47.836Z","status":"ssl_error","status_checked_at":"2026-01-14T16:34:59.695Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cli","go","mpeg-dash"],"created_at":"2024-08-06T23:02:04.449Z","updated_at":"2026-01-14T17:39:06.108Z","avatar_url":"https://github.com/jfreeland.png","language":"Go","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# mpdq\n\nThis was inspired by https://github.com/soldiermoth/hlsq/.\n\n## If you installed prior to January 16\n\nPlease `rm -rf $GO_SRC_DIR/github.com/jfreeland/mpdq` and reinstall. I'm a moron and thought I'd clean up after myself and rewrite my history to clean up some of my nastiness, not realizing it would break updating. That won't happen again. The history of my nasty code will live on.\n\n## NOTE\n\n**This is very much a work in progress.**\n\nBut the key features I wanted work now. 😂\n\nThis was primarily intended to be used by me as an easier way to interact with \"dynamic\" MPEG-DASH manifests, as used with LIVE streaming video. It scratches my itch for now but I'll probably continue to clean it up and add functionality over time.\n\nFor the time being I've removed all support for static manifests as I don't deal with video on demand much. Perhaps I'll add that back in later.\n\n## Installation\n\n```sh\nbrew tap jfreeland/tap\nbrew install jfreeland/tap/mpdq\n```\n\nor\n\n```sh\ngo get -u github.com/jfreeland/mpdq\n```\n\n## Usage\n\nAt the moment this:\n\n- has only been tested with 'dynamic' (live) DASH manifests\n  - and more specifically works best with manifests that contain a SegmentTimeline as there's some additional troubleshooting I need to do for the no-SegmentTimeline case.\n- only works for video representations\n\nYou can use this by passing in a DASH manifest via stdin, specifying a file, or specifying a URL. If you do not specify a command, this will print a highlighted version of the DASH manifest XML.\n\nYou can list representations (`lr`) or list segments for a presentation (`ls`). If you do not specify a representation (either with the number or the name), this will choose the highest bandwidth representation when listing segments.\n\nYou can query a manifest (`q`) but there's enormous amounts of of room for improvement. TODO's are in the relevant files.\n\nWhen you're listing segments, this will alternate colors to highlight different periods. It will also highlight segment durations that do not match the previous segment duration in red. If it looks like there's a gap between periods it will call that out.\n\n### Add Color\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | mpdq\nmpdq testdata/dynamic.mpd\nmpdq -u https://www.website.com/path/to/some/master.mpd\n```\n\n### List representations\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | mpdq lr\nmpdq lr -f testdata/dynamic.mpd\nmpdq lr -u https://www.website.com/path/to/some/master.mpd\n```\n\n### List segments of highest bandwidth representation\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | mpdq ls\nmpdq ls -f testdata/dynamic.mpd\nmpdq ls -u https://www.website.com/path/to/some/master.mpd | more -R\n```\n\n### List segments for a specific representation\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | mpdq ls -r 540p-30fps-2436kbps\nmpdq ls -r 540p-30fps-2436kbps -f testdata/dynamic.mpd\nmpdq ls -r 540p-30fps-2436kbps -u https://www.website.com/path/to/some/master.mpd | more -R\n```\n\n### Watch a manifest\n\nA URL must be provided to continually watch the manifest.\n\n```sh\nmpdq ls -w -u https://www.website.com/path/to/some/master.mpd\nmpdq ls -w -r 540p-30fps-2436kbps -u https://www.website.com/path/to/some/master.mpd\n```\n\n### Query a manifest\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | mpdq q 'bandwidth \u003e= 300000'\nmpdq q 'bandwidth \u003e= 300000' -f testdata/dynamic.mpd\nmpdq q 'bandwidth \u003e= 300000' -u https://www.website.com/path/to/some/master.mpd\n```\n\n## Development\n\n```sh\ncurl https://www.website.com/path/to/some/master.mpd | go run . lr\ngo run . lr -f testdata/dynamic.mpd\ngo run . ls -u https://www.website.com/path/to/some/master.mpd\ngo run . q 'bandwidth \u003e= 300000'\n```\n\n### Remove special characters and color from saved output\n\n```sh\ncat testdata/dynamic.mpd | sed -E \"s/\"$'\\E'\"\\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g\" \u003e d.mpd\n```\n\n## Manifests to test against\n\n```sh\nhttps://testassets.dashif.org/#testvector/list\nhttps://livesim.dashif.org/livesim/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/start_1800/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/scte35_2/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/modulo_10/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/utc_direct-head/testpic_2s/Manifest.mpd (way off)\nhttps://livesim.dashif.org/livesim/chunkdur_1/ato_7/testpic4_8s/Manifest300.mpd (not even close)\nhttps://livesim.dashif.org/livesim/chunkdur_1/ato_7/testpic4_8s/Manifest.mpd (not even close)\nhttps://livesim.dashif.org/livesim/testpic_2s/Manifest.mpd#t=posix:1465406946\nhttps://livesim.dashif.org/livesim/testpic_2s/Manifest.mpd#t=posix:now\nhttps://livesim.dashif.org/livesim/utc_direct/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/utc_head/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/utc_ntp/testpic_2s/Manifest.mpd\nhttps://livesim.dashif.org/livesim/utc_sntp/testpic_2s/Manifest.mpd\n```\n\n## Other References\n\n- https://dashif-documents.azurewebsites.net/DASH-IF-IOP/master/DASH-IF-IOP.html#svc-live\n- https://dashif-documents.azurewebsites.net/Guidelines-TimingModel/master/Guidelines-TimingModel.html\n- https://github.com/Dash-Industry-Forum/Guidelines-TimingModel\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfreeland%2Fmpdq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfreeland%2Fmpdq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfreeland%2Fmpdq/lists"}