视频
辅助头文件:
#include "brookesia/service_helper/video.hpp"辅助类:
esp_brookesia::service::helper::Video
概述
brookesia_service_video 是为 ESP-Brookesia 生态系统提供的视频服务,主要包括:
视频编码:将摄像头等采集源编码为多种压缩或原始格式(分辨率、帧率、格式可分别配置)。
视频解码:将 H.264、MJPEG 等压缩码流解码为常用 RGB、YUV 等显示或后处理格式。
功能特性
编码器
视频编码服务的输入来自 本地视频设备,默认设备路径为 /dev/video0,可在 Kconfig 中配置默认路径前缀与数量。
视频编码服务可将一路输出配置为下列类型之一(每路可单独指定分辨率与帧率):
类型 |
说明 |
|---|---|
H.264 |
常用网络与存储压缩格式 |
MJPEG |
逐帧 JPEG 类压缩 |
RGB565 / RGB888 / BGR888 |
RGB 类格式 |
YUV420 / YUV422 / O_UYY_E_VYY |
YUV 类格式 |
警告
目前暂不支持多路输出。
解码器
解码服务的输入为压缩码流格式,输出为像素格式,可按业务分别配置。常见取值如下:
输入(压缩格式)
格式 |
说明 |
|---|---|
H.264 |
常用网络与存储视频压缩格式 |
MJPEG |
逐帧 JPEG 类压缩码流 |
输出(像素格式)
格式 |
说明 |
|---|---|
RGB565(大端 / 小端) |
16 位 RGB,适合部分屏驱与显存布局 |
RGB888 / BGR888 |
24 位 RGB / BGR,常用于显示与图像处理 |
YUV420P / YUV422P |
平面 YUV,便于视频处理管线 |
YUV422 / UYVY422 |
打包 YUV,常见于采集与显示链路 |
O_UYY_E_VYY |
特定打包 YUV 布局(视硬件与管线而定) |
服务接口
函数
编码器
Open
描述
Open the encoder with config.
执行要求
是否需要调度器: 需要
参数
Config类型:
Object是否必填: 必填
描述: Encoder config. Example: {“sinks”:[{“format”:”H264”,”width”:320,”height”:240,”fps”:30},{“format”:”MJPEG”,”width”:320,”height”:240,”fps”:15}],”enable_stream_mode”:true}
Schema JSON
展开查看 JSON
{
"name": "Open",
"description": "Open the encoder with config.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Encoder config. Example: {\"sinks\":[{\"format\":\"H264\",\"width\":320,\"height\":240,\"fps\":30},{\"format\":\"MJPEG\",\"width\":320,\"height\":240,\"fps\":15}],\"enable_stream_mode\":true}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI 命令
svc_call VideoEncoder0 Open {"Config":null}
Close
描述
Close encoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Close",
"description": "Close encoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoEncoder0 Close
Start
描述
Start encoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Start",
"description": "Start encoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoEncoder0 Start
Stop
描述
Stop encoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Stop",
"description": "Stop encoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoEncoder0 Stop
FetchFrame
描述
Fetch an encoder output frame and emit FetchSinkFrameReady. Only available in non-stream mode.
执行要求
是否需要调度器: 需要
参数
SinkIndex类型:
Number是否必填: 可选
默认值:
0E0描述: Sink index.
Schema JSON
展开查看 JSON
{
"name": "FetchFrame",
"description": "Fetch an encoder output frame and emit `FetchSinkFrameReady`. Only available in non-stream mode.",
"require_scheduler": true,
"parameters": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number",
"required": false,
"default_value": 0.0
}
]
}
CLI 命令
svc_call VideoEncoder0 FetchFrame {"SinkIndex":null}
解码器
Open
描述
Open the decoder with config.
执行要求
是否需要调度器: 需要
参数
Config类型:
Object是否必填: 必填
描述: Decoder config. Example: {“width”:320,”height”:240,”source_format”:”H264”,”sink_format”:”RGB565_LE”,”enable_stream_mode”:true,”enable_hw_acceleration”:true}
Schema JSON
展开查看 JSON
{
"name": "Open",
"description": "Open the decoder with config.",
"require_scheduler": true,
"parameters": [
{
"name": "Config",
"description": "Decoder config. Example: {\"width\":320,\"height\":240,\"source_format\":\"H264\",\"sink_format\":\"RGB565_LE\",\"enable_stream_mode\":true,\"enable_hw_acceleration\":true}",
"type": "Object",
"required": true,
"default_value": null
}
]
}
CLI 命令
svc_call VideoDecoder0 Open {"Config":null}
Close
描述
Close decoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Close",
"description": "Close decoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoDecoder0 Close
Start
描述
Start decoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Start",
"description": "Start decoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoDecoder0 Start
Stop
描述
Stop decoder.
执行要求
是否需要调度器: 需要
参数
无。
Schema JSON
展开查看 JSON
{
"name": "Stop",
"description": "Stop decoder.",
"require_scheduler": true,
"parameters": []
}
CLI 命令
svc_call VideoDecoder0 Stop
FeedFrame
描述
Feed a decoder input frame.
执行要求
是否需要调度器: 需要
参数
Frame类型:
RawBuffer是否必填: 必填
描述: Frame data.
Schema JSON
展开查看 JSON
{
"name": "FeedFrame",
"description": "Feed a decoder input frame.",
"require_scheduler": true,
"parameters": [
{
"name": "Frame",
"description": "Frame data.",
"type": "RawBuffer",
"required": true,
"default_value": null
}
]
}
CLI 命令
svc_call VideoDecoder0 FeedFrame {"Frame":null}
事件
编码器
StreamSinkFrameReady
描述
Emitted when an encoder stream frame is ready. Stream mode only.
执行要求
是否需要调度器: 不需要
参数
SinkIndex类型:
Number描述: Sink index.
SinkInfo类型:
Object描述: Sink info. Example: {“format”:”H264”,”width”:320,”height”:240,”fps”:30}
Frame类型:
RawBuffer描述: Encoded frame data.
Schema JSON
展开查看 JSON
{
"name": "StreamSinkFrameReady",
"description": "Emitted when an encoder stream frame is ready. Stream mode only.",
"require_scheduler": false,
"items": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number"
},
{
"name": "SinkInfo",
"description": "Sink info. Example: {\"format\":\"H264\",\"width\":320,\"height\":240,\"fps\":30}",
"type": "Object"
},
{
"name": "Frame",
"description": "Encoded frame data.",
"type": "RawBuffer"
}
]
}
CLI 命令
svc_subscribe VideoEncoder0 StreamSinkFrameReady
FetchSinkFrameReady
描述
Emitted when an encoder fetched frame is ready. Non-stream mode only.
执行要求
是否需要调度器: 不需要
参数
SinkIndex类型:
Number描述: Sink index.
SinkInfo类型:
Object描述: Sink info. Example: {“format”:”MJPEG”,”width”:320,”height”:240,”fps”:15}
Frame类型:
RawBuffer描述: Encoded frame data.
Schema JSON
展开查看 JSON
{
"name": "FetchSinkFrameReady",
"description": "Emitted when an encoder fetched frame is ready. Non-stream mode only.",
"require_scheduler": false,
"items": [
{
"name": "SinkIndex",
"description": "Sink index.",
"type": "Number"
},
{
"name": "SinkInfo",
"description": "Sink info. Example: {\"format\":\"MJPEG\",\"width\":320,\"height\":240,\"fps\":15}",
"type": "Object"
},
{
"name": "Frame",
"description": "Encoded frame data.",
"type": "RawBuffer"
}
]
}
CLI 命令
svc_subscribe VideoEncoder0 FetchSinkFrameReady
解码器
SinkFrameReady
描述
Emitted when a decoder output frame is ready.
执行要求
是否需要调度器: 不需要
参数
Width类型:
Number描述: Decoded frame width.
Height类型:
Number描述: Decoded frame height.
Frame类型:
RawBuffer描述: Decoded frame data.
Schema JSON
展开查看 JSON
{
"name": "SinkFrameReady",
"description": "Emitted when a decoder output frame is ready.",
"require_scheduler": false,
"items": [
{
"name": "Width",
"description": "Decoded frame width.",
"type": "Number"
},
{
"name": "Height",
"description": "Decoded frame height.",
"type": "Number"
},
{
"name": "Frame",
"description": "Decoded frame data.",
"type": "RawBuffer"
}
]
}
CLI 命令
svc_subscribe VideoDecoder0 SinkFrameReady