CN112511840A - 一种基于ffmpeg与硬件加速设备的解码系统及方法 - Google Patents
一种基于ffmpeg与硬件加速设备的解码系统及方法 Download PDFInfo
- Publication number
- CN112511840A CN112511840A CN202011555110.6A CN202011555110A CN112511840A CN 112511840 A CN112511840 A CN 112511840A CN 202011555110 A CN202011555110 A CN 202011555110A CN 112511840 A CN112511840 A CN 112511840A
- Authority
- CN
- China
- Prior art keywords
- decoding
- module
- ffmpeg
- client
- server
- 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
Links
- 230000001133 acceleration Effects 0.000 title claims abstract description 31
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000008569 process Effects 0.000 claims description 17
- 239000003795 chemical substances by application Substances 0.000 description 43
- 210000001503 joint Anatomy 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 238000013507 mapping Methods 0.000 description 2
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种基于FFMPEG与硬件加速设备的解码系统及方法,其中解码系统包括FFMPEG插件模块、解码代理模块和解码管理器模块,其中:FFMPEG插件模块分别与上层应用和解码代理模块数据连接,用于将上层应用的视频帧数据解包缓存成视频流发送给解码代理模块并返回YUV数据给上层应用,FFMPEG插件模块包含多个FFMPEG插件;解码代理模块采用C/S架构,分别与FFMPEG插件模块和解码管理器模块数据连接,用于代理转发所述FFMPEG插件模块的业务请求、待解码视频流和解码后的YUV数据,解码代理模块包括一服务端和多个客户端;解码管理器模块与解码代理模块数据连接,用于管理解码资源、均衡负载、执行解码任务及返回YUV数据,解码管理器模块包含多个硬件解码设备。
Description
技术领域
本发明涉及音视频解码处理领域,具体而言,涉及一种基于FFMPEG与硬件加速设备的解码系统及方法。
背景技术
多媒体应用程序是典型的资源密集型应用,优化多媒体应用程序至关重要,这也是使用视频处理专用硬件加速的初衷,通过硬件加速,整个系统更加有效地运行。其中,硬解码加速卡使用了专门的高通量解码芯片,其具备解码高速度、高带宽、低功耗等优势被广泛应用于多媒体服务器中,使用独立的解码IP核专用视频加速硬件可以使得解码、编码或过滤(Filter)等操作更快完成且使用更少的其他资源,尤其是CPU。但是为了支持硬件加速,软件开发厂商则面临着各种挑战:一方面存在潜在的系统性能风险问题,另一方面软件还要面对各种硬件架构的复杂性,并需要维护不同的代码路径来支持不同的架构和不同的方案,而优化这类代码耗时费力。因此,提供一个通用且完整的跨平台、跨硬件厂商的多媒体硬件加速方案是非常有必要的。FFMPEG是现今非常流行的音视频编解码框架,FFMPEG是一种可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,其包含了非常先进的音频/视频编解码库libavcodec,被许多开源项目如ffmpeg2theora,VLC,MPlayer,HandBrake,Blender,Google Chrome等所采用。虽然通用CPU从X86到arm都集成了硬解码功能,也有使用FFMPEG的硬解码加速实现的,但是由于解码核心支持1路或几路视频流,所以只能满足消费领域。
目前,FFMPEG的硬件加速实现方案一般都通过AVCodec接口直接调用硬件平台的API来实现流的编解码,而硬件平台的API直接调用设备驱动接口,FFMPEG硬解码默认使用CPU硬解码,从而导致CPU负载较高。基于GPU的一些FFMPEG硬件加速系统中,每个FFMPEG实例会直接调用驱动的内核函数,应用的不适当操作容易导致内核崩溃、服务器重启;而每个FFMPEG实例对应硬解码加速设备的完全初始化,对服务器大量碎片化FFMPEG任务的耗时也无法承受。另外,基于驱动的内核操作在多个容器映射时,容器中的解码应用无法直接访问硬件设备,实现难度大也不方便弹性部署,而采用C/S(Client-Server)架构FFMPEG插件库只与宿主机的守护进程通信,与硬件解耦。因此,需要一种能够使用FFMPEG编解码框架实现完全匹配硬解码加速卡多路解码能力的技术方案。
发明内容
为了解决现有技术中的不足,本发明提供一种基于FFMPEG与硬件加速设备的解码系统及方法,其通过解码管理器模块更加方便地对接多种不同硬件解码加速卡,从而更加方便地赋予FFMPEG硬件解码加速能力。另外,FFMPEG解码实例和硬件解码加速卡的弹性对接,能够重复利用硬件的解码能力,避免了硬件解码资源的浪费。
为达到上述目的,本发明提供了一种基于FFMPEG与硬件加速设备的解码系统,其包括FFMPEG插件模块、解码代理模块和解码管理器模块,其中:
所述FFMPEG插件模块分别与上层应用和所述解码代理模块数据连接,用于将所述上层应用的视频帧数据解包缓存成视频流发送给所述解码代理模块,并返回YUV数据给所述上层应用,其中,所述FFMPEG插件模块包含多个FFMPEG插件;
所述解码代理模块采用C/S架构,分别与所述FFMPEG插件模块和所述解码管理器模块数据连接,用于代理转发所述FFMPEG插件模块的业务请求、待解码视频流和解码后的YUV数据,其中,所述解码代理模块包括一服务端和多个客户端;
所述解码管理器模块与所述解码代理模块数据连接,用于管理解码资源、均衡负载、执行解码任务及返回YUV数据,其中,所述解码管理器模块包含多个硬件解码设备。
在本发明一实施例中,其中,多个硬件解码设备为6张解码加速卡,每张解码加速卡配置16路高清解码通道。
在本发明一实施例中,所述FFMPEG插件模块与所述解码代理模块数据连接具体为任一FFMPEG插件与所述解码代理模块中的对应客户端数据连接,其中:
所述FFMPEG插件通过调用对应客户端接口发送解码请求;
所述FFMPEG插件通过调用对应客户端的WriteData接口向所述服务端发送视频流,并通过调用所述客户端的GetFrame接口从所述服务端取回YUV数据。
在本发明一实施例中,所述解码代理模块内部数据连接为所述服务端分别与每个客户端数据连接,具体为:
所述服务端通过socket监听任一客户端转发的解码请求并返回共享内存通路;
所述客户端通过socket向所述服务端发送视频流,并通过所述共享内存通路获取所述服务端回传的YUV数据。
在本发明一实施例中,所述解码代理模块与所述解码管理器模块数据连接具体为所述服务端与所述解码管理器模块数据连接,其中:
所述服务端根据所述客户端的请求调用所述解码管理器模块接口申请硬件解码资源,并根据所述解码管理器模块返回的解码通道句柄映射所述共享内存通路;
所述服务端将所述客户端转发的视频流写入所述共享内存通路,并缓存所述解码管理器模块传回的YUV数据等待所述客户端读取;
其中,所述解码管理器模块接口由所述解码管理器模块直接调用任一硬件解码设备的接口并封装。
为了达到上述目的,本发明还提供了一种基于FFMPEG与硬件加速设备的解码方法,其包括以下步骤:
S1:建立解码代理模块并初始化环境,包括参数配置和共享内存的分配;
S2:创建并初始化解码管理器模块;
S3:在所述解码代理模块中创建socket,用于所述解码代理模块中的服务端监听客户端连接请求;
S4:所述服务端等待所述客户端的连接后,根据所述客户端请求创建解码业务线程,执行解码任务;
S5:重复步骤S3~S4。
在本发明一实施例中,S2中所述初始化具体为:在解码管理器模块加载配置文件,用于匹配解码加速卡的型号、数量与解码能力,在分配硬件解码资源时首先按加载的配置文件的参数分配。
在本发明一实施例中,S4具体步骤为:
S41:FFMPEG插件模块根据上层应用传输的视频数据,执行FFMPEG命令加载FFMPEG插件,并启动新的FFMPEG插件进程;
S42:所述FFMPEG插件通过AVCodec.init调用所述客户端接口,向所述客户端注册申请解码资源请求;
S43:所述客户端向所述服务端发送startCodec消息体,所述服务端解析解码类型;
S44:所述服务端调用所述解码管理器模块queryChannel接口申请解码资源;
S45:所述解码管理器模块找到负载最低的解码加速卡,并分配解码通道,然后向所述服务端返回通道句柄,如果所有解码加速卡都已经满载,则向服务端返回失败代码;
S46:所述解码管理器模块根据通道句柄在所述服务端映射共享内存,用于发送解码后的YUV数据;
S47:所述FFMPEG插件通过AVCodec.decode调用所述客户端writeData接口,并通过所述客户端向所述服务端发送视频流,所述服务端接收后发送给S45分配的解码通道;
S48:所述解码管理器模块执行解码任务,完成后将解码后的YUV数据写入S46映射的共享内存区域;
S49:所述FFMPEG插件通过AVCodec.decode调用所述客户端GetFrame接口,并通过所述客户端从所述服务端的所述共享内存区域取回解码后的YUV数据,所述FFMPEG插件再将取回的YUV数据返回给所述上层应用。
在本发明一实施例中,S45中找到负载最低的解码加速卡的具体过程为:当新的视频流输入时,解码管理器模块遍历所有解码加速卡,并通过比较每张加速卡的负载大小找到负载最低的加速卡。
在本发明一实施例中,S48解码管理器模块执行解码任务的具体过程为:所述解码管理器模块将所有输入的视频流数据加上pid标志,写入待解码数据队列中,由S4中解码业务线程不断的从待解码数据队列中取出数据并发送到对应的解码通道。
本发明通过建立解码管理器模块更加方便地对接多种不同硬解码加速卡,与现有技术相比能够更加方便地赋予FFMPEG硬解码加速能力;另外,本发明通过解码代理模块将FFMPEG解码实例和解码加速卡弹性对接,能够重复利用硬件的解码能力,避免了现有技术中硬件解码资源的浪费。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明的系统架构图;
图2为本发明解码管理器模块的原理图;
图3为本发明解码代理模块的执行流程图。
附图标记说明:10-FFMPEG插件模块;11-FFMPEG插件;20-解码代理模块;21-客户端;22-服务端;30-解码管理器模块;31-解码加速卡。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
图1为本发明的系统架构图,如图1所示,本发明提供了一种基于FFMPEG+硬件加速设备的解码系统,其包括FFMPEG插件模块、解码代理模块和解码管理器模块,其中:
FFMPEG插件模块分别与上层应用和解码代理模块数据连接,用于将上层应用的视频帧数据解包缓存成视频流发送给解码代理模块,并返回YUV数据给所述上层应用,其中,FFMPEG插件模块包含多个FFMPEG插件,YUV是一种颜色编码格式,解码后的数据是YUV格式的数据;
解码代理模块采用C/S架构,分别与FFMPEG插件模块和解码管理器模块数据连接,用于代理转发FFMPEG插件模块的业务请求、待解码视频流和解码后的YUV数据,其中,解码代理模块包括一服务端和多个客户端;
解码管理器模块与解码代理模块数据连接,用于管理解码资源、均衡负载、执行解码任务及返回YUV数据,其中,解码管理器模块包含多个硬件解码设备。
其中,多个硬件解码设备为6张解码加速卡,每张解码加速卡片配置16路高清解码通道。
其中,FFMPEG插件模块与解码代理模块数据连接具体为任一FFMPEG插件与解码代理模块中的对应客户端连接,具体为:
所述FFMPEG插件通过调用对应客户端接口发送解码请求;
所述FFMPEG插件通过调用对应客户端的WriteData接口向服务端发送视频流,并通过调用客户端的GetFrame接口从服务端取回YUV数据,其中,WriteData接口为写入数据的接口,GetFrame接口为获取框架接口。
其中,解码代理模块内部数据连接为服务端分别与每个客户端数据连接,具体为:
服务端通过socket监听任一客户端转发的解码请求并返回共享内存通路,其中,socket(中文有称为套接字)是java针对tcp层通信封装的一套网络方案,socket连接用于实现服务端与客户端之间的长连接;
客户端通过socket向服务端发送视频流,并通过共享内存通路获取服务端回传的YUV数据。
其中,解码代理模块与解码管理器模块数据连接具体为服务端与解码管理器模块连接,具体为:
服务端根据客户端的请求调用解码管理器模块接口申请硬件解码资源,并根据解码管理器模块返回的解码通道句柄映射共享内存通路;
服务端将客户端转发的视频流写入共享内存通路,并缓存所述解码管理器模块传回的YUV数据等待客户端读取;
其中,解码管理器模块接口由所述解码管理器模块直接调用任一硬件解码设备的接口并封装。
实施例一:
本实施例为一种基于FFMPEG+硬件加速设备的解码系统,包括FFMPEG插件模块、解码代理模块和解码管理器模块,其中:
1.FFMPEG插件模块:
该模块实现了ffmpeg.AVCodec接口,调用解码代理模块的客户端部分接口与服务端建立连接,当上层应用有视频帧数据下来的时候,会先缓存成视频流,再调用客户端的解码接口发送给服务端,同时调用客户端的GetFrame接口,将解码后的YUV数据通过ffmepg接口传递到上层应用。
2.解码代理模块:
该模块采用C/S架构,服务端作为守护进程,代理转发客户端(FFMPEG插件库调用)业务请求,调用解码管理器接口,申请硬件解码资源,回传解码后的YUV数据。
当有新的客户端请求到来时,服务器端会调用channelManger分配硬件解码实例,映射共享内存通路;客户端通过socket发送上层应用解包后的视频数据,服务端接收之后转发到之前分配到的解码通路上;服务端收到视频解码的YUV数据后,写入该实例之前分配的共享内存通路,向客户端传回YUV数据;客户端的监听线程读取YUV数据后,通过API传递给FFMPEG插件模块。
3.解码管理器模块:
该模块直接调用硬件加速设备API,封装对应的接口给代理模块的服务端使用,简化了服务端解码流程的实现,同时也降低了不同硬件加速平台的耦合性。其功能包括:解码资源管理、负载均衡、串行异步解码,其中:
负载均衡:本实施例采用6张硬件解码加速卡,每张卡配置16路高清解码通道,当新的解码请求到来时,会遍历所有加速卡,在解码资源最多的卡申请解码资源;
串行异步解码:由于解码器的硬件资源限制,解码输入缓存区是有限的,输入缓存区满的时候,解码器写API会阻塞,这会导致上层应用阻塞异常。因此,如图2所示,解码管理器模块把所有输入视频流数据加上pid标志,写入待解码数据队列中,在之前创建的发流线程中不断的从待解码数据队列中取出数据发送到对应的解码通道,从而节约线程资源。
本发明还提供了一种基于FFMPEG与硬件加速设备的解码方法,其具体步骤为:
S1:建立解码代理模块并初始化环境,包括参数配置和共享内存的分配;
S2:创建并初始化解码管理器模块;
S3:在解码代理模块中创建socket,用于解码代理模块中的服务端监听客户端连接请求;
S4:服务端等待客户端的连接后,根据客户端请求创建解码业务线程,执行解码任务;
S5:重复步骤S3~S4。
其中,S2中初始化具体为:在解码管理器模块加载配置文件,用于匹配解码加速卡的型号、数量与解码能力,在分配硬件解码资源时首先按加载的配置文件的参数分配。
其中,S4具体步骤为:
S41:FFMPEG插件模块根据上层应用传输的视频数据,执行FFMPEG命令加载FFMPEG插件,并启动新的FFMPEG插件进程;
S42:FFMPEG插件通过AVCodec.init调用客户端API,向客户端注册申请解码资源请求;
S43:客户端向服务端发送startCodec消息体,服务端解析解码类型,其中,startCodec消息体包含启动解码的命令;
S44:服务端调用解码管理器模块queryChannel接口申请解码资源,queryChannel接口用于查询解码通道;
S45:解码管理器模块找到负载最低的解码加速卡,并分配解码通道,然后向服务端返回解码通道句柄,如果所有解码加速卡都已经满载,则向服务端返回失败代码;
S46:解码管理器模块根据解码通道句柄在服务端映射共享内存,用于发送解码后的YUV数据;
S47:FFMPEG插件通过AVCodec.decode调用客户端writeData接口,并通过客户端向服务端发送视频流,服务端接收后发送给S45分配的解码通道,其中,AVCodec.decode为FFMPEG中解码视频数据的命令;
S48:解码管理器模块执行解码任务,完成后将解码后的YUV数据写入S46映射的共享内存区域;
S49:FFMPEG插件通过AVCodec.decode调用客户端GetFrame接口,并通过客户端从服务端的对应共享内存区域取回解码后的YUV数据,FFMPEG插件再将取回的YUV数据返回给上层应用。
其中,S45中找到负载最低的解码加速卡的具体过程为:当新的视频流输入时,解码管理器模块遍历所有解码加速卡,并通过比较每张加速卡的负载大小找到负载最低的加速卡。
其中,S48解码管理器模块执行解码任务的具体过程为:解码管理器模块将所有输入的视频流数据加上pid标志,写入待解码数据队列中,其中,pid(ProcessIdentification)为进程识别号,也称作进程标识符,本实施例通过pid标志区别不同的视频流数据,由S4中解码业务线程不断地从待解码数据队列中取出数据并发送到对应的解码通道。
实施例二:
本实施例为一种基于FFMPEG与硬件加速设备的解码方法,分别以FFMPEG插件模块、解码代理模块和解码管理器模块中的执行流程进行说明。
解码代理模块:
图3为本发明解码代理模块的执行流程图,如图3所示,解码代理的具体过程为:
1.环境初始化:包括参数配置,共享内存的分配;
2.创建解码管理器;
3.服务端创建socket,监听新的客户端请求;
4.新客户端连接后,服务端创建解码线程:
a.服务端接收客户端发送的startCodec消息体,解析解码类型;
b.服务端调用解码管理器queryChannel接口申请解码资源;
c.解码管理器模块首先找到负载最低的加速卡,分配解码通道并返回通道句柄,如果所有加速卡都已经满载,则返回客户端失败code;
d.解码管理器模块根据通道句柄在服务端映射共享内存,用于发送解码后的YUV数据;
e.客服端调用writeData接口向服务端发送视频流,服务端转发到c中分配的解码通道;
f.解码管理器模块获取解码后的YUV数据,并写入d中映射的共享内存区域;
5.重复上述3和4不断监听新客户端到来,为其创建对应的解码业务子线程。服务器通过不断监听新的客户端连接请求,并为其创建对应的解码业务线程,实现多个FFMPEG解码实例与解码加速卡的弹性对接。
解码管理器模块:
1.加载配置文件,匹配解码加速卡型号、数量和解码能力;
2.为了减少硬件设备的频繁初始化,首先按加载的配置文件参数分配硬件解码资源;
3.每次新视频流流到来时,遍历所有加速卡,找到负载最低的加速卡,在此卡上分配解码通道并与新视频流绑定;
4.根据解码通道映射解码代理模块服务端的共享内存区域;
5.将解码后的YUV数据写入共享区,等待读取。
FFMPEG插件模块:
1.执行FFMPEG命令,通过参数加载FFMPEG插件,启动新的FFMPEG插件进程;
2.使用AVCodec.init调用客户端API,向解码代理模块注册申请解码资源;
3.使用AVCodec.decode调用客户端API writeData向解码代理模块发送视频流,调用客户端API GetFrame从解码代理模块取回解码后的YUV数据。
本发明通过建立解码管理器模块更加方便地对接多种不同硬解码加速卡,与现有技术相比能够更加方便地赋予FFMPEG硬解码加速能力;另外,本发明通过解码代理模块将FFMPEG解码实例和解码加速卡弹性对接,能够重复利用硬件的解码能力,避免了现有技术中硬件解码资源的浪费。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。
Claims (10)
1.一种基于FFMPEG与硬件加速设备的解码系统,其特征在于,包括FFMPEG插件模块、解码代理模块和解码管理器模块,其中:
所述FFMPEG插件模块分别与上层应用和所述解码代理模块数据连接,用于将所述上层应用的视频帧数据解包缓存成视频流发送给所述解码代理模块,并返回YUV数据给所述上层应用,其中,所述FFMPEG插件模块包含多个FFMPEG插件;
所述解码代理模块采用C/S架构,分别与所述FFMPEG插件模块和所述解码管理器模块数据连接,用于代理转发所述FFMPEG插件模块的业务请求、待解码视频流和解码后的YUV数据,其中,所述解码代理模块包括一服务端和多个客户端;
所述解码管理器模块与所述解码代理模块数据连接,用于管理解码资源、均衡负载、执行解码任务及返回YUV数据,其中,所述解码管理器模块包含多个硬件解码设备。
2.根据权利要求1所述的解码系统,其特征在于,多个硬件解码设备为6张解码加速卡,每张解码加速卡配置16路高清解码通道。
3.根据权利要求1所述的解码系统,其特征在于,所述FFMPEG插件模块与所述代理模块数据连接具体为任一FFMPEG插件与所述解码代理模块中的对应客户端数据连接,其中:
所述FFMPEG插件通过调用对应客户端接口发送解码请求;
所述FFMPEG插件通过调用对应客户端的WriteData接口向服务端发送视频流,并通过调用客户端的GetFrame接口从服务端取回YUV数据。
4.根据权利要求3所述的解码系统,其特征在于,所述解码代理模块内部数据连接为所述服务端分别与每个客户端数据连接,具体为:
所述服务端通过socket监听任一客户端转发的解码请求并返回共享内存通路;
所述客户端通过socket向所述服务端发送视频流,并通过所述共享内存通路获取服务端回传的YUV数据。
5.根据权利要求4所述的解码系统,其特征在于,所述解码代理模块与所述解码管理器模块数据连接具体为所述服务端与所述解码管理器模块数据连接,其中:
所述服务端根据所述客户端的解码请求调用所述解码管理器模块接口申请硬件解码资源,并根据所述解码管理器模块返回的解码通道句柄映射所述共享内存通路;
所述服务端将所述客户端转发的视频流写入所述共享内存通路,并缓存所述解码管理器模块传回的YUV数据等待所述客户端读取;
其中,所述解码管理器模块接口由所述解码管理器模块直接调用任一硬件解码设备的接口并封装。
6.一种基于FFMPEG与硬件加速设备的解码方法,其特征在于,包括以下步骤:
S1:建立解码代理模块并初始化环境,具体包括参数配置和共享内存的分配;
S2:创建并初始化解码管理器模块;
S3:在所述解码代理模块中创建socket,用于所述解码代理模块中的服务端监听客户端连接请求;
S4:所述服务端等待所述客户端的连接后,根据所述客户端请求创建解码业务线程,执行解码任务;
S5:重复步骤S3~S4。
7.根据权利要求6所述的解码方法,其特征在于,S2中所述初始化具体为:在解码管理器模块加载配置文件,用于匹配解码加速卡的型号、数量与解码能力,在分配硬件解码资源时首先按加载的配置文件的参数分配。
8.根据权利要求6所述的解码方法,其特征在于,S4具体步骤为:
S41:FFMPEG插件模块根据上层应用传输的视频数据,执行FFMPEG命令加载FFMPEG插件,并启动新的FFMPEG插件进程;
S42:所述FFMPEG插件通过AVCodec.init调用所述客户端接口,向所述客户端注册申请解码资源请求;
S43:所述客户端向所述服务端发送startCodec消息体,所述服务端解析解码类型;
S44:所述服务端调用所述解码管理器模块queryChannel接口申请解码资源;
S45:所述解码管理器模块找到负载最低的解码加速卡,并分配解码通道,然后向所述服务端返回解码通道句柄,如果所有解码加速卡都已经满载,则向所述服务端返回失败代码;
S46:所述解码管理器模块根据解码通道句柄在所述服务端映射共享内存,用于发送解码后的YUV数据;
S47:所述FFMPEG插件通过AVCodec.decode调用所述客户端writeData接口,并通过所述客户端向所述服务端发送视频流,所述服务端接收后发送给S45分配的解码通道;
S48:所述解码管理器模块执行解码任务,完成后将解码后的YUV数据写入S46映射的共享内存区域;
S49:所述FFMPEG插件通过AVCodec.decode调用所述客户端GetFrame接口,并通过所述客户端从所述服务端的所述共享内存区域取回解码后的YUV数据,所述FFMPEG插件再将取回的YUV数据返回给所述上层应用。
9.根据权利要求8所述的解码方法,其特征在于,S45中找到负载最低的解码加速卡的具体过程为:当新的视频流输入时,所述解码管理器模块遍历所有解码加速卡,并通过比较每张解码加速卡的负载大小找到负载最低的解码加速卡。
10.根据权利要求8所述的解码方法,其特征在于,S48所述解码管理器模块执行解码任务的具体过程为:所述解码管理器模块将所有输入的视频流数据加上pid标志,写入待解码数据队列中,由S4中解码业务线程不断的从所述待解码数据队列中取出数据并发送到对应的解码通道。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011555110.6A CN112511840B (zh) | 2020-12-24 | 2020-12-24 | 一种基于ffmpeg与硬件加速设备的解码系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011555110.6A CN112511840B (zh) | 2020-12-24 | 2020-12-24 | 一种基于ffmpeg与硬件加速设备的解码系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112511840A true CN112511840A (zh) | 2021-03-16 |
CN112511840B CN112511840B (zh) | 2023-02-17 |
Family
ID=74923401
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011555110.6A Active CN112511840B (zh) | 2020-12-24 | 2020-12-24 | 一种基于ffmpeg与硬件加速设备的解码系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112511840B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596469A (zh) * | 2021-06-23 | 2021-11-02 | 天津津航计算技术研究所 | 一种软硬结合且高效传输的视频解码方法 |
CN113645490A (zh) * | 2021-06-23 | 2021-11-12 | 天津津航计算技术研究所 | 一种软硬结合的多通道视频同步解码方法 |
CN114125558A (zh) * | 2022-01-26 | 2022-03-01 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
CN115499665A (zh) * | 2022-09-14 | 2022-12-20 | 北京睿芯高通量科技有限公司 | 一种多路视频高并发编解码系统 |
CN116055664A (zh) * | 2023-03-28 | 2023-05-02 | 北京睿芯通量科技发展有限公司 | 一种用于视频处理进程的共享内存方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102404624A (zh) * | 2011-11-07 | 2012-04-04 | 深圳市佳创视讯技术股份有限公司 | 一种数字机顶盒用支持硬件解码的全格式媒体播放器 |
CN104202656A (zh) * | 2014-09-16 | 2014-12-10 | 国家计算机网络与信息安全管理中心 | 网络音频mp3流乱序分段解码方法 |
CN104683860A (zh) * | 2015-02-02 | 2015-06-03 | 北京神州天脉网络计算机有限公司 | 一种音视频多路并发解码加速卡及其解码加速方法 |
CN109257646A (zh) * | 2018-10-15 | 2019-01-22 | Oppo广东移动通信有限公司 | 视频处理方法、装置、电子设备及计算机可读介质 |
WO2019229213A1 (en) * | 2018-06-01 | 2019-12-05 | Canon Kabushiki Kaisha | A load balancing method for video decoding in a system providing hardware and software decoding resources |
-
2020
- 2020-12-24 CN CN202011555110.6A patent/CN112511840B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102404624A (zh) * | 2011-11-07 | 2012-04-04 | 深圳市佳创视讯技术股份有限公司 | 一种数字机顶盒用支持硬件解码的全格式媒体播放器 |
CN104202656A (zh) * | 2014-09-16 | 2014-12-10 | 国家计算机网络与信息安全管理中心 | 网络音频mp3流乱序分段解码方法 |
CN104683860A (zh) * | 2015-02-02 | 2015-06-03 | 北京神州天脉网络计算机有限公司 | 一种音视频多路并发解码加速卡及其解码加速方法 |
WO2019229213A1 (en) * | 2018-06-01 | 2019-12-05 | Canon Kabushiki Kaisha | A load balancing method for video decoding in a system providing hardware and software decoding resources |
CN109257646A (zh) * | 2018-10-15 | 2019-01-22 | Oppo广东移动通信有限公司 | 视频处理方法、装置、电子设备及计算机可读介质 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596469A (zh) * | 2021-06-23 | 2021-11-02 | 天津津航计算技术研究所 | 一种软硬结合且高效传输的视频解码方法 |
CN113645490A (zh) * | 2021-06-23 | 2021-11-12 | 天津津航计算技术研究所 | 一种软硬结合的多通道视频同步解码方法 |
CN113645490B (zh) * | 2021-06-23 | 2023-05-09 | 天津津航计算技术研究所 | 一种软硬结合的多通道视频同步解码方法 |
CN114125558A (zh) * | 2022-01-26 | 2022-03-01 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
WO2023142720A1 (zh) * | 2022-01-26 | 2023-08-03 | 麒麟软件有限公司 | 基于Linux桌面显卡的安卓视频解码硬件加速方法 |
CN115499665A (zh) * | 2022-09-14 | 2022-12-20 | 北京睿芯高通量科技有限公司 | 一种多路视频高并发编解码系统 |
CN116055664A (zh) * | 2023-03-28 | 2023-05-02 | 北京睿芯通量科技发展有限公司 | 一种用于视频处理进程的共享内存方法、装置及存储介质 |
CN116055664B (zh) * | 2023-03-28 | 2023-06-02 | 北京睿芯通量科技发展有限公司 | 一种用于视频处理进程的共享内存方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112511840B (zh) | 2023-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112511840B (zh) | 一种基于ffmpeg与硬件加速设备的解码系统及方法 | |
CN106161537B (zh) | 远程过程调用的处理方法、装置、系统及电子设备 | |
US20060082583A1 (en) | Remote client graphics rendering | |
US8381227B2 (en) | System and method of inter-connection between components using software bus | |
CN113542757A (zh) | 云应用的图像传输方法、装置、服务器及存储介质 | |
CN114579288B (zh) | 一种任务处理的方法、装置以及计算机设备 | |
US6918118B2 (en) | Multi-instance input device control | |
CN112346794A (zh) | 接口调用方法、装置、设备及介质 | |
US8458702B1 (en) | Method for implementing user space up-calls on java virtual machine before/after garbage collection | |
CN115904761A (zh) | 片上系统、车辆及视频处理单元虚拟化方法 | |
US9507637B1 (en) | Computer platform where tasks can optionally share per task resources | |
WO2021238259A1 (zh) | 一种数据传输方法、装置、设备及计算机可读存储介质 | |
CN113296974B (zh) | 数据库访问方法、装置、电子设备及可读存储介质 | |
CN115878301A (zh) | 一种数据库网络负载性能的加速框架、加速方法及设备 | |
CN112764877A (zh) | 一种用于硬件加速设备与docker内进程通信的方法与系统 | |
US6826634B2 (en) | Extended message block for network device drivers | |
WO2023216621A1 (zh) | 云桌面的图像处理方法、装置、服务器和存储介质 | |
CN110798366B (zh) | 任务逻辑的处理方法、装置及设备 | |
CN111190731A (zh) | 基于权重的集群任务调度系统 | |
CN113271336B (zh) | 基于dpdk的机器人中间件dds数据传输方法、电子设备及计算机可读存储介质 | |
US7336664B2 (en) | Data processing device and its input/output method and program | |
CN111857964A (zh) | 一种虚拟机can口数据透传到物理机can口设备的方法和设备 | |
CN113849449A (zh) | 一种通信系统和信息交互方法、设备和介质 | |
CN113010280A (zh) | 分布式任务的处理方法、系统、装置、设备和介质 | |
CN117041147B (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 | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: Room 711c, 7 / F, block a, building 1, yard 19, Ronghua Middle Road, Beijing Economic and Technological Development Zone, Daxing District, Beijing 102600 Patentee after: Beijing Zhongke Flux Technology Co.,Ltd. Address before: Room 711c, 7 / F, block a, building 1, yard 19, Ronghua Middle Road, Beijing Economic and Technological Development Zone, Daxing District, Beijing 102600 Patentee before: Beijing Ruixin high throughput technology Co.,Ltd. |