All Projects → paolo-pr → laav

paolo-pr / laav

Licence: GPL-3.0 license
Asynchronous Audio / Video Library for H264 / MJPEG / OPUS / AAC / MP2 encoding, transcoding, recording and streaming from live sources

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to laav

Platform Install Packages
Official deployment packages to install the Kaltura platform on a server or cluster environments using native OS package managers
Stars: ✭ 436 (+772%)
Mutual labels:  video-recording, video-processing, video-streaming
tssi2
tssi2 is a header-only library for parsing MPEG-2 and DVB Transport Streams in the domain of multimedia processing applications.
Stars: ✭ 18 (-64%)
Mutual labels:  video-processing, mpegts, video-streaming
Server
The Kaltura Platform Backend. To install Kaltura, visit the install packages repository.
Stars: ✭ 293 (+486%)
Mutual labels:  video-recording, video-processing, video-streaming
Screen Recorder Ffmpeg Cpp
*Multimedia project* A screen recording application to capture your desktop and store in a video format. Click here to watch the demo
Stars: ✭ 98 (+96%)
Mutual labels:  video-recording, video-processing, video-streaming
Ksylive ios
金山云直播SDK [ iOS推流+播放 ]融合版 支持美颜滤镜(Beauty Filter)、美声(Beauty Voice)、软硬编(Software/Hardware Encoder) 、网络自适应(Network Auto Adapt)、混音(Audio Mixer)、混响(Reverb)、画中画(PIP)
Stars: ✭ 861 (+1622%)
Mutual labels:  h264, aac, video-streaming
Media Stream Library Js
JavaScript library to handle media streams on the command line (Node.js) and in the browser.
Stars: ✭ 192 (+284%)
Mutual labels:  h264, aac, video-streaming
Conv2mp4 Ps
This Powershell script will recursively search through a user-defined file path and convert all videos of user-specified file types to MP4 with H264 video and AAC audio using ffmpeg. The purpose of this script is to reduce transcoding CPU load on a media server like Plex or Emby and increase video compatibility across platforms.
Stars: ✭ 97 (+94%)
Mutual labels:  h264, aac, video-processing
Jmuxer
jMuxer - a simple javascript mp4 muxer that works in both browser and node environment.
Stars: ✭ 222 (+344%)
Mutual labels:  h264, aac, video-streaming
DumpTS
Extract elementary stream from all kinds of media files, show inside media meta information and reconstruct Transport-Stream, ISOBMFF, Matroska and MMT media files
Stars: ✭ 25 (-50%)
Mutual labels:  mpegts, matroska
ESP32-CAM-MJPEG-Stream-Decoder-and-Control-Library
The library is MJPEG stream decoder based on libcurl and OpenCV, and written in C/C++.
Stars: ✭ 40 (-20%)
Mutual labels:  mjpeg-stream, mjpeg-decoder
libopusenc
Library for encoding .opus audio files and live streams.
Stars: ✭ 92 (+84%)
Mutual labels:  audio-streaming, audio-library
gilfoyle
Distributed video encoding, hosting and streaming (WIP)
Stars: ✭ 73 (+46%)
Mutual labels:  video-processing, video-streaming
2nfm
Share your screen and computer's audio via WebRTC!
Stars: ✭ 29 (-42%)
Mutual labels:  audio-streaming, video-streaming
goicy
AAC and MPEG (MP1, MP2, MP3) Icecast/Shoutcast source client written in Go
Stars: ✭ 58 (+16%)
Mutual labels:  aac, audio-streaming
matroska-subtitles
💬 Streaming parser for embedded .mkv subtitles.
Stars: ✭ 40 (-20%)
Mutual labels:  stream, matroska
mediapipe plus
The purpose of this project is to apply mediapipe to more AI chips.
Stars: ✭ 38 (-24%)
Mutual labels:  stream, video-processing
ExpertVideoToolbox
A lightweight, versatile GUI of x264, x265. Nearly full input formats support, .mkv and .mp4 output support. Avs support will be added soon. Language: Chinese
Stars: ✭ 12 (-76%)
Mutual labels:  aac, video-processing
demuxer
A tool for demux ts/mp4/flv by typescript. Support HEVC/AVC/AAC codec
Stars: ✭ 108 (+116%)
Mutual labels:  h264, aac
RtmpPublishKit
rtmp publish kit for android , encode with mediacodec
Stars: ✭ 106 (+112%)
Mutual labels:  h264, aac
SSffmpegVideoOperation
This is a library of FFmpeg for android... 📸 🎞 🚑
Stars: ✭ 261 (+422%)
Mutual labels:  video-processing, video-streaming

Live Asynchronous Audio Video Library

ABOUT

A header-only C++ library which wraps FFmpeg, V4L2, ALSA and Libevent for capturing audio and video from multiple live sources (cameras and microphones) and

  • Encoding (video: H264, audio: AAC, MP2 and OPUS)
  • Decoding (video: MJPEG) / transcoding (video: MJPEG -> H264)
  • Recording to file (MPEGTS and MATROSKA containers, audio and/or video)
  • Streaming (HTTP and UDP protocols for MPEGTS and MATROSKA containers)
  • Basic image processing

The project is useful for building video surveillance systems as well, consisting in media servers which stream and record at the same time and which can be controlled through MQTT or HTTP commands (see THIS and THIS examples).

It also provides an UDP audio (OPUS) + video (H264) streaming system template with the lowest possible latency.

The project runs on Linux (ALSA and V4L2 devices), but a Windows port is planned (any contribution is welcome!).

FEATURES

  • All the audio/video tasks are made with strictly asynchronous multiple pipes, inside one main loop. This allows to create simple, short (a complete live H264 grabber/streamer can be made with less than 40 lines of code, see THIS example), easy to read and intuitive code in which all the pipes can be realized through overloaded operators, in the following form:
while (!LAAVStop)
{
    // Pipe
    grabber >> converter >> encoder >> streamer;
    
    // Audio-video events catcher
    eventsCatcher->catchNextEvent();
}
  • Threads are not used at all and they are intentionally discouraged in order to avoid that they can be improperly used for decoupling tasks, without taking advantage from multi-core systems.
  • All the audio/video modules (-> classes) make extensive use of templates and all their possible concatenations are checked at compile-time, so to avoid inconsistent pipes.
  • All the pipes are safe at runtime. I.E: when a source is disconnected or temporarily unavailable, the main loop can continue without necessarily having to check errors (they can be checked, anyway, by polling the status of each node: see THIS example)
  • The library is all RAII-designed (basically it safely wraps Libavcodec/format, V4L and ALSA) and the user doesn't have to bother with pointers and memory management.
  • The public API is intended to be intuitive, with a few self-explanatory functions.

COMPILING / RUNNING

Dependencies: FFmpeg >= 4.1 (tested with 4.1 version), Libevent and pkg-config (optional: see the compile command below). FFmpeg needs x264 for H264 support and libopus for OPUS support.

  • Include the library global header (LAAV.hpp), as shown in the examples, in YourProgram.cpp and execute:
g++ -Wall -std=c++11 -DLINUX -o YourProgram YourProgram.cpp `pkg-config --libs libavformat libavcodec libavutil libswresample libswscale libevent alsa`
  • Execute ./CompileExamples for compiling the provided examples.
  • API documentation in HTML format can be created by executing, inside the doxy directory:
doxygen Doxyfile

The library has been tested with the VLC, FFPLAY and MPV media players, but other players should work as well. In order to reduce the network streams' latency, use the following flags on the client side:

VLC (tested with v2.2.4: set a low value for --network-caching flag):

vlc --network-caching 200 http://stream_url

FFPLAY:

ffplay -fflags nobuffer http://stream_url

HOW TO USE IT

See the provided EXAMPLES

TODO

  • Improve the compile-time error messages, for inconsistent pipes, with more static_assert(...) calls.
  • Add a RTSP/RTP streaming server.
  • Windows port (basically, it will consist in creating Windows based classes corresponding to the ALSAGrabber and V4L2Grabber classes, with the same API, and few other things: any contribution is welcome!).
  • MPEGTS-MJPEG is currently NOT supported.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].