Jetson Linux API 参考文档

32.7.4 版本
14_multivideo_decode (多视频解码)

概述

multivideo_decode 示例演示了并行解码多个视频流。它提供了“文件写入”(可选)或“视频渲染”解码数据的选项。目前,该应用程序最多可以并行解码 128 个视频流。

视频渲染目前已禁用。您必须指定 --disable-rendering 命令行选项以避免使用此功能。

命令行选项 -o 是可选的。如果用户想要转储输出文件,请使用它。

支持的视频格式有

  • H.264
  • H.265
  • VP8
  • VP9
  • MPEG4
  • MPEG2


构建和运行

前提条件

  • 您已按照构建和运行中的步骤 1-3 进行操作。
  • 如果您是从主机 Linux PC (x86) 构建,则您已按照构建和运行中的步骤 4 进行操作。

构建步骤

  • 输入
     $ cd /usr/src/jetson_multimedia_api/samples/14_multivideo_decode
     $ make
    

运行步骤

  • 输入
     $ ./multivideo_decode num_files <number_of_files> <file_name1> <in-format1> -o <out_filename1> <file_name2> <in-format2> -o <out_filename2> --disable-rendering [options]
    

查看支持的选项

输入

   $ ./multivideo_decode --help

示例

   $ ./multivideo_decode num_files 2 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --disable-rendering


流程

下图显示了此示例的流程。

  • 输出平面接收比特流格式的输入,并将其传递到 解码器 进行解码。
  • 解码后的帧以 YUV 格式传输到捕获平面
  • 应用程序将解码后的 YUV 帧传输到 EglRenderer 以进行渲染。
  • 对于输出平面,应用程序支持 MMAP 和 USRPTR 内存类型。对于捕获平面,它支持 MMAP 和 DMABUF 内存类型。
  • 应用程序还可以从捕获平面转储文件。


主要结构和类

该示例使用以下主要结构和类。

元素描述
NvVideoDecoder 包含所有视频解码相关的元素和函数。
dec_capture_loop指向解码捕获循环的线程处理程序的指针。

NvVideoDecoder 类封装了所有视频解码相关的元素和函数。示例中使用的主要成员是

成员描述
output_plane 指定 V4L2 输出平面。
capture_plane 指定 V4L2 捕获平面。
createVideoDecoder 用于创建视频解码对象的静态函数。
subscribeEvent 订阅事件。
setOutputPlaneFormat 设置输出平面格式。
setCapturePlaneFormat 设置捕获平面格式。
dqEvent 出队 V4L2 设备报告的事件。
isInError 检查是否处于错误状态。

NvVideoDecoder 类包含两个关键元素:output_planecapture_plane。这些对象派生自 NvV4l2ElementPlane 类类型。示例使用以下主要成员

元素描述
setupPlane 设置 V4L2 元素的平面。
deinitPlane 销毁 V4L2 元素的平面。
setStreamStatus 启动/停止流。
setDQThreadCallback 设置出队缓冲区线程的回调函数。
startDQThread 启动出队缓冲区的线程。
stopDQThread 停止出队缓冲区的线程。
qBuffer 排队 V4L2 缓冲区。
dqBuffer 出队 V4L2 缓冲区。
getNumBuffers 获取 V4L2 缓冲区的数量。
. All rights reserved.