FFMedia
15.1. 介绍
ffmedia是一套基于Rockchip Mpp/RGA开发的视频编解码框架,并支持音频aac编解码。 ffmedia一共包含以下单元
-
输入源单元 VI:
-
Camera: 支持UVC, Mipi CSI
-
RTSP Client: 支持tcp、udp和多播协议
-
RTMP Client: 支持拉流和推流
-
File Reader:支持mkv、mp4、flv、ts、ps文件及裸流等文件读入
-
Memory Reader:支持内存数据读入
-
Alsa Capture: 音频采集
-
-
处理单元 VP:
-
MppDec: 视频解码,支持H264,H265,MJpeg
-
MppEnc: 视频编码,支持H264,H265,MJpeg
-
RGA:图像合成,缩放,裁剪,格式转换
-
AacDec: aac音频解码
-
AacEnc: aac音频编码
-
Inference: rknn模型推理
-
-
输出单元 VO:
-
DRM Display: 基于libdrm的显示模块
-
Renderer Video: 使用gles渲染视频,基于libx11窗口显示
-
RTSP Server: 支持tcp和udp推流
-
RTMP Server: 支持推流
-
File Writer: 支持mkv、mp4、flv、ts、ps文件封装及裸流等文件保存
-
Alsa PlayBack: 音频播放
-
GB28181 Client: 支持视频点播
-
源码仓库:https://github.com/Firefly-rk-linux-utils/ffmedia_release
15.2. 编译测试
# 获取适用于arm64环境ffmedia仓库
git clone https://github.com/Firefly-rk-linux-utils/ffmedia_release.git
# 获取适用于armhf环境ffmedia仓库
git clone https://github.com/Firefly-rk-linux-utils/ffmedia_release.git -b armhf
# 参考仓库下的demo/Readme.md 安装所需环境
# 编译
cd ffmedia_release
mkdir build
cd build
cmake ../
make
# 运行 demo
## 直接运行 demo 可以查看帮助信息
$: ./demo
Firefly FFMedia: v2.3.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
-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
-p, --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
--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
-r, --rotate Image rotation degree, default 0
0: none
1: vertical mirror
2: horizontal mirror
90: 90 degree
180: 180 degree
270: 270 degree
## 示范:输入是分辨率为 1080p 的 rtsp 摄像头,把解码图像缩放为 720p 并且旋转 90 度,输出到显示器上。
./demo rtsp://admin:firefly123@168.168.2.143 -o 1280x720 -d 0 -r 90
# 更多使用示例参考仓库下的demo/Readme.md