通过构造VideoDecoder类实例可实现视频解码功能,解码功能配置项及各项约束与支持情况请参考“VideoDecodeConfig类”章节。
视频解码支持自定义输出数据格式,通过自定义回调函数传入解码功能配置项,方便用户解码后的数据,详情可参考“VdecCallBacker”章节。
视频解码接口说明请参考VideoDecoder。
首先根据需求定义需要的输出数据组合方式,根据组合方式参考VdecCallBacker定义回调函数传入解码功能配置项,然后实例化VideoDecoder类,最后调用decode成员函数完成解码,获取数据。
视频解码接口调用流程参考如下:
Vision SDK提供VideoDecoder类进行视频解码,关键步骤说明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import os import numpy as np import time from mindx.sdk import base from mindx.sdk.base import Image, ImageProcessor from mindx.sdk.base import VideoDecoder, VideoDecodeConfig, VdecCallBacker decoded_data_list = [] # 视频解码回调函数 def vdec_callback(decodedImage, channelId, frameId): # 解码完成的Image类存入列表中 decoded_data_list.append(decodedImage) def process(): # 初始化VdecCallBacker类并注册回调函数 vdecCallBacker = VdecCallBacker() vdecCallBacker.registerVdecCallBack(vdec_callback) # 初始化VideoDecodeConfig类并设置参数 vdecConfig = VideoDecodeConfig() vdecConfig.skipInterval = 0 vdecConfig.inputVideoFormat = base.h264_main_level vdecConfig.outputImageFormat = base.nv12 vdecConfig.width = 1920 vdecConfig.height = 1080 # 初始化VideoDecoder videoDecoder = VideoDecoder(vdecConfig, vdecCallBacker, device_id, channel_id) # 获取需解码视频帧文件名 srcDataList = ["frame-{}.data".format(i) for i in range(100)] # 循环取帧解码 for i, fileName in enumerate(srcDataList): # 读取视频帧数据存入file file = np.fromfile(fileName, dtype='uint8') # 视频帧数据解码 videoDecoder.decode(file, i) if __name__ == "__main__": base.mx_init() # 资源初始化 process() base.mx_deinit() # 资源去初始化 |