This GUI application was created to run on Microsoft Windows, macOS, and Linux computers. Its primary purpose is to browse video and audio files, provide a detailed view of video timelines, and execute playback of a single media file or many media files at once.
Builds: https://membranesoftware.com/membrane-media-player/
About Membrane Media Player: https://membranesoftware.com/i/about-membrane-media-player
Membrane Media Player makes use of other software components.
- curl: the multiprotocol file transfer library
- ffmpeg: a complete, cross-platform solution to record, convert, and stream audio and video
- freetype: a freely available software library to render fonts
- jpeg: the Independent JPEG Group reference implementation of the JPEG standard
- libpng: the official reference library for PNG images
- lua: a lightweight embeddable scripting language
- openssl: a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols
- sdl2: a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware
- sdl2image: an image file loading library
- sqlite: an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine
- x264: a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format
- zlib: A Massively Spiffy Yet Delicately Unobtrusive Compression Library
The Membrane Media Player source files provide examples for possible ways to solve certain problems.
- Playing sound by use of the SDL audio device interface: SoundMixer.cpp start method and audioCallback function
- Generating an SDL render texture from downloaded image data: ImageWindow.cpp executeCreateImageFromUrlResponseData method
- Processing SDL keyboard and mouse input events: Input.cpp pollEvents method
- Processing ffmpeg audio and video streams decoded from a media file: Video.cpp executeReadPackets method
- Writing an ffmpeg video stream composed from captured frame images: MediaWriter.cpp executeWritePackets method
- Parsing subtitle entries from srt (SubRip) files: SubtitleReader.cpp readSubtitles method
- Rendering audio visualization as a waveform line: WaveformShader.cpp updateRenderState and assignParticlePositions methods
- Drawing a line of pixels by use of Bresenham's line algorithm: Shader.cpp drawLine method
- Storing and retrieving records in sqlite3 files: Database.cpp open and exec methods
- Running a text string as Lua script: LuaScript.cpp run method
- Making C++ functions available for call by Lua scripts: LuaScript.cpp constructor
- Sending an http or https request with libcurl: Network.cpp sendHttpRequest method
- Reading freetype character and glyph data from a ttf file: Font.cpp load method
- Generating pseudo-random numbers by use of the Mersenne Twister algorithm: Prng.cpp seed and extract methods
- Executing filesystem operations in Windows, Mac, or Linux environments: OsUtil.cpp fileExists, getFileSize, getFileMtime, getFileType methods, plus others
- Detecting available network interfaces in Windows, Mac, or Linux environments: Network.cpp resetInterfaces method