TXW82x SDK 视频应用功能使用说明
Chinese only适用版本:v2.7.1.7 本文说明如何使用录像、拍照和 RTSP 图传。只列出客户需要调用的接口和必要的数据流。
1. 功能速查
| 功能 | 数据源 | 主要接口 | 默认结果 |
|---|---|---|---|
| 拍照 | AUTO_JPG |
new_takephoto_msi() + MSI_CMD_START |
JPG 原图和缩略图 |
| MP4 录像 | AUTO_H264 |
mp4_record_msi_init() + MSI_MEDIA_CTRL_RECORD_START |
MP4 文件 |
| AVI 录像 | AUTO_H264 |
avi_record_msi_init() |
AVI 文件 |
| RTSP MJPEG | AUTO_JPG |
spook_init() |
/webcam |
| RTSP H.264 | AUTO_H264 |
spook_init() |
/h264 |
| 完整 HTTP 应用 | H.264 + JPEG | config_Viidure(80) |
HTTP 拍照、录像和配置服务 |
2. 使用前提
摄像头方案需要先完成以下初始化:
flowchart LR
SENSOR["Sensor"] --> CSI["MIPI-CSI"]
CSI --> ISP["ISP"]
ISP --> VPP["VPP"]
VPP --> H264["app_h264_init()"]
VPP --> JPEG["auto_jpg_msi_init()"]
H264 --> AUTOH["AUTO_H264"]
JPEG --> AUTOJ["AUTO_JPG"]
IPC、LCD 和 ISP 调试参考方案已经完成这些初始化。客户在参考方案中使用功能时,不需要重复初始化 Sensor、ISP、VPP 和编码器。
拍照和录像还需要:
FS_EN=1。- SD 卡已插入并挂载。
- 已初始化 SD 工作队列。
- AV SRAM 和 PSRAM 配置足够。
3. 拍照
3.1 数据流
flowchart LR
SENSOR["Sensor"] --> VPP["ISP / VPP"]
VPP --> JPEG["JPEG 编码"]
JPEG --> AUTO["AUTO_JPG"]
AUTO --> PHOTO["new_takephoto_msi"]
PHOTO --> FILE["JPG 原图 + 320×240 缩略图"]
3.2 创建拍照组件
#include "app/takephoto_module/takephoto.h"
#include "stream_define.h"
struct msi *photo_msi;
photo_msi = new_takephoto_msi(
FRAMEBUFF_SOURCE_CAMERA0,
FSTYPE_NONE);
if (photo_msi) {
msi_add_output(NULL, AUTO_JPG, photo_msi, NULL);
}
参数说明:
| 参数 | 说明 |
|---|---|
FRAMEBUFF_SOURCE_CAMERA0 |
接收主摄像头图片 |
FSTYPE_NONE |
不限制 JPEG 子类型 |
3.3 触发拍照
拍 1 张:
msi_do_cmd(photo_msi, MSI_CMD_START, 1, 0);
连拍 2 张:
msi_do_cmd(photo_msi, MSI_CMD_START, 2, 0);
第三个参数表示拍照张数。拍照完成后组件会自动停止接收。
3.4 释放拍照组件
msi_del_output(NULL, AUTO_JPG, photo_msi, NULL);
msi_destroy(photo_msi);
photo_msi = NULL;
3.5 默认文件
| 内容 | 当前内部路径 |
|---|---|
| 原图 | 0:/IMG/...JPG |
| 缩略图 | 0:/thumb/...JPG |
客户自己读取文件时建议使用 VFS 路径 /sd0/IMG/...。
4. 录像
4.1 数据流
flowchart LR
SENSOR["Sensor"] --> VPP["ISP / VPP"]
VPP --> H264["H.264 编码"]
H264 --> AUTO["AUTO_H264"]
AUTO --> REC["MP4 / AVI 录像组件"]
REC --> SD["SD 卡文件"]
如果启用音频:
flowchart LR
MIC["MIC"] --> ADC["Audio ADC"]
ADC --> AAC["AAC 编码"]
AAC --> REC["MP4 录像组件"]
4.2 创建 MP4 录像组件
#include "app/video_record/video_record.h"
#include "stream_define.h"
struct msi *h264_msi;
struct msi *record_msi;
struct video_record_cfg cfg = {
.name = "customer_rec",
.srcID = FRAMEBUFF_SOURCE_CAMERA0,
.filter = FSTYPE_H264_VPP_DATA0,
.rec_time = 1,
.audio_en = 0,
.mode = MP4_MODE_NORMAL,
.video_fps = 25,
.file_process = NULL,
};
h264_msi = msi_find(AUTO_H264, 1);
record_msi = mp4_record_msi_init(&cfg);
if (h264_msi && record_msi) {
msi_add_output(h264_msi, NULL, record_msi, NULL);
}
配置说明:
| 字段 | 说明 |
|---|---|
name |
录像组件名称,必须唯一 |
srcID |
摄像头来源 |
filter |
选择主码流或副码流 |
rec_time |
单文件时长,单位分钟 |
audio_en |
1 录制音频,0 不录音频 |
mode |
普通、缩时或事件录像 |
video_fps |
必须与实际 H.264 帧率一致 |
file_process |
NULL 使用默认 MP4 文件处理 |
1080P 方案的实际帧率可能为 15,不要固定使用示例中的 25。
4.3 开始录像
msi_do_cmd(record_msi,
MSI_CMD_MEDIA_CTRL,
MSI_MEDIA_CTRL_RECORD_START,
0);
4.4 获取录像时长
uint32_t record_time = 0;
msi_do_cmd(record_msi,
MSI_CMD_MEDIA_CTRL,
MSI_MEDIA_CTRL_GET_RECTIME,
(uint32_t)&record_time);
4.5 停止并释放
record_msi->enable = 0;
msi_do_cmd(record_msi, MSI_CMD_PRE_DESTROY, 0, 0);
msi_del_output(h264_msi, NULL, record_msi, NULL);
msi_destroy(record_msi);
msi_put(h264_msi);
record_msi = NULL;
h264_msi = NULL;
MSI_CMD_PRE_DESTROY 会通知录像组件完成文件封装收尾。不要直接拔卡或立即断电。
4.6 AVI 录像
创建接口改为:
record_msi = avi_record_msi_init(&cfg);
其余 MSI 连接和生命周期管理方式相同。
4.7 默认文件
默认 MP4 路径为 0:/REC/...MP4。单文件时长由 rec_time 控制,大小还受 MP4_MAX_SINGLE_SIZE 限制。
5. RTSP 图传
5.1 数据流
flowchart LR
AUTOH["AUTO_H264"] --> RTSP["Spook RTSP Server"]
AUTOJ["AUTO_JPG"] --> RTSP
RTSP --> CLIENT["手机 / VLC / PC"]
5.2 启动 RTSP
#include "spook.h"
spook_init();
参考 IPC 方案已经在 app_user_init() 中调用 spook_init(),不要重复启动。
5.3 访问地址
| 流 | 地址 |
|---|---|
| MJPEG | rtsp://<设备IP>:554/webcam |
| H.264 | rtsp://<设备IP>:554/h264 |
例如设备 IP 为 192.168.1.1:
rtsp://192.168.1.1:554/h264
可使用 VLC 打开网络串流进行测试。
5.4 图传无画面时检查
- 确认设备和客户端网络可达。
- 确认
spook_init()已执行。 - 确认
app_h264_init()或 JPEG 编码链已执行。 - 确认
AUTO_H264/AUTO_JPG有数据输出。 - 使用
msi_dump()查看组件连接状态。
6. 使用完整录风者应用
如果客户需要现成的 HTTP 拍照、录像、参数设置和文件管理服务,可直接初始化:
#include "app/viidure/recorder_viidure.h"
config_Viidure(80);
说明:
80是 HTTP 服务端口。- 录风者内部会连接
AUTO_H264和AUTO_JPG。 - IPC 720P、LCD 720P、IPC 1080P 和 ISP 调试方案默认已经调用。
- 低功耗 720P 和电池相机方案默认没有调用。
如果产品只需要简单拍照或录像,优先使用第 3、4 节的直接接口,不必引入完整 HTTP 应用。
7. 常见问题
| 问题 | 检查项 |
|---|---|
| 拍照没有文件 | SD 卡、FS_EN、AUTO_JPG、拍照组件连接 |
| 录像文件无法播放 | 是否正常执行停止收尾、H.264 帧率和 SPS/PPS 是否正确 |
| 录像中断 | SD 写速率、空间、PSRAM、队列积压 |
| RTSP 卡顿 | Wi-Fi 信号、码率、聚合参数、客户端传输方式 |
input fb queue full |
下游处理过慢或队列过小 |
MSI、播放器、LCD 和 VFS 原理见TXW82x SDK 框架原理说明。