{"id":15373082,"url":"https://github.com/vi/hsmkv","last_synced_at":"2026-04-18T20:31:46.318Z","repository":{"id":2575652,"uuid":"3556142","full_name":"vi/HsMkv","owner":"vi","description":"Simple matroska (mkv) demuxer and muxer written in Haskell","archived":false,"fork":false,"pushed_at":"2017-02-01T15:00:04.000Z","size":97,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-11T19:41:47.236Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","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/vi.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":"2012-02-27T00:50:53.000Z","updated_at":"2019-10-28T00:52:18.000Z","dependencies_parsed_at":"2022-08-29T02:51:57.531Z","dependency_job_id":null,"html_url":"https://github.com/vi/HsMkv","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vi/HsMkv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2FHsMkv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2FHsMkv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2FHsMkv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2FHsMkv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vi","download_url":"https://codeload.github.com/vi/HsMkv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2FHsMkv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31984125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"ssl_error","status_checked_at":"2026-04-18T20:23:29.375Z","response_time":103,"last_error":"SSL_read: 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":[],"created_at":"2024-10-01T13:54:14.006Z","updated_at":"2026-04-18T20:31:46.291Z","avatar_url":"https://github.com/vi.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Matroska demuxer and muxer in Haskell. \nFeed the content of mkv file to MkvParse.parseMkv and get list of frames (and other events)\nThe same list of events can be conveted back to ByteString using MkvGen.writeMkv\n\n    parseMkv :: Data.ByteString.Lazy.ByteString -\u003e [MatroskaEvent]\n\n    data MatroskaEvent = ME_Tracks ... | ME_Info .. | ME_Frame Frame | ...\n\n    data Frame = Frame {\n        fTrackNumber :: Integer,\n        fTimeCode :: Double,\n        fData :: [B.ByteString],  -- laced subframes\n        fDuration :: Maybe Double,\n        fInvisible :: Bool,\n        fDiscardable :: Bool,\n        fKeyframe :: Bool\n    } deriving (Show)\n    \n    -- See ExamplePrint.hs for more complete example\n\nSupported features:\n\n*  decoding of SimpleBlocks and BlockGroups\n*  handling TimecodeScale\n*  lacing\n*  resyncing after errors\n*  muxing\n\nNot supported features:\n\n*  track timecode scale multiplier\n*  seeking (with index), cues, chapters\n*  ContentEncoding (except of \"header removal\")\n*  Access to various parameters of Track or Info (can be easily added probably)\n\nIncluded examples:\n\n* ExamplePrint - read matroska file and print info, tracks and frames\n* ExampleTransmux - read matroska file and write it\n* ExampleUdpRecv - receive UDP packets and write them as frames to matroska file (with timecodes), like in [udp2mkv](http://vi-server.org/pub/udp2mkv.c)\n* ExampleUdpSend - read frames from matroska file and send it as UDP packets, honouring timecodes, like in [mkv2udp](http://vi-server.org/pub/mkv2udp.c)\n* examples.hs - bundle all example above in one executable\n\nThere are compiled versions \"examples.hs\" for [linux](http://vi-server.org/pub/HsMkv) and [windows](http://vi-server.org/pub/HsMkv.exe).\n\n\nPython version of demuxer and Matroska XML tools: https://github.com/vi/mkvparse\n\nLicense=MIT, Vitaly \"_Vi\" Shukela, 2012.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fhsmkv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvi%2Fhsmkv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fhsmkv/lists"}