FFmpeg Server - addon for Transcoding - with ffmpeg + nginx for RPI

  • Hi,



    INTRO


    I've mounted a transcoding server with a simple web control interface to help viewing your videos in a compatible web browser.

    It includes ffmpeg own compilation ready to do real time transcode in rpi 3 and rpi 4 using omx and mmal.

    It also works great spawned by tvheadend


    Also includes nginx specific compile to help the transcoding process.

    You can even add nginx additional configurations.


    add-on will be identified as service.ffmpeg in kodi.


    Download here:

    https://mega.nz/file/YfZX0QCa#…_rFJARjn23rKJNsOLoWQMI_Hw




    DETAILS


    FFmpeg TRANSCODING Server for Raspberry Pi


    This add-on includes:


    1 ffmpeg with omx and mmal support for Pi, and also libx264 with presets (for fast transcoding).

    can be used in a tvheadend profile (see bellow).

    2 nginx with rtmp and hls for transcoding services.

    nginx can also publish your custom sites.

    3 A small transcoding web based service - you can transcode your local stored movies across the network.

    even when on low bandwidth.


    Compatible with vlc player and chrome (must install a m3u8 extension for playing streams).




    = QUICK SETUP


    After install go to add-on settings in kodi:

    - Change user and pass (defaults to user / pass)



    Access to the User interface with a web-browser:

    http://ip:port/cgi-bin/movies.cgi?path_to_transcode


    in which path_to_transcode is the directory path that contains video contents to be browsed and transcoded.

    use linux format (example: /media/hdd/movies)




    = TECH STUFF



    1 FFmpeg


    ffmpeg is used as the encoding for the server,

    but it is also usable trought command-line.

    just call as:


    ffmpeg



    TVHEADEND


    If you use tvheadend, you may define a profile that pipes video streams trough ffmpeg before delivering.

    The following example uses x264 to live transocde with a Rapsberry Pi4.

    Assuming ffmpeg server kodi add-on installed in LibreELEC:


    - tvheadend / configuration / stream / stream profiles / add

    - create and enable new stream profiles with the followig:

    . enabled = true

    . Data timeout = 0

    . Restart on error = true

    . Continue if descrambling fails = true

    . Descrambling timeout = 10000

    . Command Line

    /storage/.kodi/addons/service.ffmpeg/bin/ffmpeg -loglevel quiet -i pipe:0 -vcodec libx264 -preset faster -s 640x480 -vb 512k -bufsize 1024k -g 100 -af "aresample=async=1:first_pts=0" -acodec aac -ab 128k -f mpegts pipe:1

    . Kill signal = SIGTERM

    . Kill timeout = 15


    - The ffmpeg provided command will do live transcode with the major setup:

    . video codec : libx264

    . preset : faster

    . frame size : 640x480

    . video bitrate : 512k

    . audio codec : aac

    . audio bitrate : 128k

    . audio sync with video (to handle received lost frames)




    2 NGINX - ADDITIONAL SITES:


    As nginx is being used, you can define additional servers in:

    /storage/.kodi/userdata/addon_data/service.ffmpeg/sites-custom


    Or by samba as:

    \\Userdata\addon_data\service.ffmpeg\sites-custom



    3 TRANSCODING SERVER


    - TRANSCODING CONTROL PORT : Defaults to 9996.


    Simple CTRL GUI : http://ip:port/cgi-bin/movies.cgi

    Start Transcode : http://ip:port/cgi-bin/transcode.cgi

    Stop Transcode : http://ip:port/cgi-bin/stop-transcode.cgi

    Play stream : http://ip:port/hls/movie.m3u8


    Movies will default transcode to 640x480 @ 512kbps.

    Publishing is made to rtmp://localhost/hls/movie (internal port 1935)



    - USER AND PASSWORD:


    User and password defaults to "user" and "pass".

    Should be changed in kodi's add-on configuration screen.



    - KODI ADD-ON CONFIGURATION:


    In the add-on configuration screen, you can define:

    - Server port (defaults to 9996);

    - Transcoded streaming video frame size (defaults to 640 x 480);

    - Transcoded streaming video bitrate (defaults to 512 Kbps);

    - User and password to access the control site;



    - Control GUI:


    Should be called with the local server directory with movies to transcode.

    Example:

    http://ip:port/cgi-bin/movies.cgi?/media/hdd/recordings


    This interface allows choosing the movie, start transcoding, start playback and stop transcoding.

    m3u8 can be watched in chrome by installing an extension. VLC Plays them directly.



    - TRANSCODE:


    transcode.cgi can be called directly by giving the movie FULL PATH NAME WITHIN THE SERVER,

    and several optional arguments.

    The example bellow uses the default options:

    http://ip:port/cgi-bin/transcode.cgi?input=/dev/stdin&frame=640x480&bitrate=512k&offset=00:00:00&caller=movies.cgi


    All arguments are self explanatory, except "caller",

    which is an optional address to transfer execution after the transcoding is started.

    If "caller" is not passed as argument,

    transcode.cgi will stay in browser with a small simple interface to playback and stop the stream.




    - COMPILATION DETAILS:


    ffmpeg and nginx were compiled using the following flags:


    ffmpeg version N-103035 Copyright (c) 2000-2021 the FFmpeg developers

    built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516

    configuration:

    --prefix=/usr --enable-gpl --enable-libx264

    --enable-omx --enable-omx-rpi --enable-mmal --disable-ffplay

    --disable-ffprobe --disable-doc --disable-libxcb --disable-libxcb-shm

    --disable-libxcb-xfixes --disable-libxcb-shape

    --enable-libx265 --enable-openssl --enable-nonfree



    nginx version: nginx/1.21.1

    built by gcc 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1+deb9u1)

    built with OpenSSL 1.1.0l 10 Sep 2019

    TLS SNI support enabled

    configure arguments:

    --add-module=../nginx-rtmp-module --with-http_ssl_module

    --with-http_dav_module --with-http_flv_module --with-http_mp4_module

    --with-http_gunzip_module --with-http_gzip_static_module

    --with-http_auth_request_module

  • Go to Best Answer
    • Best Answer

    This addon is more than ffmpeg:

    It is a full transcode server with a ready to use configuration and user interface to help you serve your local content to an external device (example: stream from your pi --> ipad on the run).


    It includes ffmpeg and nginx in order to have everything together in just one add-on without external dependencies.


    isn't the included ffmpegx (ffpge-tools) already compiled with everything that it works with rpi transcode ?

    For what I've seen in the past, omx and mmal weren't included.

  • yes. but this addon was made to work also on LE10 - the compiled ffmpeg version has all the libs included for using omx and mmal for hw encoding acceleration, giving the on-fly transcoding for the proposed server ;)

  • I've been using this pack for a while. small, simple, without external dependencies or versions.


    It does the job.

    A great compliment for tvheadend on-the-fly transcoding.

    With a transcoding web interface.


    ffmpeg and nginx compiled with the more recent official sources.



    Though it was a good idea to share it with the community.

    You are free to use (or not).



    Thanks

    :)