C++ Oat++ Framework Project to Build HLS LIVE Video Streaming Server in Browser

  • Post author:
  • Post category:c++
  • Post comments:0 Comments


Example-HLS-Media-Stream Build Status

Example project how-to build HLS-streaming server using oat++ (AKA oatpp) Async API.

Live stream is tested with Safari-Browser and VLC-player

See more:


Server generates infinite .m3u8 playlist from the pre-generated playlist_live.m3u8 file in the video folder.
File video/playlist_live.m3u8 together with video chunks is generated using ffmpeg.

Server is built using oat++ Async-Api and has following endpoints:

  • ("GET", "/", Root) – Starting html-page aka index.html
  • ("GET", "video/*", Video) – Embedded video html-page
  • ("GET", "media/live", Live) – Infinite HLS playlist for live-stream describing video chunks
  • ("GET", "media/*", Static) – Endpoint serving media files with range requests support

Project layout

Build and Run

Using CMake


  • oatpp module installed. You may run utility/install-oatpp-modules.sh script to install required oatpp modules.

In Docker




  • localhost:8000 – Index page
  • localhost:8000/media/live – Live stream made from {repo}/video/video1.mp4 and {repo}/video/video2.mp4 played in the loop


  • {repo}/video/playlist_live.m3u8 – playlist used for live HLS streaming
  • {repo}/video/generate_pls.sh – example script used to generate sub-playlists and video fragmets using ffmpeg tool. #EXTINF sections of sub-playlists then have to be manualy moved to playlist_live.m3u8.


If app can’t find playlist of video files then specify full-file-paths for {repo}/video/playlist_live.m3u8 file and {repo}/video folder in AppComponent.hpp



Leave a Reply