{"id":18416859,"url":"https://github.com/fynv/livekit","last_synced_at":"2026-05-01T04:41:56.269Z","repository":{"id":87820150,"uuid":"335949452","full_name":"fynv/LiveKit","owner":"fynv","description":"A scripting interface dealing with videos.","archived":false,"fork":false,"pushed_at":"2021-06-05T00:18:17.000Z","size":17658,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-13T05:26:16.426Z","etag":null,"topics":["ffmpeg","obs-studio","video"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fynv.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-04T12:37:27.000Z","updated_at":"2024-12-21T16:34:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"a82a9e9b-2d26-4dc8-b395-d0c65532fb50","html_url":"https://github.com/fynv/LiveKit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fynv/LiveKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fynv%2FLiveKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fynv%2FLiveKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fynv%2FLiveKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fynv%2FLiveKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fynv","download_url":"https://codeload.github.com/fynv/LiveKit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fynv%2FLiveKit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32485297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ffmpeg","obs-studio","video"],"created_at":"2024-11-06T04:07:33.885Z","updated_at":"2026-05-01T04:41:56.254Z","avatar_url":"https://github.com/fynv.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LiveKit\n\nTrying to build an interface for Python doing similar things as [OBS Studio](https://github.com/obsproject/obs-studio)\n\n## Installation\n\nLiveKit for Windows x64 is available as a conda package:\n```\nconda install -c fyplus livekit\n```\n\n## Building from Source-code\n\nLiveKit currently can be built for Windows x64 platforms.\n\nBuilding for Windows x86 is possible if dependecies are available.\n\n1. Clone the repository (including submodules):\n```\ngit clone --recursive https://github.com/fynv/LiveKit.git\n```\n\n2. Download a FFMpeg prebuilt package\n\nFor Windows x64, a prebuilt package can be found at [https://www.gyan.dev/ffmpeg/builds/](https://www.gyan.dev/ffmpeg/builds/).\n\n3. Create a \"build\" folder and build with CMake\n\n* Select \"Visual Studio 16 2019\" or \"Visual Studio 15 2017\".\n* Select \"x64\"\n* Click \"Configure\"\n* Set \"FFMPEG_ROOT\" to where you extracted FFMpeg.\n* Click \"Generate\"\n* Build with Visual Studio\n* Build the \"INSTALL\" project\n\nThe 'VirtualCamera' sub-project can be built separately using the provided visual-studio project files. (Binaries are already provided under the VirtualCamera/bin folder)\n\n## The Design\n\nThe system works by compositing the following kinds of objects:\n\n* **VideoSource** objects\n\nVideo frames (images) can be retrieved from these objects.\n\n* **VideoTarget** objects\n\nVideo frames (images) can be written to these objects.\n\n* Objects that operates on VideoSources and VideoTargets\n\nThis includes:\n    \n    * Objects that read frames\n    * Objects that write frames\n\n* **VideoPort** \n\nA **VideoPort** object is a **VideoSource** and a **VideoTarget** at the same time. Frames written to a video-port are cached shortly and can be retrieved by other objects. This can be used to connect an object that read frames to an object that write frames.\n\nFor example, there is a class **WindowCapture**, which is a **VideoSource** class. A **WindowCapture** object can be directly connected to objects that read frames, like a **Viewer** or a **Recorder**. And there is a class **Camera**. A camera object writes frames, therefore it can be connected to objects that read frames with the help of a **VideoPort**.\n\nYou can connect these objects in different ways to accomplish different tasks.\n\nHere is an incomplete list of what can be done at the moment.\n\n### Viewing an image\n```\nImageFile =\u003e Viewer\n```\n\n### Media-file playback\nA Player object is capable of playback of a media file containing both video and audio streams. It has its own worker threads. Video frames can be written to one or more VideoTargets.\n\nFor a straight playback:\n\n```\nPlayer =\u003e VideoPort =\u003e Viewer\n```\n\nA LazyPlayer object playback only the video part of a media file. It works in lazy-mode, and is a VideoSource itself.\n\n```\nLazyPlayer =\u003e Viewer\n```\n\n### Viewing an camera\n```\nCamera =\u003e VideoPort =\u003e Viewer\n```\n\n### Recording from camera\n```\nCamera =\u003e VideoPort =\u003e Recorder\n```\n\n### Window capturing \u0026 recording\n```\nWindowCapture =\u003e Viewer\nWindowCapture =\u003e Recorder\n```\n\n### Compositing\nA Compositor object is one that actually works like OBS Studio. It can take in multiple VideoSources and put them at difference places to form a scene.\n\n```\nImageFile =\u003e Compositor\nPlayer =\u003e VideoPort =\u003e Compositor\nLazyPlayer =\u003e Compositor\nCamera =\u003e VideoPort =\u003eCompositor\nWindowCapture =\u003e Compositor\n```\n\nLike a Viewer, a compositor maintains its own window which shows the composited result.\n\nOptionally, it writes to one or more VideoTargets. You can use it to record the composited video.\n\n```\nCompsitor =\u003e VideoPort =\u003e Recorder\n```\n\n### IPC Video Transmission\n\nInterprocess video transmission can be done by a pair of IPCTarget and IPCSource objects, which uses named file-mapping to efficiently share the frames.\n\nThe 'VirtualCamera' sub-project provides a dshow virtual-camera which is compatible with IPCTarget. \n\nRegistering the virtual camera:\n```\nVirtualCamera\\bin\u003e register.cmd\n```\n\nMapping-name and virtual resolution must be set before using the virtual camera from the host process, whcih can be done by setting a couple of registry values. See VirtualCamera/bin/reg_config.py for details.\n\nA IPCTarget object can be used to feed content into the virtual camera. \n\n```python\nimport LiveKit as lk\ntarget = lk.IPCTarget(\"LiveKitVCam\", width, height, False)\n```\n\n### Network Streaming\n\nThe \"filename\" parameter used when creating a Player object or a Recorder object can be a url of one of the protocols supported by ffmpeg. (See\n[https://www.ffmpeg.org/ffmpeg-protocols.html](https://www.ffmpeg.org/ffmpeg-protocols.html)). Now the Recorder becomes a Sender and the Player becomes a Reciever.\nThe 'mp4' parameter of Recorder should be set to 'False', so that flv stream will be used.\n\n### Stream Copying\n\nA Copier object simply copies one file to another (in its own process). The filenames used here can also be network urls. \nThis can be useful, for example, if you want to build a conference server.\n\n### Audio Devices\nAudio Device IDs are used in Player, Recorder and AudioRepeater objects. When an Audio Device ID \u003e=0, it is corresponding to a system audio device.\nWhen it is negative, the audio stream will be wired to an (in-proess) virtual audio channel. For interprocess virtual-wiring, [VB-CABLE](https://vb-audio.com/Cable/) would be very helpful.\n\n## License\n\nThis source code is provided to you by Vulcan Eon (北京鲜衣怒马文化传媒有限公司) \nand is licensed under [GPL 2.0](https://github.com/fynv/LiveKit/blob/master/LICENSE).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffynv%2Flivekit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffynv%2Flivekit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffynv%2Flivekit/lists"}