{"id":20161565,"url":"https://github.com/openipc/smolrtsp","last_synced_at":"2025-04-04T05:03:29.068Z","repository":{"id":38365462,"uuid":"312641485","full_name":"OpenIPC/smolrtsp","owner":"OpenIPC","description":"A lightweight real-time streaming library for IP cameras","archived":false,"fork":false,"pushed_at":"2024-10-01T04:54:41.000Z","size":30746,"stargazers_count":197,"open_issues_count":5,"forks_count":43,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-10-29T18:48:13.246Z","etag":null,"topics":["audio","c","c-library","embedded","h264","h265","media-server","network-protocol","rtp","rtsp","rtsp-client","rtsp-server","streaming","video"],"latest_commit_sha":null,"homepage":"https://openipc.github.io/smolrtsp/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenIPC.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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":"2020-11-13T17:29:11.000Z","updated_at":"2024-10-25T07:55:30.000Z","dependencies_parsed_at":"2024-04-15T17:24:32.134Z","dependency_job_id":"942d1d5e-f03f-42c8-9038-95b7b1504dc1","html_url":"https://github.com/OpenIPC/smolrtsp","commit_stats":{"total_commits":458,"total_committers":5,"mean_commits":91.6,"dds":0.03493449781659386,"last_synced_commit":"542d3e472163e7f60f46d4e87d4b2c60858fe757"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenIPC%2Fsmolrtsp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenIPC%2Fsmolrtsp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenIPC%2Fsmolrtsp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenIPC%2Fsmolrtsp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenIPC","download_url":"https://codeload.github.com/OpenIPC/smolrtsp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247123099,"owners_count":20887261,"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":["audio","c","c-library","embedded","h264","h265","media-server","network-protocol","rtp","rtsp","rtsp-client","rtsp-server","streaming","video"],"created_at":"2024-11-14T00:19:33.198Z","updated_at":"2025-04-04T05:03:29.051Z","avatar_url":"https://github.com/OpenIPC.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![OpenIPC Logo](https://cdn.themactep.com/images/logo_openipc.png)\n\n# SmolRTSP\n[![CI](https://github.com/OpenIPC/smolrtsp/workflows/C/C++%20CI/badge.svg)](https://github.com/OpenIPC/smolrtsp/actions)\n[![Docs](https://img.shields.io/badge/docs-latest-blue)](https://openipc.github.io/smolrtsp/)\n\nSmolRTSP is a simple [RTSP 1.0] server library tailored for embedded devices, such as IP cameras. It supports both TCP and UDP, allows any payload format, and provides a convenient and flexible API.\n\n[RTSP 1.0]: https://datatracker.ietf.org/doc/html/rfc2326\n\n## Highlights\n\n - **Small.** SmolRTSP is designed for use in embedded systems (e.g., IP cameras).\n - **Unopinionated.** You can use SmolRTSP with bare POSIX sockets, [libevent], or any other network framework.\n - **Zero-copy.** SmolRTSP does not allocate or copy data while parsing.\n - **Battle-tested.** SmolRTSP is used by [Majestic], an IP camera streamer developed by [OpenIPC].\n\n[libevent]: https://libevent.org/\n[array slices]: https://github.com/hirrolot/slice99\n[Majestic]: https://openipc.github.io/wiki/en/majestic-streamer.html\n[OpenIPC]: https://openipc.org/\n\n## Features\n\n - Supported protocols:\n   - [x] RTSP 1.0 ([RFC 2326])\n   - [x] RTP ([RFC 3550])\n   - [x] RTP over TCP (interleaved binary data)\n   - [x] RTP over UDP\n   - [x] SDP ([RFC 4566])\n   - [ ] RTCP\n - Supported RTP payload formats:\n   - [x] H.264 ([RFC 6184])\n   - [x] H.265 ([RFC 7798])\n\n[RFC 3550]: https://datatracker.ietf.org/doc/html/rfc3550\n[RFC 4566]: https://datatracker.ietf.org/doc/html/rfc4566\n[RFC 2326]: https://datatracker.ietf.org/doc/html/rfc2326\n[RFC 6184]: https://datatracker.ietf.org/doc/html/rfc6184\n[RFC 7798]: https://datatracker.ietf.org/doc/html/rfc7798\n\n## Installation\n\nIf you use CMake, the recommended way is [`FetchContent`]:\n\n[`FetchContent`]: https://cmake.org/cmake/help/latest/module/FetchContent.html\n\n```cmake\ninclude(FetchContent)\n\nFetchContent_Declare(\n    smolrtsp\n    URL https://github.com/OpenIPC/smolrtsp/archive/refs/tags/v1.2.3.tar.gz # v1.2.3\n)\n\nFetchContent_MakeAvailable(smolrtsp)\n\ntarget_link_libraries(MyProject smolrtsp)\n```\n\n### Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `SMOLRTSP_SHARED` | Build a shared library instead of static. | `OFF` |\n| `SMOLRTSP_FULL_MACRO_EXPANSION` | Show full macro expansion backtraces (**DANGEROUS**: may impair diagnostics and slow down compilation). | `OFF` |\n\n## Usage\n\nA simple example server that streams H.264 video and G.711 Mu-Law audio can be found at [`examples/server.c`](examples/server.c).\n\n![server demo](media/example-server-demo.png)\n\nRun it as follows:\n\n```\n$ mkdir examples/build\n$ cd examples/build\n$ cmake .. \u0026\u0026 cmake --build .\n$ sudo ./server\n```\n\nThen open a new terminal window to start playing:\n\n```\n$ ffplay rtsp://localhost\n```\n\n## Integration\n\nSmolRTSP is agnostic to a network backend: you can run it atop of any network/event loop framework. Currently, we support the following integrations:\n\n - [`OpenIPC/smolrtsp-libevent`](https://github.com/OpenIPC/smolrtsp-libevent) ([libevent](https://libevent.org/))\n\nFeel free to extend this list with your own integration code.\n\n## Release procedure\n\n 1. Update the `PROJECT_NUMBER` field in `Doxyfile`.\n 2. Update `CHANGELOG.md`.\n 3. Release the project in [GitHub Releases].\n\n[GitHub Releases]: https://github.com/OpenIPC/smolrtsp/releases\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenipc%2Fsmolrtsp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenipc%2Fsmolrtsp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenipc%2Fsmolrtsp/lists"}