CN113727114A - 一种可转码的视频解码方法 - Google Patents

一种可转码的视频解码方法 Download PDF

Info

Publication number
CN113727114A
CN113727114A CN202110824899.9A CN202110824899A CN113727114A CN 113727114 A CN113727114 A CN 113727114A CN 202110824899 A CN202110824899 A CN 202110824899A CN 113727114 A CN113727114 A CN 113727114A
Authority
CN
China
Prior art keywords
image
address
decoding
data
calling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110824899.9A
Other languages
English (en)
Other versions
CN113727114B (zh
Inventor
高娟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin Jinhang Computing Technology Research Institute
Original Assignee
Tianjin Jinhang Computing Technology Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianjin Jinhang Computing Technology Research Institute filed Critical Tianjin Jinhang Computing Technology Research Institute
Priority to CN202110824899.9A priority Critical patent/CN113727114B/zh
Publication of CN113727114A publication Critical patent/CN113727114A/zh
Application granted granted Critical
Publication of CN113727114B publication Critical patent/CN113727114B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/40Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44008Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving operations for analysing video streams, e.g. detecting features or characteristics in the video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440218Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/45Management operations performed by the client for facilitating the reception of or the interaction with the content or administrating data related to the end-user or to the client device itself, e.g. learning user preferences for recommending movies, resolving scheduling conflicts
    • H04N21/454Content or additional data filtering, e.g. blocking advertisements
    • H04N21/4545Input to filtering algorithms, e.g. filtering a region of the image

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Databases & Information Systems (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明一种可转码的视频解码方法。首先,移植ffmpeg到海思平台,对ffmpeg进行源码修改使其适配海思芯片。其次,启动ffmpeg的动态库对网络传输的数据进行参数帧和图像帧的组合,获取完整图像信息,然后,建立过滤机制,动态筛选错误帧,分析编码规律,调整错误数据包内数据帧顺序,将可解码的数据包再传送给海思芯片的硬解码模块。最后,创建获取图像线程,从解码通道获取已解码的图像数据,调用芯片的视频图形子系统完成格式转化,通过网络发送目标图像给应用层,从而完整解码过程。

Description

一种可转码的视频解码方法
技术领域
本发明属于linux系统下的视频解码技术,特别是一种可转码的视频解码方法。
背景技术
Hi3559AV100是专业的8K Ultra HD Mobile Camera SOC,它提供了8K30/4K120广播级图像质量的数字视频录制,支持多路Sensor输入,支持H.265编码输出或影视级的RAW数据输出,并集成高性能ISP处理,同时采用先进低功耗工艺和低功耗架构设计,为用户提供了卓越的图像处理能力。
Hi3559AV100支持业界领先的多路4K Sensor输入,多路ISP图像处理,支持HDR10高动态范围技术标准,并支持多路全景硬件拼接。在支持8K30/4K120视频录制下,Hi3559AV100提供硬化的6-Dof数字防抖,减少了对机械云台的依赖。
但是Hi3559AV100属于硬解码范畴,在协议帧不完全符合解码协议,或者错误帧比较多的情况下,解码效率比较低下或者不能解码,并且对于带有参数帧的图像信息,硬解码模块无法提取参数信息。另外,由于应用层显示需求,还需要对解码后的图像进行格式转化。本发明采用ffmpeg解码库获取原始帧中参数帧信息和数据帧信息,获取完整图像帧数据包,同时建立过滤机制筛选出错误帧,调整数据包内的帧顺序,传输可解码的完整数据包给硬解码模块,完成解码功能。使用硬解码模块内的视频图形子系统对解码图像进行格式转化,从而获取符合应用层需求的图像数据。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种可转码的视频解码方法,目的是在linux平台下,解决视频解码问题。
本发明的技术解决方案是:
第一方面,一种可转码的视频解码方法,包括步骤如下:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)创建网络接收任务接收主机传送的原始压缩数据;
3)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取含有带有参数的图像数据包;
4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;
5)获取解码模块内的解码图像;
6)使用硬解码模块的视频图形子系统以任务形式对解码图像进行格式转化,通过网络将目标图像发送给主机。
可选地,步骤6)所述对解码图像进行格式转化,通过网络将目标图像发送给主机的方法,具体为:
61)根据解码图像宽度和高度、像素格式、压缩模式获取图像缓存配置参数stcalConfig;
62)根据配置参数stcalConfig,在硬解码模块的视频缓存池处理模块中获取一个视频缓存块VB,如果获取成功继续下一步,获取失败则释放硬解码通道内的图像,返回步骤5);
63)设置格式转化任务输出图像的属性,计算输出图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址:
64)启动vgs一个工作任务job,如果启动失败进入下一步;如果启动成功,则进行步骤66);
65)调用库函数HI_MPI_SYS_Munmap对u64HeaderVirAddr[0]进行反映射,映射的地址大小为u32VBSize,调用HI_MPI_VDEC_ReleaseFrame释放解码通道内的解码的图像,调用HI_MPI_VB_ReleaseBlock释放已申请的视频缓存块VB,调转到步骤5);
66)调用HI_MPI_VGS_AddScaleTask往启动的job里面添加一个缩放任务,该任务参数为步骤61)所述图像缓存配置参数stcalConfig、步骤62)所述视频缓存块VB、步骤63)所述图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址,如果启动失败则调用HI_MPI_VGS_CancelJob取消已经提交的job并跳转到步骤65),如果启动成功则下一步;
67)调用HI_MPI_VGS_EndJob结束提交的job,如果调用成功则进入下一步,如果失败则调用HI_MPI_VGS_CancelJob并取消已经提交的job并跳转到步骤65);
68)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的时间戳u64PTS是否一致,如果一致则进入下一步;如果不一致则不需要发送该图像;待接收到新的解码图像,返回步骤61);
69)调用HI_MPI_VPSS_SendFrame获取已经转成灰度格式的解码图像;
610)创建网络发送任务,将步骤69)中的内存地址保存的数据发送到主机。
可选地,步骤63)所述计算输出图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址的方法,具体为:
631)将视频缓存块的物理地址作为输出图像的压缩头物理首地址u64HeaderPhyAddr[0];
632)将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]与配置参数stcalConfig中图像信息头大小u32HeadYSize的和作为输出图像的压缩头物理数组中第二个元素的值u64HeaderPhyAddr[1];
633)调用库函数HI_MPI_SYS_Mmap将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]映射成虚拟地址u64HeaderVirAddr[0],映射地址大小为配置参数stcalConfig的缓存块大小u32VBSize;
634)将虚拟地址u64HeaderVirAddr[0]与配置参数stcalConfig中图像信息头u32HeadYSize的和作为虚拟地址数据中第二元素的值u64HeaderVirAddr[1];
635)将输出图像的压缩头物理地址u64HeaderPhyAddr[0]作为图像物理地址的首地址u64PhyAddr[0];
636)将u64PhyAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为图像物理地址数组中的第二个元素的值u64PhyAddr[1];
637)将u64HeaderVirAddr[0]作为输出图像的虚拟首地址u64VirAddr[0];
638)将u64VirAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为输出图像的虚拟数组中第二个元素的值u64VirAddr[1]。
可选地,步骤1)所述的配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台,具体为:
11)配置ffmpeg的编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数。
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能;
14)执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)将动态库拷贝到解码板卡的/usr/lib路径下。
可选地,步骤2)所述创建网络接收任务接收主机传送的原始压缩数据,具体为:
21)获取配置文件中接收ip地址和端口。
22)以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的长度是否大于零,如果大于零则进行下一步,否则回到步骤23);
25)判断协议帧头是否符合协议要求,如不符合就丢弃该帧;如果符合则将图像帧存入数据接收区。
可选地,步骤3)所述创建ffmpeg获取数据包线程的方法,具体为:
321)获取从网络读取的图像数据数组首地址指针bufPtr和长度bufLen;
322)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待网络下次发送数据;
323)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程,等待下次网络传送的图像数据数组;
324)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数等于图像帧数据包长度ret。
325)将本次分割的图像完整数据包放到待解码队列中。
可选地,步骤5)所述获取解码模块内的解码图像,具体为:
51)创建获取解码图像线程;
52)进入图像获取循环;
53)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
54)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址。如果失败则跳转到步骤53),如果成功则进入下一步;
55)将复位标志resetFlag置1。
第二方面,一种处理装置,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行第一方面所述方法。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现第一方面所述的方法。
一种计算机程序产品,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行第一方面所述的方法。
本发明与现有技术相比的有益效果是:
本发明在系统为linux的应用场景下,针对海思Hi3559AV100芯片特点,并结合硬解码模块属性和软解码特点,利设计实现了一种linux系统下可转码的视频解码方案设计方法。本发明为系统为linux下,首先使用FFMPEG软解码库对网络接收的数据进行数据分析,有效得获取压缩帧参数信息和图像信息。同时针对协议类型建立过滤机制筛选错误帧,传送可解码的数据包给海思Hi3559AV100芯片硬解码模块,从而完成解码过程,同时使用硬解码模块对解码后图像进行目标格式转化,满足应用层显示需求。
附图说明
图1为本发明可转码的视频解码方案实现流程图。
具体实施方式
结合图1,为了解决linux系统下视频解码问题,我们采用基于过滤机制的ffmpeg软解码和海思芯片模块硬解码结合的方法。下面我们对本发明的内容作进一步描述。
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
首先,配置ffmpeg编译属性。然后,修改ffmpeg源码,使其具备返回参数帧的功能,交叉编译ffmpeg源码。最后,获取ffmpeg解码动态库拷贝到海思开发板。
2)创建网络接收任务接收主机传送的原始压缩数据;
首先,根据配置文件获取传输中的ip和端口号信息。然后,阻塞等待网络发送的图像数据。
3)创建获取数据包线程,使用ffmpeg动态库获取含有带有参数的图像数据包;
首先,初始化ffmpeg使用环境。其次,创建获取数据包线程。然后,使用ffmpeg动态库获取压缩图像的含参数帧的完整数据包。
4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;
建立过滤机制,分析数据包内的帧个数和帧类型,针对压缩原理和图像类型分类保存不同图像需要的协议帧个数和帧类型。同时,根据错误类型对图像数据进行再处理,从而组合可解码的数据包给硬解码模块。
5)获取解码模块内的解码图像;
建立获取解码图像任务,实时读取解码器工作状态,调用库函数获取解码通道内解码图像。
6)使用硬解码模块的视频图形子系统以任务形式对解码图像进行格式转化,通过网络将目标图像发送给主机。使用硬解码模块的视频图形子系统对解码图像进行再处理,创建转化线程任务,将解码图像转化成应用层需要的目标格式图像,通过网络发送任务将解码图像数据发送给主机。
通过以上步骤,可以实现linux系统下的视频解码功能。
方法过程具体如下:
1)移植ffmpeg到海思平台
11)配置ffmpeg的编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数。
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:
131)获取decode_nal_sei_prefix函数中的参数size,将size赋值给sei_len;
132)判断数据大小参数size是否小于或等于图像帧的参数帧大小SEI_BUF_SIZE,如果满足条件则进行步骤133);若不满足条件,则令参数帧长度sei_buf的数据为空,并直接进入步骤134);
133)从decode_nal_sei_prefix函数中拷贝上下文参数数组gb内的数据到参数帧长度sei_buf,拷贝数据的长度等于步骤131)中数据大小参数size;拷贝的sei_buf的数组下标i为gb数组的索引index除以8;然后进入步骤134);
134)将上下文参数数组gb内的数据进行向前移位处理,移位处理的数位等于数据大小参数size的八倍。
14)执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)将动态库拷贝到解码板卡的/usr/lib路径下。
2)创建网络接收线程接收主机发送的原始压缩图像数据
21)获取配置文件中接收ip地址和端口。
22)以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的长度是否大于零,如果大于零则进行下一步,否则回到步骤23);
25)判断协议帧头是否符合协议要求,如不符合就丢弃该帧;如果符合则将图像帧存入数据接收区。
3)使用ffmpeg动态库获取含参数帧的完整压缩图像数据包;
31)初始化解码库使用环境
首先,设置解码器类型,采用HEVC(h265)类型的解码器。然后,初始化解码器上下文环境,动态申请图像帧存储空间。
32)创建ffmpeg获取数据包线程,线程具体流程如下:
321)获取从网络读取的图像数据数组首地址指针bufPtr和长度bufLen;
322)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待网络下次发送数据;
323)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程,等待下次网络传送的图像数据数组;
324)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数等于图像帧数据包长度ret。
325)将本次分割的图像完整数据包放到待解码队列中。
4)对完整数据包进行过滤并发送给解码模块
建立过滤机制,分析数据包内的帧个数和帧类型,针对压缩原理和图像类型分类保存不同图像需要的协议帧个数和帧类型。同时,根据错误类型对图像数据进行再处理,从而组合可解码的数据包给硬解码模块。具体步骤如下:
41)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在该通道的数据结构变量PsliceNumber;
42)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤41),否则进行下一步;
43)循环遍历本次数据包内的数据,遍历从0到(size-3),size为该数据包的大小,分类判断当前帧是否符合h265协议帧头(即具备连续三个字节为00 00 01),如果符合则进行下一步,如果不符合则跳转到步骤49);
44)判断当前帧是否为P帧或者I帧,如果是,则增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤46);
45)如果当前数据包的temp_PSliceNumber等于2,则再次判断当前slice是否为本数据包第一个slice即p_slice是否为0,如果是,则记录当前数据包ptr内遍历字节所在的位置i,即设置p_size为i,并更新记录slice标志p_slice为1,表示已经存在一个slice;
46)判断当前帧类型是否为SPS,是SPS则置标志top为1;反之,则直接进入48);
47)判断top是否为1,如果是,则继续判断当前帧是否为参数帧(sei帧),如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息(vps,pps,sps帧),记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤48);
48)判断当前通道的图像数据是否需要插入I帧(用insertIDR标识),并且entryFlag为1,如果上述两个条件成立则判断当前帧类型是否为p帧,如果是p帧则将数据包的帧类型字节内容由0x02改成0x26,即改P帧为I帧;反之则直接进入步骤49);
49)继续查看数据包内ptr是否还有其他数据需要遍历查询,如果有就回到步骤43),如果没有就继续下一步;
410)判断当前通道的insertIDR标志和entryFlag是否都为1,如果是则继续下一步,如果不是则进行步骤413);
411)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则下一步,如果不是则丢弃该数据包,退出该数据包的解码过程;待接收到新的图像数据包后返回步骤41);
412)将当前数据包内完整图像帧大小为size的数据,拷贝到Idr_Buf中,拷贝的位置从Idr_Buf的Idr_Size开始,将size的大小增大Idr_Size(即当前数据包大小需要插入之前保存的帧头信息),再次将Idr_Buf的数据拷贝到ptr中,拷贝的数据大小为size;
413)判断当前temp_PSliceNumber是否等于本通道图像类型应该具备的PSliceNumber,如果是则进行下一步,如果不是则进行步骤415);
414)判断p_slice是否为1,如果是则将p_size赋值给size(即只取),清零p_slice;反之,则直接进入步骤415);
415)将当前通道的图像参数帧大小记录在seiSize中,同时拷贝当前图像的参数帧到当前通道的待解码图像数据结构体decodeArray中,将参数个数seiCount作为待解码图像的时间戳u64PTS;
416)查询当前通道的解码状态,并把状态结构体中的已解码图像帧数保存到u32DecodeStreamFrames;
417)获取当前通道待解码图像数据的首地址ptr和数据长度size,时间戳u64PTS,并以流形式发送到解码模块;
418)循环查询解码器的工作状态,直至获得新的解码图像;
419)调用海思库函数查询解码器通道状态;
420)判断通道内剩余需解码的字节数是否为0,如果是则进去下一步,如果不是则延时1ms跳转到步骤419);
421)解码器通道已经解码后的图像帧数是否与之前保存的u32DecodeStreamFrames不相等,或者该通道的insertIDR(需要插入I帧)标识为1,如果是进入下一步,如果不是则到步骤423);
422)将insrtIDR标识清零,增加参数帧的个数(seiCount增加1),判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤426);反之,则直接进入下一步;
423)复位解码器,进入步骤424);
424)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤423);
425)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,并退出步骤423)进入的复位循环,进入下一步;
426)退出步骤416)所进入的循环,结束本次过滤过程;
5)获取解码器通道内的图像
建立获取解码图像任务,实时读取解码器工作状态,调用库函数获取解码通道内解码图像。具体步骤如下:
51)创建获取解码图像线程;
52)进入图像获取循环;
53)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
54)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址。如果失败则跳转到步骤53),如果成功则进入下一步;
55)将复位标志resetFlag置1。
6)将解码图像转化为目标格式图像并发送给主机
使用硬解码模块的视频图形子系统(vgs)对解码图像进行再处理,创建转化线程任务,将解码图像转化成应用层需要的目标格式图像,通过网络发送任务将解码图像数据发送给主机。具体步骤如下:
61)根据解码图像宽度和高度、像素格式、压缩模式获取图像缓存配置参数stcalConfig;
62)根据配置参数stcalConfig,在硬解码模块的视频缓存池处理模块中获取一个视频缓存块VB,如果获取成功继续下一步,获取失败则释放硬解码通道内的图像,调转到从硬解码通道内获取图像,返回步骤5);
63)设置格式转化任务输出图像的属性,计算输出图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址:
631)将视频缓存块的物理地址作为输出图像的压缩头物理首地址(u64HeaderPhyAddr[0]);
632)将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]与配置参数stcalConfig中图像信息头大小u32HeadYSize(表示像素格式YUV中Y分量的值,即只取灰度值,可根据应用层需求调整该参数)的和作为输出图像的压缩头物理数组中第二个元素的值u64HeaderPhyAddr[1];
633)调用库函数HI_MPI_SYS_Mmap将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]映射成虚拟地址u64HeaderVirAddr[0],映射地址大小为配置参数stcalConfig的缓存块大小u32VBSize;
634)将虚拟地址u64HeaderVirAddr[0]与配置参数stcalConfig中图像信息头u32HeadYSize的和作为虚拟地址数据中第二元素的值u64HeaderVirAddr[1];
635)将输出图像的压缩头物理地址u64HeaderPhyAddr[0]作为图像物理地址的首地址u64PhyAddr[0];
636)将u64PhyAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为图像物理地址数组中的第二个元素的值u64PhyAddr[1];
637)将u64HeaderVirAddr[0]作为输出图像的虚拟首地址u64VirAddr[0];
638)将u64VirAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为输出图像的虚拟数组中第二个元素的值u64VirAddr[1];
64)启动vgs一个工作任务job,如果启动失败进入下一步;如果启动成功,则进行步骤66);
65)调用库函数HI_MPI_SYS_Munmap对u64HeaderVirAddr[0]进行反映射,映射的地址大小为u32VBSize,调用HI_MPI_VDEC_ReleaseFrame释放解码通道内的解码的图像,调用HI_MPI_VB_ReleaseBlock释放已申请的视频缓存块VB,调转到步骤5)从解码通道内获取图像;
66)调用HI_MPI_VGS_AddScaleTask往启动的job里面添加一个缩放任务,该任务参数为步骤61)所述图像缓存配置参数stcalConfig、步骤62)所述视频缓存块VB、步骤63)所述图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址,如果启动失败则调用HI_MPI_VGS_CancelJob取消已经提交的job并跳转到步骤65),如果启动成功则下一步;
67)调用HI_MPI_VGS_EndJob结束提交的job,如果调用成功则进入下一步,如果失败则调用HI_MPI_VGS_CancelJob并取消已经提交的job并跳转到步骤65);
68)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的时间戳u64PTS是否一致,如果一致则进入下一步;如果不一致则不需要发送该图像;待接收到新的解码图像,返回步骤61);
69)调用HI_MPI_VPSS_SendFrame获取已经转成灰度格式的解码图像;
610)创建网络发送任务,将步骤69)中的内存地址保存的数据发送到主机。
本发明中,步骤1)对板卡进行了解码环境的配置,对其软解码库ffmpeg移植适应海思平台,同时对ffmpeg进行修改,使其返回的图像数据包带有参数帧。步骤2)对原始的压缩数据进行帧头分析,初步过滤不符合协议要求的错误帧。步骤3)为ffmpeg创建使用环境,并指定启动要求的解码器,可针对原始数据进行协议分析。同时,从网络接收的数据区循环获取原始数据,调用库函数获取可组合成带有参数帧的完整图像帧的数据包的长度,从网络接收数据区从剔除该长度并循环反复进行直到数据区没有任何数据。步骤4)建立过滤机制,动态筛选出不符合协议规定的错误帧,分析编码规律,调整数据包图像帧顺序,根据编码器特性动态修改帧类型,使其组合成可解码的图像数据包。同时,实时监控解码器状态,根据当前数据包的需求启动复位解码通道操作,使其解码模块持续进行工作。步骤5)创建获取数据线程,根据复位状态启动库函数获取解码通道内的图像,并在数据后修改其复位状态使得步骤4)能实时更新解码器工作状态,通过网络发送任务将解码图像发送到主机。步骤6)利用硬解码模块内的视频图形子系统对已解码的图像进行目标格式转化,已任务形式高效地完成了目标图像的获取,从而满足应用层显示需求。
利用上述技术方案,采用上述操作步骤,本发明可以实现linux系统下视频解码和传输问题,该方法已经经过了算法验证,并进行了实验检验。结果标明,该方案可以为解决图像解码问题,采用软解码方法,组成包含图像帧和参数帧的完整数据包,采用过滤机制,动态筛选不符合协议类型的错误帧,获取可解码的图像数据包,再使用芯片的硬解码模块完成解码和格式转化过程,有效减少解码时间。
本发明说明书中未作详细描述的内容属本领域专业技术人员的公知技术。

Claims (10)

1.一种可转码的视频解码方法,其特征在于,包括步骤如下:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)创建网络接收任务接收主机传送的原始压缩数据;
3)创建ffmpeg获取数据包线程,使用ffmpeg动态库获取含有带有参数的图像数据包;
4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;
5)获取硬解码模块内的解码图像;
6)使用硬解码模块的视频图形子系统以任务形式对解码图像进行格式转化,通过网络将目标图像发送给主机。
2.根据权利要求1所述的一种可转码的视频解码方法,其特征在于,步骤6)所述对解码图像进行格式转化,通过网络将目标图像发送给主机的方法,具体为:
61)根据解码图像宽度和高度、像素格式、压缩模式获取图像缓存配置参数stcalConfig;
62)根据配置参数stcalConfig,在硬解码模块的视频缓存池处理模块中获取一个视频缓存块VB,如果获取成功继续下一步,获取失败则释放硬解码通道内的图像,返回步骤5);
63)设置格式转化任务输出图像的属性,计算输出图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址:
64)启动vgs一个工作任务job,如果启动失败进入下一步;如果启动成功,则进行步骤66);
65)调用库函数HI_MPI_SYS_Munmap对u64HeaderVirAddr[0]进行反映射,映射的地址大小为u32VBSize,调用HI_MPI_VDEC_ReleaseFrame释放解码通道内的解码的图像,调用HI_MPI_VB_ReleaseBlock释放已申请的视频缓存块VB,调转到步骤5);
66)调用HI_MPI_VGS_AddScaleTask往启动的job里面添加一个缩放任务,该任务参数为步骤61)所述图像缓存配置参数stcalConfig、步骤62)所述视频缓存块VB、步骤63)所述图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址,如果启动失败则调用HI_MPI_VGS_CancelJob取消已经提交的job并跳转到步骤65),如果启动成功则下一步;
67)调用HI_MPI_VGS_EndJob结束提交的job,如果调用成功则进入下一步,如果失败则调用HI_MPI_VGS_CancelJob并取消已经提交的job并跳转到步骤65);
68)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的时间戳u64PTS是否一致,如果一致则进入下一步;如果不一致则不需要发送该图像;待接收到新的解码图像,返回步骤61);
69)调用HI_MPI_VPSS_SendFrame获取已经转成灰度格式的解码图像;
610)创建网络发送任务,将步骤69)中的内存地址保存的数据发送到主机。
3.根据权利要求2所述的一种可转码的视频解码方法,其特征在于,步骤63)所述计算输出图像压缩头的物理地址和虚拟地址,以及图像的物理地址和虚拟地址的方法,具体为:
631)将视频缓存块的物理地址作为输出图像的压缩头物理首地址u64HeaderPhyAddr[0];
632)将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]与配置参数stcalConfig中图像信息头大小u32HeadYSize的和作为输出图像的压缩头物理数组中第二个元素的值u64HeaderPhyAddr[1];
633)调用库函数HI_MPI_SYS_Mmap将输出图像的压缩头物理首地址u64HeaderPhyAddr[0]映射成虚拟地址u64HeaderVirAddr[0],映射地址大小为配置参数stcalConfig的缓存块大小u32VBSize;
634)将虚拟地址u64HeaderVirAddr[0]与配置参数stcalConfig中图像信息头u32HeadYSize的和作为虚拟地址数据中第二元素的值u64HeaderVirAddr[1];
635)将输出图像的压缩头物理地址u64HeaderPhyAddr[0]作为图像物理地址的首地址u64PhyAddr[0];
636)将u64PhyAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为图像物理地址数组中的第二个元素的值u64PhyAddr[1];
637)将u64HeaderVirAddr[0]作为输出图像的虚拟首地址u64VirAddr[0];
638)将u64VirAddr[0]与stcalConfig中图像主体大小u32MainYSize的和作为输出图像的虚拟数组中第二个元素的值u64VirAddr[1]。
4.根据权利要求2所述的一种可转码的视频解码方法,其特征在于,步骤1)所述的配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台,具体为:
11)配置ffmpeg的编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能;
14)执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)将动态库拷贝到解码板卡的/usr/lib路径下。
5.根据权利要求4所述的一种可转码的视频解码方法,其特征在于,步骤2)所述创建网络接收任务接收主机传送的原始压缩数据,具体为:
21)获取配置文件中接收ip地址和端口;
22)以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的长度是否大于零,如果大于零则进行下一步,否则回到步骤23);
25)判断协议帧头是否符合协议要求,如不符合就丢弃该帧;如果符合则将图像帧存入数据接收区。
6.根据权利要求5所述的一种可转码的视频解码方法,其特征在于,步骤3)所述创建ffmpeg获取数据包线程的方法,具体为:
321)获取从网络读取的图像数据数组首地址指针bufPtr和长度bufLen;
322)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待网络下次发送数据;
323)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则记录继续下一步,如果不是则退出本次解码过程,等待下次网络传送的图像数据数组;
324)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数等于图像帧数据包长度ret;
325)将本次分割的图像完整数据包放到待解码队列中。
7.根据权利要求6所述的一种可转码的视频解码方法,其特征在于,步骤5)所述获取解码模块内的解码图像,具体为:
51)创建获取解码图像线程;
52)进入图像获取循环;
53)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
54)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址;如果失败则跳转到步骤53),如果成功则进入下一步;
55)将复位标志resetFlag置1。
8.一种处理装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行权利要求2至7中任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现权利要求2至7中任一项所述的方法。
10.一种计算机程序产品,其特征在于,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行权利要求2至7中任一项所述的方法。
CN202110824899.9A 2021-07-21 2021-07-21 一种可转码的视频解码方法 Active CN113727114B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110824899.9A CN113727114B (zh) 2021-07-21 2021-07-21 一种可转码的视频解码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110824899.9A CN113727114B (zh) 2021-07-21 2021-07-21 一种可转码的视频解码方法

Publications (2)

Publication Number Publication Date
CN113727114A true CN113727114A (zh) 2021-11-30
CN113727114B CN113727114B (zh) 2024-04-26

Family

ID=78673606

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110824899.9A Active CN113727114B (zh) 2021-07-21 2021-07-21 一种可转码的视频解码方法

Country Status (1)

Country Link
CN (1) CN113727114B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115988230A (zh) * 2022-12-15 2023-04-18 北极星云空间技术股份有限公司 基于gop转码和虚拟文件实现低延迟hls直播的方法
CN116546273A (zh) * 2023-06-27 2023-08-04 北京麟卓信息科技有限公司 一种基于多解码器动态融合的视频播放优化方法
CN116860323A (zh) * 2023-09-05 2023-10-10 之江实验室 一种基于p4的编译及fpga配置方法
CN117255222A (zh) * 2023-11-20 2023-12-19 上海科江电子信息技术有限公司 一种数字电视监测的方法、系统及应用

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050047666A1 (en) * 2003-08-21 2005-03-03 Mitchell Joan L. Browsing JPEG images using MPEG hardware chips
US6975324B1 (en) * 1999-11-09 2005-12-13 Broadcom Corporation Video and graphics system with a video transport processor
CN101017566A (zh) * 2006-10-24 2007-08-15 图诚科技股份有限公司 用于几何图形处理的系统与方法
CN102404624A (zh) * 2011-11-07 2012-04-04 深圳市佳创视讯技术股份有限公司 一种数字机顶盒用支持硬件解码的全格式媒体播放器
CN103702124A (zh) * 2012-09-27 2014-04-02 深圳市快播科技有限公司 一种转码加速方法和转码器
CN106131564A (zh) * 2016-07-28 2016-11-16 广东西奥物联网科技股份有限公司 一种对摄像机视频流进行处理的方法及装置
CN108235096A (zh) * 2018-01-18 2018-06-29 湖南快乐阳光互动娱乐传媒有限公司 移动终端硬解码智能切换软解码播放视频的方法
CN108924491A (zh) * 2018-07-04 2018-11-30 深圳市商汤科技有限公司 视频流处理方法及装置、电子设备和存储介质
CN112261460A (zh) * 2020-10-19 2021-01-22 天津津航计算技术研究所 一种基于pcie的多路视频解码方案设计方法
CN112565627A (zh) * 2020-11-30 2021-03-26 天津津航计算技术研究所 一种基于位图叠加的多路视频集中显示设计方法
CN113038182A (zh) * 2021-03-25 2021-06-25 北京中电兴发科技有限公司 一种通过硬件编解码技术实现视频安全传输的装置及方法
CN113132686A (zh) * 2021-04-13 2021-07-16 中标软件有限公司 一种基于国产linux系统的局域网视频监控的实现方法

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6975324B1 (en) * 1999-11-09 2005-12-13 Broadcom Corporation Video and graphics system with a video transport processor
US20050047666A1 (en) * 2003-08-21 2005-03-03 Mitchell Joan L. Browsing JPEG images using MPEG hardware chips
CN101017566A (zh) * 2006-10-24 2007-08-15 图诚科技股份有限公司 用于几何图形处理的系统与方法
CN102404624A (zh) * 2011-11-07 2012-04-04 深圳市佳创视讯技术股份有限公司 一种数字机顶盒用支持硬件解码的全格式媒体播放器
CN103702124A (zh) * 2012-09-27 2014-04-02 深圳市快播科技有限公司 一种转码加速方法和转码器
CN106131564A (zh) * 2016-07-28 2016-11-16 广东西奥物联网科技股份有限公司 一种对摄像机视频流进行处理的方法及装置
CN108235096A (zh) * 2018-01-18 2018-06-29 湖南快乐阳光互动娱乐传媒有限公司 移动终端硬解码智能切换软解码播放视频的方法
CN108924491A (zh) * 2018-07-04 2018-11-30 深圳市商汤科技有限公司 视频流处理方法及装置、电子设备和存储介质
CN112261460A (zh) * 2020-10-19 2021-01-22 天津津航计算技术研究所 一种基于pcie的多路视频解码方案设计方法
CN112565627A (zh) * 2020-11-30 2021-03-26 天津津航计算技术研究所 一种基于位图叠加的多路视频集中显示设计方法
CN113038182A (zh) * 2021-03-25 2021-06-25 北京中电兴发科技有限公司 一种通过硬件编解码技术实现视频安全传输的装置及方法
CN113132686A (zh) * 2021-04-13 2021-07-16 中标软件有限公司 一种基于国产linux系统的局域网视频监控的实现方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CONG PENG ET AL.: "Architecture of AVS hardware decoding system", 《PROCEEDINGS OF 2004 INTERNATIONAL SYMPOSIUM ON INTELLIGENT MULTIMEDIA, VIDEO AND SPEECH PROCESSING, 2004.》, 6 June 2005 (2005-06-06) *
沈海明: "基于Hi3536的视频解码系统的设计与实现", 《硕士学位论文万方数据库》, 29 September 2018 (2018-09-29) *
陈兴喆: "蓝光3D视频数据包解析及转码", 《中国优秀硕士学位论文全文数据库(电子期刊)》, 15 April 2014 (2014-04-15) *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115988230A (zh) * 2022-12-15 2023-04-18 北极星云空间技术股份有限公司 基于gop转码和虚拟文件实现低延迟hls直播的方法
CN115988230B (zh) * 2022-12-15 2024-04-30 北极星云空间技术股份有限公司 基于gop转码和虚拟文件实现低延迟hls直播的方法
CN116546273A (zh) * 2023-06-27 2023-08-04 北京麟卓信息科技有限公司 一种基于多解码器动态融合的视频播放优化方法
CN116546273B (zh) * 2023-06-27 2023-08-25 北京麟卓信息科技有限公司 一种基于多解码器动态融合的视频播放优化方法
CN116860323A (zh) * 2023-09-05 2023-10-10 之江实验室 一种基于p4的编译及fpga配置方法
CN116860323B (zh) * 2023-09-05 2023-12-22 之江实验室 一种基于p4的编译及fpga配置方法
CN117255222A (zh) * 2023-11-20 2023-12-19 上海科江电子信息技术有限公司 一种数字电视监测的方法、系统及应用

Also Published As

Publication number Publication date
CN113727114B (zh) 2024-04-26

Similar Documents

Publication Publication Date Title
CN113727114B (zh) 一种可转码的视频解码方法
TWI603609B (zh) 簡化視訊隨機存取之限制及單元類型
CN113645490B (zh) 一种软硬结合的多通道视频同步解码方法
JP7444872B2 (ja) メディアデータをメディアファイルにカプセル化するための方法、装置、およびコンピュータプログラム
JP2014504118A (ja) 改善されたnalユニットヘッダ
US10771792B2 (en) Encoding data arrays
CN113711605B (zh) 视频编解码的方法、装置、系统以及计算机可读介质
US20230164371A1 (en) Method, device, and computer program for improving random picture access in video streaming
WO2022116764A1 (zh) 数据处理方法、装置、通信节点和存储介质
US11146799B2 (en) Method and apparatus for decoding video bitstream, method and apparatus for generating video bitstream, storage medium, and electronic device
KR20170065568A (ko) 샘플 메타데이터와 미디어 샘플들의 결합
WO2019128668A1 (zh) 视频码流处理方法、装置、网络设备和可读存储介质
CN113727116B (zh) 基于过滤机制的视频解码方法
CN112291483B (zh) 视频推送方法及系统、电子设备及可读存储介质
CN113727115B (zh) 一种高效可转码的视频解码方法
CN113596469A (zh) 一种软硬结合且高效传输的视频解码方法
KR102163440B1 (ko) 그래픽 처리기를 이용한 비디오 디코딩에 대한 픽처 참조 제어
CN115802045A (zh) 一种数据包过滤方法及基于数据包过滤方法的解码方法
CN113747171B (zh) 一种自恢复的视频解码方法
CN113709518B (zh) 一种基于rtsp协议的视频实时传输模式设计方法
CN113645467B (zh) 一种软硬结合的视频解码方法
CN117241035A (zh) 一种基于编码序号的解码方法
KR102598986B1 (ko) 엣지 서버와 연동하는 ar 스트리밍 장치 및 방법, 시스템
CN113709496B (zh) 基于容错机制的多路视频解码方法
US20230067994A1 (en) Encoding and decoding video data

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant