class mrpt::hwdrivers::CFFMPEG_InputStream

A generic class which process a video file or other kind of input stream (http, rtsp) and allows the extraction of images frame by frame.

Video sources can be open with “openURL”, which can manage both video files and “rtsp://” sources (IP cameras).

Frames are retrieved by calling CFFMPEG_InputStream::retrieveFrame

For an example of usage, see the file “samples/grab_camera_ffmpeg”

This class is an easy to use C++ wrapper for ffmpeg libraries (libavcodec). In Unix systems these libraries must be installed in the system as explained in MRPT’s wiki. In Win32, a precompiled version for Visual Studio must be also downloaded as explained in the wiki.

#include <mrpt/hwdrivers/CFFMPEG_InputStream.h>

class CFFMPEG_InputStream
{
public:
    // structs

    struct Impl;

    // construction

    CFFMPEG_InputStream();

    //
methods

    bool openURL(
        const std::string& url,
        bool grab_as_grayscale = false,
        bool verbose = false,
        const std::map<std::string, std::string>& options = { {"rtsp_transport", "tcp"}}
        );

    bool isOpen() const;
    void close();
    double getVideoFPS() const;
    bool retrieveFrame(mrpt::img::CImage& out_img);

    bool retrieveFrame(
        mrpt::img::CImage& out_img,
        int64_t& outPTS
        );
};

Construction

CFFMPEG_InputStream()

Default constructor, does not open any video source at startup.

Methods

bool openURL(
    const std::string& url,
    bool grab_as_grayscale = false,
    bool verbose = false,
    const std::map<std::string, std::string>& options = { {"rtsp_transport", "tcp"}}
    )

Open a video file or a video stream (rtsp://) This can be used to open local video files (eg.

“myVideo.avi”, “c:a.mpeg”) and also IP cameras (e.g rtsp://a.b.c.d/live.sdp). User/password can be used like rtsp://USER:PASSWORD@IP/PATH.

ffmpeg options can be added via the options argument.

If verbose is set to true, more information about the video will be dumped to cout.

Returns:

false on any error (and error info dumped to cerr), true on success.

See also:

close, retrieveFrame

bool isOpen() const

Return whether the video source was open correctly.

void close()

Close the video stream (this is called automatically at destruction).

See also:

openURL

double getVideoFPS() const

Get the frame-per-second (FPS) of the video source, or “-1” if the video is not open.

bool retrieveFrame(mrpt::img::CImage& out_img)

Get the next frame from the video stream.

Note that for remote streams (IP cameras) this method may block until enough information is read to generate a new frame. Images are returned as 8-bit depth grayscale if “grab_as_grayscale” is true.

Returns:

false on any error, true on success.

See also:

openURL, close, isOpen