1 Star 0 Fork 1

piaomiaoju / MediaCodec

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

EN|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
# License Copyright (c) 2019, Huawei Technologies Co., Ltd All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

暂无描述 展开 收起
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/piaomiaoju/MediaCodec.git
git@gitee.com:piaomiaoju/MediaCodec.git
piaomiaoju
MediaCodec
MediaCodec
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891