multivideo_decode 示例演示了并行解码多个视频流。它提供了“文件写入”(可选)或“视频渲染”解码数据的选项。目前,该应用程序最多可以并行解码 128 个视频流。
视频渲染目前已禁用。您必须指定 --disable-rendering
命令行选项以避免使用此功能。
命令行选项 -o
是可选的。如果用户想要转储输出文件,请使用它。
支持的视频格式有
$ 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
下图显示了此示例的流程。
该示例使用以下主要结构和类。
元素 | 描述 |
---|---|
NvVideoDecoder | 包含所有视频解码相关的元素和函数。 |
dec_capture_loop | 指向解码捕获循环的线程处理程序的指针。 |
NvVideoDecoder 类封装了所有视频解码相关的元素和函数。示例中使用的主要成员是
成员 | 描述 |
---|---|
output_plane | 指定 V4L2 输出平面。 |
capture_plane | 指定 V4L2 捕获平面。 |
createVideoDecoder | 用于创建视频解码对象的静态函数。 |
subscribeEvent | 订阅事件。 |
setOutputPlaneFormat | 设置输出平面格式。 |
setCapturePlaneFormat | 设置捕获平面格式。 |
dqEvent | 出队 V4L2 设备报告的事件。 |
isInError | 检查是否处于错误状态。 |
NvVideoDecoder 类包含两个关键元素:output_plane
和 capture_plane
。这些对象派生自 NvV4l2ElementPlane 类类型。示例使用以下主要成员
元素 | 描述 |
---|---|
setupPlane | 设置 V4L2 元素的平面。 |
deinitPlane | 销毁 V4L2 元素的平面。 |
setStreamStatus | 启动/停止流。 |
setDQThreadCallback | 设置出队缓冲区线程的回调函数。 |
startDQThread | 启动出队缓冲区的线程。 |
stopDQThread | 停止出队缓冲区的线程。 |
qBuffer | 排队 V4L2 缓冲区。 |
dqBuffer | 出队 V4L2 缓冲区。 |
getNumBuffers | 获取 V4L2 缓冲区的数量。 |