{"id":18352785,"url":"https://github.com/membraneframework/membrane_mp4_plugin","last_synced_at":"2025-04-06T11:33:10.668Z","repository":{"id":38106436,"uuid":"229071128","full_name":"membraneframework/membrane_mp4_plugin","owner":"membraneframework","description":"Utilities for MP4 container parsing and serialization and elements for muxing the stream to CMAF","archived":false,"fork":false,"pushed_at":"2025-01-20T15:30:39.000Z","size":60239,"stargazers_count":9,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-21T22:33:48.907Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Elixir","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/membraneframework.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-19T14:27:09.000Z","updated_at":"2025-01-20T15:30:39.000Z","dependencies_parsed_at":"2024-02-14T10:24:44.295Z","dependency_job_id":"4d6ff271-8ac5-4792-96da-d698661452e6","html_url":"https://github.com/membraneframework/membrane_mp4_plugin","commit_stats":{"total_commits":205,"total_committers":17,"mean_commits":"12.058823529411764","dds":0.5365853658536586,"last_synced_commit":"93e25674abfe8895dbf80e761e9b7c95b9c87d67"},"previous_names":[],"tags_count":51,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/membraneframework%2Fmembrane_mp4_plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/membraneframework%2Fmembrane_mp4_plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/membraneframework%2Fmembrane_mp4_plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/membraneframework%2Fmembrane_mp4_plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/membraneframework","download_url":"https://codeload.github.com/membraneframework/membrane_mp4_plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247478152,"owners_count":20945258,"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":"2024-11-05T21:37:25.438Z","updated_at":"2025-04-06T11:33:05.645Z","avatar_url":"https://github.com/membraneframework.png","language":"Elixir","readme":"# MPEG-4 container plugin for Membrane Framework\n\n[![Hex.pm](https://img.shields.io/hexpm/v/membrane_mp4_plugin.svg)](https://hex.pm/packages/membrane_mp4_plugin)\n[![API Docs](https://img.shields.io/badge/api-docs-yellow.svg?style=flat)](https://hexdocs.pm/membrane_mp4_plugin/)\n[![CircleCI](https://circleci.com/gh/membraneframework/membrane_mp4_plugin.svg?style=svg)](https://circleci.com/gh/membraneframework/membrane_mp4_plugin)\n\nThis plugin provides utilities for MP4 container parsing and serialization along with elements for muxing the stream to MP4 or [CMAF](https://www.wowza.com/blog/what-is-cmaf).\n\n## Installation\nThe package can be installed by adding `membrane_mp4_plugin` to your list of dependencies in `mix.exs`:\n\n```elixir\ndefp deps do\n  [\n    {:membrane_mp4_plugin, \"~\u003e 0.35.2\"}\n  ]\nend\n```\n\n## Usage\n### `Membrane.MP4.Muxer.ISOM`\nISOM muxer requires a sink that can handle `Membrane.File.SeekSinkEvent`, e.g. `Membrane.File.Sink`.\nFor an example of muxing streams to a regular MP4 file, refer to [`examples/muxer_isom.exs`](examples/muxer_isom.exs).\n\nTo run the example, you can use the following command:\n```bash\nelixir examples/muxer_isom.exs\n```\n\nYou can expect an `example.mp4` file containing muxed audio and video to be saved in your working directory.\n\n### `Membrane.MP4.Muxer.CMAF`\nFor an example of muxing streams into CMAF format, refer to [`examples/muxer_cmaf.exs`](examples/muxer_cmaf.exs). CMAF requires a special sink, regular `Membrane.File.Sink` will not work correctly. Currently, Membrane Framework has only one sink capable of saving a CMAF stream - `Membrane.HTTPAdaptiveStream.Sink`.\n\nTo run the example, use the following command:\n```bash\nelixir examples/muxer_cmaf.exs\n```\n\nYou can expect `hls_output` folder to appear and be filled with CMAF header and segments, as well as an HLS playlist.\nTo play the stream, you need to serve the contents of the output folder with an HTTP Server. If you are looking for\nsomething quick and simple, you can use Python's [`http.server`](https://docs.python.org/3/library/http.server.html):\n```bash\npython3 -m http.server -d hls_output 8000\n```\nand run the following command to play the stream:\n```bash\nffplay http://localhost:8000/index.m3u8\n```\n\n## Updating tests\n\nIn case `out_*` reference files in `test/fixtures/cmaf` change, `out_playlist.m3u8` and its dependent playlists should be updated and checked if they are still playable.\nThe current files have been checked with ffplay (FFmpeg) and Safari.\n\n## Copyright and License\n\nCopyright 2019, [Software Mansion](https://swmansion.com/?utm_source=git\u0026utm_medium=readme\u0026utm_campaign=membrane_mp4_plugin)\n\n[![Software Mansion](https://logo.swmansion.com/logo?color=white\u0026variant=desktop\u0026width=200\u0026tag=membrane-github)](https://swmansion.com/?utm_source=git\u0026utm_medium=readme\u0026utm_campaign=membrane_mp4_plugin)\n\nLicensed under the [Apache License, Version 2.0](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmembraneframework%2Fmembrane_mp4_plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmembraneframework%2Fmembrane_mp4_plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmembraneframework%2Fmembrane_mp4_plugin/lists"}