Welcome to Firefly
切换语言
Firefly文档中心
最近更新: 2026-10-12 10:28:18

FFMedia

FFMedia 是面向 Linux 多媒体应用的模块化音视频框架,可支持应用软件快速开发 。它重点适配了Rockchip 硬件能力,将芯片相关的复杂的底层处理,根据其功能封装成对应的可复用的功能模块,它将 Camera、文件、网络流、解码、编码、图像处理、推理、显示、录制和推流封装为功能模块,方便用户快速组合开发自己的多媒体应用。

获取 SDK

稳定部署建议从 最新tags 下载发布包。发布包包含预编译 SDK、命令行工具、Python 绑定和示例工程。

需要查看源码或参与开发时,也可以获取仓库:

git clone --depth=1 https://github.com/Firefly-rk-linux-utils/ffmedia_release.git
cd ffmedia_release

主要目录如下:

路径内容
bin/ffmedia通用媒体管线命令行工具
include/ffmedia/C++ 公共头文件
lib/aarch64-linux-gnu/动态库、CMake 配置和 pkg-config 文件
python/Python 绑定 wheel
examples/demo/C++/Python Demo 和 CLI 源码
examples/tests/CPU 测试和硬件手动测试
examples/inference/RKNN 推理扩展

发布包根目录的 CMake 工程主要用于编译示例、测试和扩展;FFMedia 核心动态库由发布包 直接提供。

编译 Demo 和测试

基础构建:

cmake -S . -B build
cmake --build build -j$(nproc)

常用选项:

选项作用
DEMO_OPENCV编译 OpenCV Demo,需要 OpenCV 4
ENABLE_TESTS编译 examples/tests
ENABLE_INFERENCE_EXAMPLES编译推理示例
ENABLE_INFERENCE_EXTENSION编译独立 RKNN 推理扩展

例如编译 OpenCV Demo:

cmake -S . -B build -DDEMO_OPENCV=ON
cmake --build build -j$(nproc)

运行 demo 可以查看帮助信息

./build/demo
Firefly FFMedia: v2.6.2
INFO: ff_media: usage: Usage: ./demo <Input source> [Options]

Options:
-i, --input                  Input image size
-o, --output                 Output image size, default same as input
-a, --inputfmt               Input image format, default MJPEG
-b, --outputfmt              Output image format, default NV12
--use_ffmpeg_demux           Use ffmpeg demux. e.g. --use_ffmpeg_demux or --use_ffmpeg_demux=kmsgrab
--use_ffmpeg_mux             Use ffmpeg demux. e.g. --use_ffmpeg_mux or --use_ffmpeg_mux=rtsp
-c, --count                  Instance count, default 1
-d, --drmdisplay             Drm display, set display plane, set 0 to auto find plane, default disabled
    --connector              Set drm display connector, default 0 to auto find connector
-x, --x11                    X11 window displays, render the video using opengl. default disabled
-z, --zpos                   Drm display plane zpos, default auto select
-e, --encodetype             Encode encode, set encode type, default disabled
-f, --file                   Enable save source output data to file, set filename, default disabled
--port                       Enable push stream, default rtsp stream, set push port, depend on encode enabled, default disabled
--push_type                  Set push stream type, default rtsp. e.g. --push_type rtmp
--push_path                  Set push stream path, default /live/0. e.g. --push_path /live/test
--rtmp_url                   Set the rtmp client push address. e.g. --rtmp_url rtmp://xxx
--rtsp_transport             Set the rtsp transport type, default udp.
                               e.g. --rtsp_transport tcp | --rtsp_transport multicast
-m, --enmux                  Enable save encode data to file. Enable package as mp4, mkv, flv, ts, ps or raw stream files, muxer type depends on the filename suffix.
                               default disabled. e.g. -m out.mp4 | -m out.mkv | -m out.yuv
-s, --sync                   Enable synchronization module, default disabled. Enable the default audio.
                               e.g. -s | --sync=video | --sync=abs
--audio                      Enable audio, default disabled.
--aplay                      Enable play audio, default disabled. e.g. --aplay plughw:3,0
--arecord                    Enable record audio, default disabled. e.g. --arecord plughw:3,0
-l, --loop                   Loop reads the media file.
--gb28181_user_id            Enable gb28181 client, default disabled. set user id
--gb28181_server_id          Set the server id of gb28181 client
--gb28181_server_ip          Set the server ip of gb28181 client
--gb28181_server_port        Set the server port of gb28181 client
--dec_disabled               Disabled decoder
-r, --rotate                 Image rotation degree, default 0
                               0:   none
                               1:   vertical mirror
                               2:   horizontal mirror
                               90:  90 degree
                               180: 180 degree
                               270: 270 degree

示例1:输入是分辨率为 1080p 的 rtsp 摄像头,把解码图像缩放为 720p 并且旋转 90 度,输出到显示器上。

./demo rtsp://admin:firefly123@172.16.2.96 -o 1280x720 -r 90 -d 0 -s

示例2:输入是分辨率为 1080p 的 mipi 摄像头,将摄像头画面编码成 h265 格式,本地建立 rtsp 服务器供客户端拉流。

./demo /dev/video11 -i 1920x1080 -a NV12 -e h265 --port 8554 --push_path /live/test

示例3:输入是 1080p 的媒体文件,同时进行16路读取、解码、缩放及输出到显示器上。

./demo input.mp4 -d 0 -s -c 16

更多使用可阅读sdk下的examples/demo/Readme.md文档。

本页目录