FFmpeg support

FFmpeg A complete, cross-platform solution to record, convert and stream audio and video.

Install FFmpeg

  • Download FFmpeg from here

  • ./configure --disable-all --disable-autodetect --disable-podpages --disable-asm --enable-avcodec --enable-avformat --enable-decoders --enable-encoders --enable-demuxers --enable-parsers --enable-protocol='file' --enable-swscale --enable-zlib

  • make

  • sudo make install

Add FFmpeg to your project

  • Add library: FFmpeg (for GCC: -lavformat -lavcodec -lavutil -lswscale -lm -lz -lpthread)

Usage

Enable LV_USE_FFMPEG in lv_conf.h.

See the examples below.

Note that, the FFmpeg extension doesn't use LVGL's file system. You can simply pass the path to the image or video as usual on your operating system or platform.

Example

Decode image

C code  

 GitHub
#include "../../lv_examples.h"
#if LV_USE_FFMPEG && LV_BUILD_EXAMPLES

/**
 * Open an image from a file
 */
void lv_example_ffmpeg_1(void)
{
    lv_obj_t * img = lv_img_create(lv_scr_act());
    lv_img_set_src(img, "./lvgl/examples/libs/ffmpeg/ffmpeg.png");
    lv_obj_center(img);
}

#else

void lv_example_ffmpeg_1(void)
{
    /*TODO
     *fallback for online examples*/

    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "FFmpeg is not installed");
    lv_obj_center(label);
}

#endif

MicroPython code  

 GitHub Simulator
Error encountered while trying to open /home/runner/work/lvgl/lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_1.py

Decode video

C code  

 GitHub
#include "../../lv_examples.h"
#if LV_USE_FFMPEG && LV_BUILD_EXAMPLES

/**
 * Open a video from a file
 */
void lv_example_ffmpeg_2(void)
{
    /*birds.mp4 is downloaded from http://www.videezy.com (Free Stock Footage by Videezy!)
     *https://www.videezy.com/abstract/44864-silhouettes-of-birds-over-the-sunset*/
    lv_obj_t * player = lv_ffmpeg_player_create(lv_scr_act());
    lv_ffmpeg_player_set_src(player, "./lvgl/examples/libs/ffmpeg/birds.mp4");
    lv_ffmpeg_player_set_auto_restart(player, true);
    lv_ffmpeg_player_set_cmd(player, LV_FFMPEG_PLAYER_CMD_START);
    lv_obj_center(player);
}

#else

void lv_example_ffmpeg_2(void)
{
    /*TODO
     *fallback for online examples*/

    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "FFmpeg is not installed");
    lv_obj_center(label);
}

#endif

MicroPython code  

 GitHub Simulator
Error encountered while trying to open /home/runner/work/lvgl/lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_2.py

API

Enums

enum lv_ffmpeg_player_cmd_t

Values:

enumerator LV_FFMPEG_PLAYER_CMD_START
enumerator LV_FFMPEG_PLAYER_CMD_STOP
enumerator LV_FFMPEG_PLAYER_CMD_PAUSE
enumerator LV_FFMPEG_PLAYER_CMD_RESUME
enumerator _LV_FFMPEG_PLAYER_CMD_LAST

Functions

void lv_ffmpeg_init(void)

Register FFMPEG image decoder

int lv_ffmpeg_get_frame_num(const char *path)

Get the number of frames contained in the file

Parameters

path -- image or video file name

Returns

Number of frames, less than 0 means failed

lv_obj_t *lv_ffmpeg_player_create(lv_obj_t *parent)

Create ffmpeg_player object

Parameters

parent -- pointer to an object, it will be the parent of the new player

Returns

pointer to the created ffmpeg_player

lv_res_t lv_ffmpeg_player_set_src(lv_obj_t *obj, const char *path)

Set the path of the file to be played

Parameters
  • obj -- pointer to a ffmpeg_player object

  • path -- video file path

Returns

LV_RES_OK: no error; LV_RES_INV: can't get the info.

void lv_ffmpeg_player_set_cmd(lv_obj_t *obj, lv_ffmpeg_player_cmd_t cmd)

Set command control video player

Parameters
  • obj -- pointer to a ffmpeg_player object

  • cmd -- control commands

void lv_ffmpeg_player_set_auto_restart(lv_obj_t *obj, bool en)

Set the video to automatically replay

Parameters
  • obj -- pointer to a ffmpeg_player object

  • en -- true: enable the auto restart

Variables

const lv_obj_class_t lv_ffmpeg_player_class
struct lv_ffmpeg_player_t

Public Members

lv_img_t img
lv_timer_t *timer
lv_img_dsc_t imgdsc
bool auto_restart
struct ffmpeg_context_s *ffmpeg_ctx