CN113727116B - 基于过滤机制的视频解码方法 - Google Patents
基于过滤机制的视频解码方法 Download PDFInfo
- Publication number
- CN113727116B CN113727116B CN202110826187.0A CN202110826187A CN113727116B CN 113727116 B CN113727116 B CN 113727116B CN 202110826187 A CN202110826187 A CN 202110826187A CN 113727116 B CN113727116 B CN 113727116B
- Authority
- CN
- China
- Prior art keywords
- frame
- image
- data
- size
- current
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000001914 filtration Methods 0.000 title claims abstract description 31
- 238000012216 screening Methods 0.000 claims abstract description 3
- 230000006870 function Effects 0.000 claims description 25
- 230000005540 biological transmission Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 8
- 230000011218 segmentation Effects 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 5
- 230000009191 jumping Effects 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 238000013461 design Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/44—Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
- H04N21/44008—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving operations for analysing video streams, e.g. detecting features or characteristics in the video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/45—Management 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/454—Content or additional data filtering, e.g. blocking advertisements
- H04N21/4545—Input to filtering algorithms, e.g. filtering a region of the image
Abstract
本发明属于linux系统下视频解码技术,涉及一种基于过滤机制的视频解码方法。首先,移植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属于硬解码范畴,在协议帧不完全符合解码协议,或者错误帧比较多的情况下,解码效率比较低下或者不能解码,并且对于带有参数帧的图像信息,硬解码模块无法提取参数信息。
发明内容
本发明技术解决的问题是:克服现有技术的不足,提出了一种基于过滤机制的视频解码方法,能够在linux平台下,解决视频解码问题。本发明采用ffmpeg解码库获取原始帧中参数帧信息和数据帧信息,获取完整图像帧数据包,同时建立过滤机制筛选出错误帧,调整数据包内的帧顺序,传输可解码的完整数据包给硬解码模块,完成解码功能。
本发明的技术方案是:
第一方面,基于过滤机制的视频解码方法,包括以下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库到海思平台;
2)创建网络接收任务接收主机传送的原始压缩数据;
3)创建获取数据包线程,使用ffmpeg动态库获取含有带有含参数帧的图像数据包;
4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;
5)获取硬解码模块内的解码图像。
可选地,步骤4)所述筛选错误帧,组合成可解码的数据包,具体为:
动态筛选出不符合协议规定的错误帧,分析编码规律,调整数据包图像帧顺序,根据编码器特性动态修改帧类型,使其组合成可解码的图像数据包。
可选地,步骤4)所述过滤机制,具体为:
41)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在该通道的数据结构变量PSliceNumber;
42)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤41),否则进行下一步;
43)循环遍历本次数据包内的数据,依次判断当前帧是否符合h265协议帧头,如果符合则进行下一步,如果不符合则跳转到步骤49);
44)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤46);
45)如果当前数据包的temp_PSliceNumber等于2,则再次判断p_slice是否为0,如果是,则设置p_size为i,并更新记录slice标志p_slice为1;
46)判断当前帧类型是否为SPS,是SPS则置标志top为1,反之,则直接进入48);
47)继续判断当前帧是否为参数帧,如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息,记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤48);
48)判断当前通道的图像数据是否需要插入I帧,并且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标识为1,如果是进入下一步,反之,则到步骤423);
422)将insrtIDR标识清零,增加参数帧的个数,判断如果seiCount大于协议指定大的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤426);反之,则直接进入下一步;
423)复位解码器,进入步骤424);
424)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤423);
425)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,进入下一步;
426)结束本次过滤过程。
可选地,步骤1)所述将ffmpeg动态库到海思平台,具体为:
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于SEI_BUF_SIZE,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
14)然后,执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下。
可选地,步骤2)所述中接收主机传送的原始压缩图像,具体为:
21)首先,获取配置文件中的接收ip地址和端口;
22)然后,以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)其次,清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的图像数据的长度是否大于零,如果大于零则进行下一步,否则回到步骤23);
25)判断协议帧头是否符合协议要求,如不符合就丢弃该帧;如果符合则将图像帧存入数据接收区。
可选地,步骤3)所述创建获取数据包线程,具体为:
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;
56)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的u64PTS是否一致,如果一致则需要发送该图像数据;
57)创建网络发送任务,将步骤54)中的内存地址保存的数据发送到主机。
第二方面,一种处理装置,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行第一方面所述方法。
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现第一方面所述的方法。
一种计算机程序产品,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行第一方面所述的方法。
本发明与现有技术相比的有益效果是:
本发明在系统为linux的应用场景下,针对海思Hi3559AV100芯片特点,并结合硬解码模块属性和软解码特点,设计实现了一种linux系统下基于过滤机制的视频解码方法。本发明为系统为linux下,首先使用FFMPEG软解码库对网络接收的数据进行数据分析,有效得获取压缩帧参数信息和图像信息。同时针对协议类型建立过滤机制筛选错误帧,传送可解码的数据包给海思Hi3559AV100芯片硬解码模块,从而完成解码过程。
附图说明
图1基于过滤机制的视频解码方案实现流程图。
具体实施方式
结合图1,为了解决linux系统下视频解码问题,我们采用基于过滤机制的ffmpeg软解码和海思芯片模块硬解码结合的方法。下面我们对本发明的内容作进一步描述。
1、移植ffmpeg到海思平台
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数。
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于SEI_BUF_SIZE,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
14)然后,执行configure命令,在配置文件夹的子文件夹lib下将生成的解码库libavcodec、libavformat、libavutil、libswscale;
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下。
2、创建网络接收线程接收主机发送的原始压缩图像数据
对原始的压缩数据进行帧头分析,初步过滤不符合协议要求的错误帧;
21)首先,获取配置文件中的接收ip和端口。
22)然后,以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)其次,清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的图像数据的长度是否大于零,如果大于零则进行下一步,否则回到步骤23)。
25)判断协议帧头是否符合协议要求,如不符合就丢弃该帧;如果符合则将图像帧存入数据接收区。
3、使用ffmpeg动态库获取含参数帧的完整压缩图像数据包
为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 0001),如果符合则进行下一步,如果不符合则跳转到步骤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、获取解码器通道内的图像
建立获取解码图像任务,实时读取解码器工作状态,调用库函数获取解码通道内解码图像。
根据复位状态启动库函数获取解码通道内的图像,并在数据后修改其复位状态使得步骤4)能实时更新解码器工作状态,通过网络发送任务将解码图像发送到主机。
具体步骤如下:
51)创建获取解码图像线程;
52)进入图像获取循环;
53)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
54)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址。如果失败则跳转到步骤53),如果成功则进入下一步;
55)将复位标志resetFlag置1;
56)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的u64PTS是否一致,如果一致则需要发送该图像数据;
57)创建网络发送任务,将步骤54)中的内存地址保存的数据发送到主机。
利用上述技术方案,采用上述操作步骤,本发明可以实现linux系统下视频解码和传输问题,该方法已经经过了算法验证,并进行了实验检验。结果标明,该方案可以为解决图像解码问题,采用软解码方法,组成包含图像帧和参数帧的完整数据包,采用过滤机制,动态筛选不符合协议类型的错误帧,获取可解码的图像数据包,再使用芯片的硬解码模块完成解码过程,有效减少解码时间。
本发明说明书中未作详细描述的内容属本领域专业技术人员的公知技术。
Claims (8)
1.基于过滤机制的视频解码方法,其特征在于,包括以下步骤:
1)配置ffmpeg的编译属性和参数,将ffmpeg动态库移植到海思平台;
2)创建网络接收任务接收主机传送的原始压缩数据;
3)创建获取数据包线程,使用ffmpeg动态库获取含参数帧的图像数据包;
4)建立过滤机制,筛选错误帧,组合成可解码的数据包发送到芯片的硬解码模块;
5)获取硬解码模块内的解码图像;
步骤4)所述过滤机制,具体为:
41)判断图像类型,分析不同类型需要的slice个数图像数据包中含P帧的个数,并记录在当前通道的数据结构变量PSliceNumber;
42)判断当前数据包大小是否大于协议帧规定的最大数,如果大于则退出本次数据包的过滤过程,待接收到新的图像数据包后返回步骤41),否则进行下一步;
43)循环遍历本次数据包内的数据,依次判断当前帧是否符合h265协议帧头,如果符合则进行下一步,如果不符合则跳转到步骤49);
44)判断当前帧是否为P帧或者I帧,如果是,则需要增加本通道本次传输的数据包内sllice个数temp_PSliceNumber,进入下一步;如果不是则跳转到步骤46);
45)如果当前数据包的temp_PSliceNumber等于2,则再次判断p_slice是否为0,如果是,则设置p_size为i,并更新记录slice标志p_slice为1;
46)判断当前帧类型是否为SPS,是SPS则置标志top为1,反之,则直接进入48);
47)继续判断当前帧是否为参数帧,如果是则将当前数据包数组ptr内的i位置拷贝到数据结构Idr_buf,保存sei帧之前的帧头信息,记录当前保存帧头的数据大小Idr_Size为i,将首次出现sps标识entryFlag为1,并清零top为0;完成后进入步骤48);
48)判断当前通道的图像数据是否需要插入I帧,并且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标识为1,如果是进入下一步,反之,则到步骤423);
422)将insrtIDR标识清零,增加参数帧的个数,判断如果seiCount大于协议指定的最大值SEI_NUM,则将参数帧的个数标志seiCount清零,进入步骤426);反之,则直接进入下一步;
423)复位解码器,进入步骤424);
424)判断解码器复位标志resetFlag是否为0,如果是则进入下一步,如果不是则继续等待1ms,跳转到步骤423);
425)将复位状态resetState置1,调用库函数停止解码通道的视频流接收任务,销毁解码通道,重启解码通道,将插入I帧的标志insertIDR置1,复位状态resetState置0,进入下一步;
426)结束本次过滤过程。
2.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤1)所述将ffmpeg动态库移植到海思平台,具体为:
11)首先,配置ffmpeg编译属性,根据平台类型、cpu类型、编码解码器属性、格式转换属性、交叉编译属性配置参数;
12)修改acodec.h文件,增加变量:参数帧长度sei_len和数组sei_buf,同时,根据应用层需求确定其参数帧大小SEI_BUF_SIZE;
13)在hevc_sei.c文件中的decode_nal_sei_prefix函数中添加获取参数帧功能:获取函数中的参数size,将size赋值给sei_len,判断size是否小于等于SEI_BUF_SIZE,如果满足条件则拷贝上下文参数数组gb内数据到sei_buf,拷贝的长度为size,拷贝的sei_buf的数组下标i为gb数组的索引index除以8,即sei_buf[i]=gb_buf[index/8];
14)然后,执行configure命令,在配置文件夹的子文件夹lib下生成解码库libavcodec、libavformat、libavutil、libswscale;
15)最后,将动态库拷贝到解码板卡的/usr/lib路径下。
3.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤2)中所述接收主机传送的原始压缩图像,具体为:
21)首先,获取配置文件中的接收ip和端口;
22)然后,以接收ip地址和端口号为参数创建和绑定网络套接字,待创建成功后进行步骤23);
23)其次,清零接收缓冲区,等待接收到网络发送的图像数据后,进入步骤24);
24)判断本次接收的图像数据的长度是否大于零,如果大于零则进行下一步,否则回到步骤23);
25)判断协议帧头是否符合协议要求,如不符合就丢弃当前帧;如果符合则将图像帧存入数据接收区。
4.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤3)所述创建获取数据包线程,具体为:
321)获取从网络读取的图像数据数组首地址指针bufPtr和长度bufLen;
322)判断当前的数据长度bufLen是否大于0,如果是则继续下一步,如果不是,则退出本次数据的解码过程,等待网络下次发送数据;
323)传送数据数组首地址指针bufPtr和长度bufLen给软解码模块,使用库函数av_parser_parse2对数据按帧进行分割,如果从数组能成功获得一个完整的图像帧数据包则继续下一步,如果不是则退出本次解码过程,等待下次网络传送的图像数据数组;
324)保存本次数据数组中图像帧分割的数据包长度ret,从数据数组总长度bufLen剔除本次分割的图像帧数据包长度ret,并向前移动首地址指针bufPtr,移动次数等于图像帧数据包长度ret;
325)将本次分割的图像完整数据包放到待解码队列中。
5.根据权利要求1所述的基于过滤机制的视频解码方法,其特征在于,步骤5)所述获取硬解码模块内的解码图像,具体为:
51)创建获取解码图像线程;
52)进入图像获取循环;
53)查询通道内的复位状态resetState是否为1,如果是1则延时1ms,继续查询复位状态,如果不是则进行下一步;
54)调用库函数HI_MPI_VDEC_GetFrame获取图像存储的内存地址;如果失败则跳转到步骤53),如果成功则进入下一步;
55)将复位标志resetFlag置1;
56)遍历decodeArray结构体中参数帧,对比保存的时间戳u64PTS与当前的解码图像的u64PTS是否一致,如果一致则需要发送当前图像数据;
57)创建网络发送任务,将步骤54)中的内存地址保存的数据发送到主机。
6.一种处理装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于从所述存储器调用并运行所述计算机程序,以执行权利要求1至5中任一项所述的方法。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序或指令,当所述计算机程序或指令被执行时,实现权利要求1至5中任一项所述的方法。
8.一种计算机程序产品,其特征在于,所述计算机程序产品包括指令,当所述计算机程序产品在计算机上运行时,使得计算机执行权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110826187.0A CN113727116B (zh) | 2021-07-21 | 2021-07-21 | 基于过滤机制的视频解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110826187.0A CN113727116B (zh) | 2021-07-21 | 2021-07-21 | 基于过滤机制的视频解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113727116A CN113727116A (zh) | 2021-11-30 |
CN113727116B true CN113727116B (zh) | 2024-04-23 |
Family
ID=78673786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110826187.0A Active CN113727116B (zh) | 2021-07-21 | 2021-07-21 | 基于过滤机制的视频解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113727116B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116366868B (zh) * | 2023-05-31 | 2023-08-25 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种并发视频包过滤方法、系统及储存介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103716640A (zh) * | 2010-12-17 | 2014-04-09 | 华为技术有限公司 | 帧类型的检测方法和装置 |
CN106131563A (zh) * | 2016-07-28 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 基于dxva进行硬件解码h264视频流的方法及系统 |
CN108206956A (zh) * | 2016-12-20 | 2018-06-26 | 深圳市中兴微电子技术有限公司 | 一种视频解码错误的处理方法及装置 |
CN111813386A (zh) * | 2020-07-09 | 2020-10-23 | 天津津航计算技术研究所 | vxworks下基于QT开发的配电监测模块设计方法 |
CN112243122A (zh) * | 2020-10-15 | 2021-01-19 | 天津津航计算技术研究所 | 一种h.265图像解压缩传输方法 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
CN112565627A (zh) * | 2020-11-30 | 2021-03-26 | 天津津航计算技术研究所 | 一种基于位图叠加的多路视频集中显示设计方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8982960B2 (en) * | 2011-02-23 | 2015-03-17 | Qualcomm Incorporated | Multi-metric filtering |
US11102516B2 (en) * | 2016-02-15 | 2021-08-24 | Nvidia Corporation | Quality aware error concealment method for video and game streaming and a viewing device employing the same |
-
2021
- 2021-07-21 CN CN202110826187.0A patent/CN113727116B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103716640A (zh) * | 2010-12-17 | 2014-04-09 | 华为技术有限公司 | 帧类型的检测方法和装置 |
CN106131563A (zh) * | 2016-07-28 | 2016-11-16 | 武汉斗鱼网络科技有限公司 | 基于dxva进行硬件解码h264视频流的方法及系统 |
CN108206956A (zh) * | 2016-12-20 | 2018-06-26 | 深圳市中兴微电子技术有限公司 | 一种视频解码错误的处理方法及装置 |
CN111813386A (zh) * | 2020-07-09 | 2020-10-23 | 天津津航计算技术研究所 | vxworks下基于QT开发的配电监测模块设计方法 |
CN112243122A (zh) * | 2020-10-15 | 2021-01-19 | 天津津航计算技术研究所 | 一种h.265图像解压缩传输方法 |
CN112261460A (zh) * | 2020-10-19 | 2021-01-22 | 天津津航计算技术研究所 | 一种基于pcie的多路视频解码方案设计方法 |
CN112565627A (zh) * | 2020-11-30 | 2021-03-26 | 天津津航计算技术研究所 | 一种基于位图叠加的多路视频集中显示设计方法 |
Non-Patent Citations (3)
Title |
---|
Enhanced Backward Error Concealment for H.264/AVC Videos on Error-Prone Networks;P. -C. Wang et al.;《2013 International Symposium on Biometrics and Security Technologies》;20130916;第62-66页 * |
基于AVB的车载播放器的研究与实现;杨明旭;《中国优秀硕士学位论文全文数据库工程科技Ⅱ辑》;20190415(2019年第04期);全文 * |
基于iOS平台网络视频会话系统的研究与实现;梁家翠;《中国优秀硕士学位论文全文数据库信息科技辑》;20170215(2017年第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113727116A (zh) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113727114B (zh) | 一种可转码的视频解码方法 | |
CN113645490B (zh) | 一种软硬结合的多通道视频同步解码方法 | |
TWI603609B (zh) | 簡化視訊隨機存取之限制及單元類型 | |
CN107634930B (zh) | 一种媒体数据的获取方法和装置 | |
US20230164371A1 (en) | Method, device, and computer program for improving random picture access in video streaming | |
WO2019128668A1 (zh) | 视频码流处理方法、装置、网络设备和可读存储介质 | |
CN113727116B (zh) | 基于过滤机制的视频解码方法 | |
CN110662084A (zh) | 一种mp4文件流直播的方法、移动终端及存储介质 | |
WO2021254375A1 (zh) | 视频分块方法、传输方法、服务器、适配器和存储介质 | |
CN113382278B (zh) | 视频推送方法、装置、电子设备和可读存储介质 | |
CN115802045A (zh) | 一种数据包过滤方法及基于数据包过滤方法的解码方法 | |
CN113727115B (zh) | 一种高效可转码的视频解码方法 | |
CN113747171B (zh) | 一种自恢复的视频解码方法 | |
KR20160023777A (ko) | 그래픽 처리기를 이용한 비디오 디코딩에 대한 픽처 참조 제어 | |
CN113645467B (zh) | 一种软硬结合的视频解码方法 | |
WO2023033300A1 (en) | Encoding and decoding video data | |
CN112291483B (zh) | 视频推送方法及系统、电子设备及可读存储介质 | |
WO2022061194A1 (en) | Method and system for real-time content-adaptive transcoding of video content on mobile devices | |
CN113596469A (zh) | 一种软硬结合且高效传输的视频解码方法 | |
CN117241035A (zh) | 一种基于编码序号的解码方法 | |
JP2007267144A (ja) | 情報配信方法、サーバ装置およびプログラム | |
KR102598986B1 (ko) | 엣지 서버와 연동하는 ar 스트리밍 장치 및 방법, 시스템 | |
CN115474056A (zh) | 一种基于加速模块的视频解码方法 | |
US20230067994A1 (en) | Encoding and decoding video data | |
CN116828202A (zh) | 一种基于重组的解码方法 |
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 |