跳到主要内容
版本:2.8.1

多媒体

zmedia 是一款专业的多媒体 SDK 开发包。本文档将介绍如何获取及编译 zmedia 开发包,并提供示例代码。

进入开发环境

# 进入 zdocker 开发环境,如果已在 zdocker 中,则无需重复进入
zdocker

获取 zmedia 开发包

说明: 获取开发包前,请确认已安装Docker环境。具体操作请参考 快速上手

执行以下命令,获取 zmedia 开发包。


# 创建工作目录
mkdir sdk-workspace
cd sdk-workspace

# 下载安装工具,并给予可执行权限
wget http://developer.zhcomputing.com/artifactory/release/zhihesdk/v2.8.1/build.sh -O build.sh && chmod +x ./build.sh

# 下载 zmedia 开发包, build.sh 会将 SDK 包自动解压到 zmedia 目录
./build.sh -s zmedia-sdk

文件介绍

zmedia 关键文件及介绍如下。

zmedia
├── example/ # 示例代码目录,快速测试资源
│ └── include/ # 子模块头文件
│ └── common/ # 模块测试通用函数
│ └── mod/ # 子模块测试入口文件
│ └── test_source/ # 快速测试资源
├── include/ # 头文件目录
│ └── zmedia/ # 子模块头文件
├── lib/ # 库文件目录
│ └── riscv64-linux-gnu/
│ └── libzmedia.so # 编译库文件(无需拷贝至运行环境,SDK 已包含)
├── share/
│ └── cmake/Modules/ # CMake 工程文件
└── toolchain.cmake # 工具链配置文件
文件名说明
example/包含子模块和相关 pipeline 的实例代码,可参考实现功能及 CMakeLists 编译配置
include/zmedia/包含所有子模块的头文件
lib/包含 zmedia 依赖的编译库文件(无需部署到运行环境)
share/cmake/Modules/包含 CMake 模块文件

编译 zmedia

说明:

  • 目标系统中须预装 zmedia 运行环境,编译后生成可执行程序,可手动上载到目标系统中运行。
  • 项目配置方法,可参考 example/CMakeLists.txt
  1. 创建并进入编译目录。

    cd zmedia
    mkdir build
    cd build
  2. 配置编译工程,指定工具链文件。

    cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ../example
  3. 编译。

    make -j4

    编译结果如下。

    CMakeCache.txt  CMakeFiles  cmake_install.cmake  common  Makefile  mod

    其中可执行文件存放在 mod 目录下。可执行文件列表如下。

    • test_mpi_ai
    • test_mpi_ao
    • test_mpi_rtsp_vdec_venc_rtsp
    • test_mpi_vdec
    • test_mpi_venc
    • test_mpi_vi
    • test_mpi_vi2venc
    • test_mpi_vo
    • test_mpi_vpss
  4. 将可执行文件上传到开发板上。

示例程序

本节编解码示例均在 example 中运行。

视频编码示例

zmedia 支持 H264、H265、JPEG、MJPEG 的视频编码。

示例命令

# 在开发板上运行
test_mpi_venc -i shields_640x480_nv12.yuv -o shields_640x480_nv12_output_dir/ -w 640 -h 480

输入

example/test_source/shields_640x480_nv12.yuv

输出

AVC 裸码流,可使用 ffplay 或者 port play 查看。

shields_640x480_nv12_output_dir/test_0.bin

视频编码输出图片

视频解码示例

提供驱动视频解码硬件工作的 MPI 接口,实现视频解码功能。

示例命令

# 在开发板上运行
test_mpi_vdec -i shield_640x480.h264 -o shield_640x480_output_dir/ -C 8

输入

example/test_source/hield_640x480.h264

输出

YUV 视频数据,分辨率 640 × 480,像素格式 NV12,可使用 ffplay,yuvplayer,或7yuv 查看。

shield_640x480_output_dir/test_0.bin

视频解码输出图片

zmedia 应用开发

说明: 以下代码仅为参考,实际开发中请根据需求进行修改。

组织目录

在开发电脑上创建项目工程目录,参考如下:

hello/
├── CMakeLists.txt
├── src/hello.c
├── include/hello.h

编写 C 代码

#include <stdio.h>

#include <zmedia/zh_defines.h>
#include <zmedia/zh_debug.h>
#include <zmedia/zh_mpi_ai.h>
#include <zmedia/zh_mpi_sys.h>
#include <zmedia/zh_mpi_mb.h>

#include "hello.h"

int main(int argc, const char **argv)
{
// TODO 编写基于 zmedia 的应用代码
ZH_MPI_SYS_Init();

...
ZH_MPI_SYS_Exit();

return 0;
}

编写 CMakeLists.txt 代码

cmake_minimum_required(VERSION 3.10)
project(hello)

# 查找 zmedia 包
find_package(zmedia REQUIRED)

# 定义源文件
file(GLOB srcs
src/*.c
)

# 定义可执行文件
add_executable(hello ${srcs})

# 链接 zmedia 库
target_link_libraries(hello PUBLIC zmedia::zmedia)

编译应用

# 定义 zmedia SDK 路径的环境变量,方便后续使用,根据实际路径定义。
export ZMEDIA_SDK=../zmedia
cmake -DCMAKE_TOOLCHAIN_FILE=$ZMEDIA_SDK/toolchain.cmake ../hello
make

上传应用

将可执行文件 hello 上传至开发板。