FFmpeg is a comprehensive, production-grade multimedia framework providing libraries and command-line tools for encoding, decoding, transcoding, muxing, demuxing, filtering, streaming, and playing audio, video, subtitles, and related metadata. The codebase is organized into several core libraries: libavcodec (codec implementations), libavformat (container formats), libavfilter (audio/video filters), libavutil (utilities), libavdevice (device I/O), libswresample (audio resampling), and libswscale (image scaling/colorspace conversion). The primary user-facing tools are ffmpeg (conversion/streaming), ffplay (media player), and ffprobe (media analysis). The architecture is modular, with each library exposing a public API and internally using a plugin-like registration system for codecs, demuxers, muxers, filters, and bitstream filters. Hardware acceleration is supported via Vulkan, CUDA, VA-API, D3D11VA, D3D12VA, VideoToolbox, MediaCodec, and others, with architecture-specific SIMD optimizations for x86, ARM, RISC-V, MIPS, LoongArch, and PowerPC. The project is actively maintained with extensive testing infrastructure including fuzzers, unit tests, and a checkasm framework for verifying assembly optimizations.
SRS (Simple Realtime Server) is a high-performance, multi-protocol media streaming server primarily written in C++ with a newer Go-based proxy component (SRSX). It ingests, processes, and delivers live audio/video streams via RTMP, WebRTC (WHIP/WHEP), HLS, HTTP-FLV, SRT, and GB28181. The core C++ engine uses a coroutine model built on state-threads, implements stream forwarding, transcoding via FFmpeg, and provides a full HTTP API for management. The Go proxy component (cmd/proxy, internal/) adds load balancing, Redis integration, and protocol proxying for RTMP/HTTP/WebRTC, designed to scale origin/edge deployments. The repository also includes extensive research code, blackbox integration tests, and vendored third-party libraries (FFmpeg 4, OpenSSL 1.1, gperftools, SRT, libsrtp) that have been customized with a '-fit' suffix. This hybrid architecture is actively developed with multiple CI workflows and a large test suite, though some vendored dependencies are older and may require security updates.
This repository is an IPTV live-source automation tool that collects, tests, and aggregates TV channel streams from various sources (local files, subscriptions, EPG). It provides multiple interfaces: a CLI for updating channel lists, a REST API for serving M3U/TXT playlists, an RTMP/HLS streaming service for relaying channels, and desktop GUIs (Qt and Tkinter) for configuration and monitoring. The application is modular, with separate components for data fetching, channel testing, result aggregation, streaming, and GUI. It uses Docker for easy deployment and includes features like automatic speed testing, resolution filtering, whitelist/blacklist management, and EPG integration. The code demonstrates strong engineering practices with reusable components such as a structured reporting system, adaptive performance tuning, smart URL freezing with backoff, and cross-platform process handling.
This repository is an OBS Studio plugin that enables simultaneous streaming to multiple RTMP (and SRT/RIST, WHIP) destinations from a single OBS session. It provides a dockable Qt-based user interface where users can configure an arbitrary number of streaming targets, each with independent encoder settings (video and audio) or the option to reuse the current OBS streaming/recording encoder. The plugin manages per-target start/stop, bulk start/stop, and can synchronize with OBS's built-in streaming start/stop events. The architecture is a standard OBS plugin: it registers a dock via the obs-frontend-api, creates a main widget (MultiOutputWidget) that hosts a scrollable list of target cards (PushWidgetImpl), and provides an editor dialog (EditOutputWidgetImpl) for adding/modifying targets. Configurations are persisted in a JSON file (obs-multi-rtmp.json) within the OBS profile directory, with support for export/import. The build system uses CMake with platform-specific presets and GitHub Actions for CI/CD across Windows, macOS, and Linux, including Flatpak packaging. Key strengths include a reusable JSON utility (json-util.hpp), a generic OBS properties widget (obs-properties-widget) that can render any obs_properties tree with two-way data binding, and an RAII scope guard (Finally) in helpers.h. The code demonstrates solid C++ practices, cross-platform awareness, and careful handling of encoder sharing to avoid resource conflicts. However, the plugin is tightly coupled to OBS internals, has no automated tests, and some source files exceed 500 lines mixing UI and business logic.
Yasea is an Android live-streaming library and demo application that captures camera video and microphone audio, applies real-time GPU image filters, hardware-encodes to H.264/AAC via MediaCodec, muxes into FLV, and publishes over RTMP to servers such as SRS. The main entry point is SrsPublisher, which orchestrates SrsCameraView (an OpenGL ES preview surface), SrsEncoder (MediaCodec lifecycle and format negotiation), SrsFlvMuxer (FLV-over-RTMP publishing), and SrsMp4Muxer (simultaneous MP4 recording). The demo app (MainActivity) provides a working UI for URL entry, publish/pause, camera switching, recording, and filter selection. Architecturally, the repo is a Gradle project with two modules: a reusable Android library (library/) and a demo app (app/). The library is a monolith that bundles large vendored third-party codebases as source: Google's libyuv (native YUV/RGB conversion and scaling), mp4parser (ISO BMFF/MP4 parsing and authoring), simple-rtmp (RTMP client protocol), and MagicCamera (40+ GPU image filters with GLSL shaders). The repo's own code is the net.ossrs.yasea package, which integrates these pieces: camera frames flow through the GLSurfaceView filter chain as RGBA, are converted to I420/NV12 by the libenc JNI bridge (libenc.cc wrapping libyuv), encoded by MediaCodec, and muxed to FLV/MP4. Audio is captured via AudioRecord and encoded to AAC. Despite a recent commit, the codebase is frozen in the 2017-2020 Android era: compileSdk/targetSdk 26, Android support library 26.1.0, the deprecated Camera API, Gradle 6.5 with AGP 4.1.1, and a mips ABI that modern NDKs no longer support. The native build is commented out in library/build.gradle, and 285 open issues remain. Technical drift is high. This is purely an application/library repo - no data pipelines, notebooks, or research components.