# MediaCodec **Repository Path**: ssddn/MediaCodec ## Basic Information - **Project Name**: MediaCodec - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-06 - **Last Updated**: 2024-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [EN](README.en.md)|CN ## 视频转码demo 本文介绍视频转码demo。该demo旨在验证DaVinci芯片DVPP模块的视频转码能力,同时也提供了一个基于Atlas 800 (Model 3000)的转码功能demo。demo的主要功能是:接收RTSP协议视频流(1080p分辨率,H.264编码格式)输入,通过DaVinci芯片的DVPP模块将视频流转换为D1或者CIF格式,并将转码的视频通过RTSP协议推送出去,实现视频的转码功能。该系统包含如下几大主要功能模块:主控模块(用于系统配置、任务分发、创建多图)、拉流模块、视频解码模块、视频编码模块及视频推流模块。只有解码及编码模块利用DVPP的硬件能力,其他模块均运行在主机端CPU上。本文主要介绍运行该demo所需的环境配置和使用步骤。 [TOC] ### 支持的产品 Atlas 800 (Model 3000) ### 支持的版本 1.31.T15.B150 或 1.3.5.B896 或 1.32.T7.B070 ### 运行环境 Ubuntu ARM 18.04 ### 目录结构 本demo源代码的目录结构如下: ``` ├── build │   ├── build_local.sh │   └── cmake ├── README.en.md ├── README.zh.md └── src ├── common ├── config │   ├── cfg.ini │   └── graph.prototxt ├── device │   ├── CMakeLists.txt │   ├── vdec_engine │   └── venc_engine ├── host │   ├── CMakeLists.txt │   ├── dest_engine │   ├── main.cpp │   └── src_engine └── script └── run.sh ``` 所有源文件位于src目录中;build目录包含编译脚本。其中,src/config文件夹包含用户配置文件和Matrix框架配置文件。host/src_engine为拉流模块,host/dest_engine为推流模块;device/vdec_engine为视频帧解码、缩放模块,device/venc_engine为视频编码模块;common为公共模块,如配置文件解析、数据传输序列化及反序列化等;script包含运行本demo的脚本。 ### 第三方依赖库——FFmpeg 拉流和推流功能基于FFmpeg 4.2。请参考FFmpeg开源工程进行源码编译和安装,并确保FFmpeg的安装目录下包含include和lib文件夹,如下所示: ``` ├── FFmpeg | ├── include | ├── lib ``` ### 使用方法 #### 1.编译: (1)修改build/build_local.sh: 将export DDK_HOME=/home/ddkuser/ddk_path/ddk 修改为实际DDK目录; 将FFMPEG_PATH="/usr/local/ffmpeg" 修改为实际FFmpeg目录。 (2)在build目录下执行build_local.sh构建工程。 ``` ./build_local.sh ``` #### 2.根据模板修改、创建用户配置文件 用户需要根据实际业务场景修改/src/config中的cfg.ini配置文件,并根据需要创建多个配置文件以支持多路视频流转码场景。一个cfg.ini配置文件对应一个chip(一个chip表示1个Ascend310芯片),一个chip上可运行多路视频流转码,用户需为每个chip创建一个配置文件。 ​ 例如,若用户配置8张Atlas 300 3000卡,期望将320路视频转码部署在全部的Atlas 300卡上,由于每张Atlas 300卡包含4个chip,共有32个chip,因此共需32个配置文件,每个配置文件配置10路视频流。配置文件需以cfg0.ini、cfg1.ini、cfg2.ini......cfg31.ini连续命名,并保存于src/config目录下。每个配置文件的字段说明如下表,用户目前只需修改前5个字段中的内容: | 字段 | 类型 | 说明 | | ------------------- | ------ | ---------------------------------------------------------------------------- | | chip_id | 数字 | 配置文件对应的chip(device) id | | channel_num | 数字 | 每个chip上运行的视频流路数 | | output_video_format | 数字 | 输出视频格式,目前支持D1(设置0),CIF(设置1)模式 | | video# | 字符串 | 输入视频流地址,有多路时通过#序号区分,必须确保路数与channel_num一致 | | stream# | 字符串 | 输出视频流地址,有多路时通过#序号区分,必须确保路数与channel_num一致 | | venc_control_bitrate_type | 数字 | 编码模式,VBR:1, CBR:2 | | venc_frame_rate | 数字 | 视频源帧率,范围为[1, 240]的整数。 | | venc_bit_rate | 数字 | 控制码率字段, 单位为kbps,取值范围为[10, 28672]的整数。 | | graph_id | 数字 | 预设graph ID,默认为10000,用户不应修改此字段 | | src_engine_id | 数字 | 预设拉流引擎ID,默认为1000,用户不应修改此字段 | | dest_engine_id | 数字 | 预设推流引擎ID,默认为4000,用户不应修改此字段 | | graph_path | 字符串 | 预设graph配置文件路径,默认为../src/config/graph.prototxt,用户不应修改此字段| #### 3.执行 由于Atlas 300安全限制,执行本demo的Linux用户必须属于HwHiAiUser组。运行前,请确保当前用户已切换到HwHiAiUser组。 进入编译时自动创建的bin目录,并带参数执行run.sh脚本,参数为使用的chip个数,需和用户配置文件个数相同,例如有32个配置文件时,执行以下命令: ``` cd bin ./run.sh 32 ```