跳转至

sample_venc 快速入门

1. 概述与作用

sample_venc 是 Hi3516CV610 MPP 套件中用于演示 Video ENCoder(VENC)模块完整能力的样例程序,覆盖 H.264、H.265、MJPEG 与 SVAC3 四种码流负载在常见监控与安防业务场景下的调用方法。整个样例从 VI 实时采集 sensor 数据,经 VPSS 完成去噪、缩放与格式转换后送入 VENC 编码,最终落盘为可直接用 ffplay/ffprobe 播放或分析的原始码流文件,便于开发者快速验证不同码率控制(RC,Rate Control)、图像组(GOP,Group Of Pictures)、感兴趣区域(ROI,Region Of Interest)、帧内刷新(intra_refresh)、逐宏块 QP 映射(qpmap)、逐区域质量控制(roimap)、区域马赛克(mosaic map)、debreath 滤波、多流合成(composite)、VENC内部缩放(跳过VPSS)以及单 semi-planar 输入(single_sp)等高级特性的实际效果。该样例同时通过 sample_ipc_server_init 提供 VB pool 共享请求通道,便于与其它进程协作使用 Video Buffer。对于需要在 Hi3516CV610 上快速评估编码质量、调参或对照不同 RC/GOP 模式效果的开发者而言,本样例是最直接的入门途径,也是验证 Hi3516CV610 编码器在不同负载与码率约束下表现的标准参考实现。

样例覆盖的四种码流负载各有侧重:H.264(AVC)兼容性最好,适合传统监控后端;H.265(HEVC)压缩比更高,适合带宽受限场景;MJPEG 逐帧 JPEG 编码适合抓拍与快照;SVAC3 是中国安防监控标准,在公安与交警项目中常被要求。样例通过交互式按键让用户在运行时选择 RC 与 GOP 模式,避免了重新编译的繁琐流程,方便快速对照不同配置下的码率曲线与画质差异。

RC 模式决定编码器如何在码率约束与画质之间权衡:CBR(恒定码率)输出码率稳定但复杂场景画质下降明显;VBR(可变码率)画质稳定但码率波动大;ABR(平均码率)在 CBR 与 VBR 之间折中;AVBR 在 VBR 基础上加入自适应窗口约束;CVBR 在 CBR 基础上允许小幅波动;QVBR 以质量为目标反向约束码率;FIXQP 固定 QP 完全不受码率约束,适合画质对照测试。GOP 模式决定 I/P/B 帧的排列方式:NormalP 是传统 I/P 交替;DualP 增加双参考帧提升压缩比;SmartP 智能插入 I 帧应对场景切换;SmartCRR 是 SVAC3 专属的智能码率分配模式。开发者应结合实际业务场景选择合适的 RC 与 GOP 组合,例如实时监控推荐 AVBR+SmartP,存储回放推荐 CBR+NormalP,画质测试推荐 FIXQP+NormalP。

本文默认sensor为HY006-3814-0011,如需适配新sensor,请参考《Sensor 调试指南》和《Sensor适配说明》

2. 执行准备

在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。

2.1 编译

进入样例目录执行 make 即可完成编译:

cd samples/mpp/venc && make

编译成功之后,在当前目录下会生成一个sample_venc的可执行文件,可以放社区支持的开发板上运行。

2.2 加载 KO 与依赖环境

ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。

由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,加载命令为:

./load3516cv610_20s_debug -i

可以通过-h命令查看具体用法:

./load3516cv610_20s_debug -h
Usage:  ./load3516cv610_20s_debug [-option] [-sensor0~1] 
options:
    -i                       insert modules
    -r                       remove modules
    -a                       remove modules first, then insert modules
    -sensor0~1 sensor_name   config sensor type    [default: hy006_3814_0011]
    -mmz_start               config MMZ start addr [default: 0x42000000]
    -mmz_size                config MMZ mem size [unit: M, default: 96M]
    -ir_auto                 config ir_auto enable [default: 0]
    -profile                 config sys_profile [default: 0]
    -h                       help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1

如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。

如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于/ko目录下,在系统启动后会自动加载这些ko。

2.3 运行时依赖

在运行样例前,需要提前准备:

  • 指定运行时依赖的so库路径

MPP样例依赖的so库位于soc/libs/musl下,需要将该目录下的so库拷贝到开发板上(或将这些so库所在的目录挂载到开发板上),并指定运行时依赖库的环境变量,假设这些so库位于/mnt/libs/,执行如下命令:

```shell
export LD_LIBRARY_PATH=/mnt/libs/:$LD_LIBRARY_PATH
```

如果是使用社区默认提供的镜像,这些so库已经打包到文件系统中,烧录到单板上后位于/usr/lib目录下,该目录是系统默认搜索目录,不需要执行export LD_LIBRARY_PATH命令去指定。

  • 启动MPP服务

当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:

```shell
cd samples/mpp/sdk_server && make
```

在单板上执行./sdk_server &即可启动MPP服务。

  1. sdk_server同样依赖soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;
  2. 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于/usr/bin目录下,并在系统启动时会自动启动sdk_server。
  • 样例运行时候需要的资源文件

无。

3. 支持的 Case 列表

调用语法:./sample_venc [index]选择case执行,index范围是0-11,运行中按回车键(或Ctrl+C)退出,执行./sample_venc或./sample_venc -h查看帮助。

image-20260810153421466

case0-case11的说明如下:

  • case 0 normal — H.265e + H.264e 双路编码,最常用的入门组合,适合验证编码链路是否正常。
  • case 1 intra_refresh — H.265e + H.264e 双路编码 可选择行(列)刷新,演示周期内帧内刷新以应对I帧附近码率波动大问题。
  • case 2 roi_bg_frame_rate — H.265e + H.264e 双路编码,带 ROI + 背景帧率控制,前景(ROI区域)高质量、背景(非ROI区域)降帧以节省码率。
  • case 3 roi_set — MJPEG + MJPEG通过用户 API 设置 ROI,演示 JPEG 编码下的区域优先。
  • case 4 svac3 encode — SVAC3(Surveillance Video And Audio Coding v3,中国监控标准)编码(暂不支持)。
  • case 5 inner scale — 两路H.264/H.265/SVAC3(由用户选择 payload),VENC内部缩放,(跳过VPSS通路),适合资源紧张场景。
  • case 6 qpmap — H.265e + H.264e双路编码,支持用户给对应帧送qpmap表,控制每MB、CU的QP。
  • case 7 debreath_effect — H.265e + H.264e 对I帧进行滤波,减少脉冲噪声。
  • case 8 roimap — MJPEG + MJPEG per-region 用户送帧+roi map控制感兴趣区域质量。
  • case 9 mosaic_map — H.265e + H.264e 用户发帧加马赛克区域遮挡。
  • case 10 composite — H.265 composite 多流合成。
  • case 11 single_sp — H.265e + H.264e 单 semi-planar 输入格式,验证 NV12/NV21 直送编码器的能力。

多数case启动时会交互式提示用户选择RC模式与GOP模式,gop mode选择交互式菜单:

rc mode选择交互式菜单(仅case5支持切换编码协议):

please input choose payload type!
    0) h264
    1) h265
    2) svac3

gop mode选择交互式菜单:

please input choose gop mode!
    0) normal p. (常规 I/P 帧)
    1) dual p. (双参考帧)
    2) smart p. (智能 I/P 帧)
    3) smart crr. (智能码率分配,仅 SVAC3)
  • case0、1、2、5、6、7、9、10、11 支持选择gop模式0、1、2。
  • case1 I帧刷slice仅支持选择gop模式0,选择其他会报错提示功能不支持,退出用例。
  • case2 背景低帧率功能仅支持选择gop模式0,选择其他会报错提示功能不支持,退出用例。
  • case3、8由于是mjpeg编码协议,所以不支持选择gop模式。
  • case10 复合编码仅支持0、2gop模式。
  • case11 演示gop模式singlesp,不提示用户选择gop模式。

rc mode交互式菜单:

please input choose rc mode!
    c) cbr.(恒定码率)
    v) vbr. (可变码率)
    b) abr.(平均码率)
    a) avbr.(自适应可变码率)
    x) cvbr.(约束可变码率)
    q) qvbr.(质量约束可变码率)
    f) fix_qp.(固定 QP)
+ case3、8 仅支持c、v、f,其他case没有约束。

注意,各case的复杂度从基础到高级递增:

  • case 0/11 是入门级,验证编码链路是否正常;
  • case 1/2/3 演示常见监控特性;
  • case 4/5 演示特殊编码标准与无 VPSS 通路,其中5仅Hi3516CV610/Hi3516CV608支持此功能;
  • case 6/7/8/9/10 是高级特性,需要DDR内存大的单板上才能运行。

建议开发者按顺序从 case 0 开始验证,逐步过渡到高级 case,以便在出现问题时快速定位是链路基础问题还是高级特性问题。case 4(SVAC3)需要单独的 SVAC3 编码器 KO,若 ot_svac3e.ko 未加载会直接失败。case 5(inner scale)跳过 VPSS 直接将 VI 帧送入 VENC 内部缩放,适合 VPSS 资源紧张的场景,但缩放质量略低于 VPSS。

3.1 normal

./sample_venc 0
  • 场景介绍: 演示从VI-VPSS-VENC通路的一般配置流程

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

    图片说明

  • 流程:

    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构、RC模式)
    3. 创建编码器,和VPSS进行绑定
    4. 启动收流。

3.2 intra refresh

./sample_venc 1
  • 场景介绍: 演示P帧内刷新的使用方法。P帧帧内刷新,可以为客户提供码率非常平滑的编码方式,每个I帧和P帧的大小可以非常接近。在网络带宽有限(如无线网络)的情况下,降低I帧过大带来的网络冲击,降低网传延时。 P帧帧内刷新的介绍和接口使用请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章“P帧帧内刷新”小节。

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流: 同sample_venc_normal

  • 流程:

    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构、帧内刷新模式、RC模式)
    3. 创建编码器,和VPSS进行绑定,设置帧内刷新模式。
    4. 启动收流。

3.3 roi bg

./sample_venc 2
  • 场景介绍: 演示背景帧低帧率的配置方法。背景帧低帧率适用于背景区域相对固定的场景,该功能与ROI接口配合,通过降低背景区域的刷新率,降低编码码率。 背景帧低帧率的配置方法和注意事项请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章“非ROI区域的低帧率编码”小节。

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
4. 确认画面左上角roi感兴趣区域质量是否较高,非ROI区域会隔一帧降低帧率,播放效果类似抽帧。
  • 数据流: 同sample_venc_normal

  • 流程:

    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构、RC模式)
    3. 创建编码器,和VPSS进行绑定,设置ROI属性、背景帧低帧率属性。
    4. 启动收流。

3.4 mjpeg roi set

./sample_venc 3

#### 输出文件

生成的编码码流文件stream_chn0.mjp、stream_chn1.mjp,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(RC模式)
    3. 创建编码器,设置mjpeg roi属性,和VPSS进行绑定。
    4. 启动收流。

3.5 svac3 (暂不支持)

./sample_venc 4
  • 场景介绍: 演示SVAC3.0的配置方法。配置方式和H.264、H.265协议基本相同

  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构、RC模式)
    3. 创建编码器(SVAC3协议),和VPSS进行绑定
    4. 启动收流。

3.6 inner scale

./sample_venc 5
  • 场景介绍: 演示VENC内部缩放功能的配置和使用。内部缩放功能在编码大码流时缩放输出小yuv给小码流进行编码,由于大小码流之间只有一个VB交互,因此相比小码流前级送帧,可以节省VB个数。 功能介绍和使用注意事项请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章“内部缩放”小节。

#### 输出文件

两路同协议码流,生成的编码码流落盘到\/stream_chn\.\,扩展名由 payload 决定:H.265 为 .h265、H.264 为 .h264、MJPEG 为 .mjp。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(协议、GOP结构、RC模式)
    3. 创建编码器,VPSS chn0(发送方)绑定给VENC chn0(接收方), VENC chn0(发送方)绑定给VENC chn1(接收方)
    4. 启动收流。

3.7 qpmap

./sample_venc 6
  • 场景介绍: 演示QPMAP功能的使用。用户调用vpss接口获取视频帧,送帧到VENC,在此模式下允许用户自由决定码控的策略。 QPMAP的功能介绍以及使用注意事项请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章“码率控制”小节。

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
  • 初始化VENC前级模块(VI-VPSS)并进行绑定
  • 获取用户配置(GOP结构)
  • 创建编码器。
  • 从vpss通道获取视频帧,填充qpmap信息后送给编码通道编码。
    • 带有QPMAP信息送帧,需要使用ss_mpi_venc_send_frame_ex接口。
    • QPMAP内存信息填充示例参考函数sample_comm_venc_vir_addr_temp。
  • 启动收流。

3.8 debreath effect

./sample_venc 7
  • 场景介绍: 演示去呼吸功能的配置。去呼吸功能可以减少编码后码流的呼吸效应, 去呼吸功能的配置以及使用注意事项请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章 ss_mpi_venc_set_debreath_effect接口。

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构、RC模式)
    3. 创建编码器,和VPSS进行绑定,设置通道0去呼吸。
    4. 启动收流。

3.9 mjpeg roimap

./sample_venc 8

#### 输出文件

生成的编码码流文件stream_chn0.mjp、stream_chn1.mjp,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(RC模式)
    3. 创建编码器。
    4. 从vpss通道获取视频帧,填充ROI map信息后送给编码通道编码。带有ROI map信息送帧,需要使用ss_mpi_venc_send_frame_ex接口。
    5. 启动收流。

3.10 mosaic map

./sample_venc 9
  • 场景介绍: 演示马赛克功能使用。逻辑根据马赛克表和马赛克配置将原始yuv直接改写,再进行编码,那么输出的码流就会带有马赛克的效果。

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题;
4. 确认画面上方是否有mosaic区域。
  • 数据流: 同sample_venc_qpmap

  • 流程:

    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构,RC模式)
    3. 创建编码器。
    4. 从vpss通道获取视频帧,填充mosaic信息后送给编码通道编码。
      • 带有MOSAIC_MAP信息送帧,需要使用ss_mpi_venc_send_frame_ex接口。
      • 马赛克信息填充示例参考函数sample_comm_venc_mosaic_map_send_frame_proc。
    5. 启动收流。

3.11 composite

./sample_venc 10

#### 输出文件

生成的编码码流文件stream_chn0.h265,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。播放画面是带有mosaic画面的效果,使用海思硬解码能解码出不带mosaic画面的效果。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(GOP结构,RC模式)
    3. 设置通道config(composite_enc_en,mosaic_en,quality_level),创建编码器。通道配置请参考《MPP 媒体处理软件 V6.0 开发参考》视频编码第6章 ss_mpi_venc_set_chn_config接口。
    4. 从vpss通道获取视频帧,填充mosaic信息后调用ss_mpi_venc_send_multi_frame接口送编码通道编码。复合编码送帧需要使用接口ss_mpi_venc_send_multi_frame
    5. 启动收流。

3.12 single sp

./sample_venc 11

#### 输出文件

生成的编码码流文件stream_chn0.h265、stream_chn1.h264,分辨率分别为2560x1440@30fps和1280x720@30fps,存储目录为样例执行目录。

#### 控制台日志

启动时若该 case 涉及 RC/GOP 选择,会交互式打印 please input choose rc mode! 与 please input choose gop mode!,等待用户按键。

运行结束成功时打印 program exit normally!,失败时打印 program exit abnormally!。

运行过程中按下回车建(或Ctrl+C)可触发样例的退出,确保 VENC 通道与 VB pool 被正确释放,避免资源泄漏影响下次运行。

#### 正确性判断

1. 用 `ls -l` 确认文件大小随运行时间持续增长,若大小停滞则说明编码链路已断。
2. 用 `ffprobe` 查询编码参数(分辨率、profile、gop间隔);
3. 用 `ffplay` 播放,观察码流播放效果是否OK,确认分辨率是否OK,有无花屏等问题。
  • 数据流:

图片说明

  • 流程:
    1. 初始化VENC前级模块(VI-VPSS)并进行绑定
    2. 获取用户配置(RC模式)
    3. 创建编码器(GOP模式为SINGLE_SP,设置跳帧参考参数(base, enhance, pred_en)=(1, 3, TRUE)),和VPSS进行绑定。
    4. 启动收流。