视频编解码处理与系统、编解码服务器与插件模块转让专利

申请号 : CN202211570429.5

文献号 : CN115580735B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 温健董龙江

申请人 : 安徽海马云科技股份有限公司

摘要 :

本发明实施例提供一种视频编解码处理与系统、编解码服务器模块、安卓编解码插件模块、电子设备及计算机可读存储介质,方法包括:接收安卓编解码插件模块发送的编码请求或解码请求;基于编码请求或解码请求从预先创建的共享内存区域读取安卓编解码插件模块存放的待处理视频源数据;通过预先创建的英伟达编码器或英伟达解码器对待处理视频源数据进行编码或解码,生成目标视频数据;将目标视频数据存放入所述共享内存区域,向安卓编解码插件模块发送通知消息,以使安卓编解码插件模块基于通知消息从共享内存区域读取目标视频数据,并将其返回安卓操作系统,能提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。

权利要求 :

1.一种视频编解码处理方法,其特征在于,该方法运行于Linux操作系统,包括:接收安卓编解码插件模块发送的编码请求或解码请求;

基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;

通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;

将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

初始化预设网络命名管道,并通过所述网络命名管道获取所述安卓编解码插件模块发送的参数信息,其中,所述参数信息包括编码参数信息或解码参数信息;

根据所述参数信息创建所述英伟达编码器或英伟达解码器,创建所述共享内存区域,并将所述共享内存区域对应的标识符发送至所述安卓编解码插件模块,以使所述安卓编解码插件模块基于所述标识符将所述待处理视频源数据存放至所述共享内存区域。

3.一种视频编解码处理方法,其特征在于,该方法运行于宿主机中使用docker服务运行的安卓操作系统,包括:将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;

接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。

4.根据权利要求3所述的方法,其特征在于,所述方法还包括:

通过预设网络命名管道向所述编解码服务器模块发送参数信息,其中,所述网络命名管道由所述编解码服务器模块初始化,所述参数信息包括编码参数信息或解码参数信息;

接收所述编解码服务器模块发送的所述共享内存区域对应的标识符,基于所述标识符将所述待处理视频源数据存放至所述共享内存区域。

5.一种编解码服务器模块,其特征在于,该模块运行于Linux操作系统,包括:接收子模块,用于接收安卓编解码插件模块发送的编码请求或解码请求;

第一读取子模块,用于基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;

生成子模块,用于通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;

第一发送子模块,用于将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。

6.一种安卓编解码插件模块,其特征在于,该模块运行于宿主机中使用docker服务运行的安卓操作系统,包括:第二发送子模块,用于将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;

第二读取子模块,用于接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。

7.一种视频编解码处理系统,其特征在于,包括:

安卓编解码插件模块和编解码服务器模块,其中;

所述安卓编解码插件模块,运行于宿主机中使用docker服务运行的安卓操作系统,用于将待处理视频源数据存放入所述编解码服务器模块预先创建的共享内存区域并发送编码请求或解码请求给所述编解码服务器模块,其中,所述宿主机外挂N卡;

所述编解码服务器模块,运行于所述宿主机使用的Linux操作系统,用于接收所述安卓编解码插件模块发送的编码请求或解码请求,基于所述编码请求或解码请求从所述共享内存区域读取所述待处理视频源数据,通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据,将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息;

所述安卓编解码插件模块,还用于接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回所述安卓操作系统。

8.一种电子设备,其特征在于,包括处理器、存储器和总线,其中:

所述处理器和存储器通过所述总线完成相互间的通信;

所述处理器可以调用所述存储器中的计算机程序,以执行如权利要求1‑2任意一项所述的方法或3‑4任意一项所述的方法的步骤。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1‑2任意一项所述的方法或3‑4任意一项所述的方法的步骤。

说明书 :

视频编解码处理与系统、编解码服务器与插件模块

技术领域

[0001] 本发明实施例涉及计算机技术领域,尤其涉及一种视频编解码处理与系统、编解码服务器模块、安卓编解码插件模块、电子设备及计算机可读存储介质。

背景技术

[0002] 现有技术条件下,云应用(比如云游戏)领域中,一种常见的架构是基于ARM(Advanced RISC Machines,先进精简指令集机器)服务器并外挂PCI(Peripheral Component Interconnect,外设部件互连标准)显卡,运行Linux操作系统比如乌班图ubuntu、社区企业操作系统centos等,Linux上运行docker(一个开源的应用容器引擎)服务,将安卓容器化。安卓图形系统使用PCI显卡进行渲染,渲染后的结果通过硬件编码器编码成视频流,通过网络推送到用户端。关于硬件编码器,成熟的产品有netint公司的T4XX系列视频加速卡、涌现科技Seirios系列视频加速卡等。这些专业的视频加速卡要么不支持色彩空间RGBA转YUV,要么对安卓的支持不友好。
[0003] 因此,如何提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案是目前业界亟待解决的课题。

发明内容

[0004] 针对现有技术中的缺陷,本发明实施例提供一种视频编解码处理与系统、编解码服务器模块、安卓编解码插件模块、电子设备及计算机可读存储介质。
[0005] 第一方面,本发明实施例提供一种视频编解码处理方法,该方法运行于Linux操作系统,包括:
[0006] 接收安卓编解码插件模块发送的编码请求或解码请求;
[0007] 基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;
[0008] 通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;
[0009] 将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。
[0010] 第二方面,本发明实施例提供一种视频编解码处理方法,该方法运行于宿主机中使用docker服务运行的安卓操作系统,包括:
[0011] 将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;
[0012] 接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。
[0013] 第三方面,本发明实施例提供一种编解码服务器模块,该模块运行于Linux操作系统,包括:
[0014] 接收子模块,用于接收安卓编解码插件模块发送的编码请求或解码请求;
[0015] 第一读取子模块,用于基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;
[0016] 生成子模块,用于通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;
[0017] 第一发送子模块,用于将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。
[0018] 第四方面,本发明实施例提供一种安卓编解码插件模块,该模块运行于宿主机中使用docker服务运行的安卓操作系统,包括:
[0019] 第二发送子模块,用于将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;
[0020] 第二读取子模块,用于接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。
[0021] 第五方面,本发明实施例提供一种视频编解码处理系统,包括:
[0022] 安卓编解码插件模块和编解码服务器模块,其中;
[0023] 所述安卓编解码插件模块,运行于宿主机中使用docker服务运行的安卓操作系统,用于将待处理视频源数据存放入所述编解码服务器模块预先创建的共享内存区域并发送编码请求或解码请求给所述编解码服务器模块,其中,所述宿主机外挂N卡;
[0024] 所述编解码服务器模块,运行于所述宿主机使用的Linux操作系统,用于接收所述安卓编解码插件模块发送的编码请求或解码请求,基于所述编码请求或解码请求从所述共享内存区域读取所述待处理视频源数据,通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据,将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息;
[0025] 所述安卓编解码插件模块,还用于接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回所述安卓操作系统。
[0026] 第六方面,本发明实施例提供一种电子设备,包括处理器、存储器和总线,其中:
[0027] 所述处理器和存储器通过总线完成相互间的通信;
[0028] 所述处理器可以调用存储器中的计算机程序,以执行上述第一方面或第二方面所述方法的步骤。
[0029] 第七方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面或第二方面所述方法的步骤。
[0030] 本发明实施例提供的视频编解码处理与系统、编解码服务器模块、安卓编解码插件模块、电子设备及计算机可读存储介质,借助于运行于外挂N卡的宿主机中使用docker服务运行的安卓操作系统的安卓编解码插件模块和运行于所述宿主机使用的Linux操作系统的编解码服务器模块,设计所述安卓编解码插件模块将待处理视频源数据存放入所述编解码服务器模块预先创建的共享内存区域并发送编码请求或解码请求给所述编解码服务器模块;设计所述编解码服务器模块接收所述安卓编解码插件模块发送的编码请求或解码请求,基于所述编码请求或解码请求从所述共享内存区域读取所述待处理视频源数据,通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据,将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息;还设计所述安卓编解码插件模块接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回所述安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。

附图说明

[0031] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0032] 图1为本发明实施例提供的一种视频编解码处理方法的流程示意图;
[0033] 图2为本发明实施例提供的另一种视频编解码处理方法的流程示意图;
[0034] 图3为本发明实施例提供的一种编解码服务器模块的结构示意图;
[0035] 图4为本发明实施例提供的一种安卓编解码插件模块的结构示意图;
[0036] 图5为本发明实施例提供的一种视频编解码处理系统的结构示意图;
[0037] 图6为本发明实施例提供的另一种视频编解码处理系统的结构示意图;
[0038] 图7为本发明实施例提供的又一种视频编解码处理方法的流程示意图;
[0039] 图8为本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

[0040] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0041] 鉴于英伟达显卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,是一款理想的视频卡。但是,N卡的编解码功能使用英伟达专用视频编解码软件包套件实现,该套件只支持普通Linux,不支持安卓。因此,本申请提出一种外挂N卡,使用N卡作为容器安卓硬件编解码的服务架构及相应的编解码方案。
[0042] 如图1所示,本实施例提供一种视频编解码处理方法,该方法运行于Linux操作系统(比如ubuntu、centos等),包括:
[0043] S10、接收安卓编解码插件模块发送的编码请求或解码请求;
[0044] S11、基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据(比如云应用渲染视频);
[0045] S12、通过预先创建的英伟达编码器或英伟达解码器(英伟达编码器或英伟达解码器可以通过编解码器FFmpeg创建)对所述待处理视频源数据进行编码或解码,生成目标视频数据;
[0046] S13、将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机(可以是ARM服务器,也可以是其它架构的服务器,此处不再赘述)中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。
[0047] 本实施例中,需要说明的是,如果是视频编码过程,则接收的是安卓编解码插件模块发送的编码请求,基于所述编码请求读取待处理视频源数据,并通过预先创建的英伟达编码器对所述待处理视频源数据进行编码;而如果是视频解码过程,则接收的是安卓编解码插件模块发送的解码请求,基于所述解码请求读取待处理视频源数据,并通过预先创建的英伟达解码器对所述待处理视频源数据进行解码。
[0048] 本发明实施例提供的视频编解码处理方法,接收安卓编解码插件模块发送的编码请求或解码请求;基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。
[0049] 在上述实施例的基础上,所述方法还可以包括:
[0050] 初始化预设网络命名管道,并通过所述网络命名管道获取所述安卓编解码插件模块发送的参数信息,其中,所述参数信息包括编码参数信息或解码参数信息;
[0051] 根据所述参数信息创建所述英伟达编码器或英伟达解码器,创建所述共享内存区域,并将所述共享内存区域对应的标识符发送至所述安卓编解码插件模块,以使所述安卓编解码插件模块基于所述标识符将所述待处理视频源数据存放至所述共享内存区域。
[0052] 本实施例中,需要说明的是,如果是对视频进行编码,则获取的是编码参数信息,根据编码参数信息创建英伟达编码器;如果是对视频进行解码,则获取的是解码参数信息,根据解码参数信息创建英伟达解码器。
[0053] 如图2所示,本实施例提供一种视频编解码处理方法,该方法运行于宿主机中使用docker服务运行的安卓操作系统,包括:
[0054] S20、将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;
[0055] S21、接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。
[0056] 本发明实施例提供的视频编解码处理方法,将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求;接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。
[0057] 在上述实施例的基础上,所述方法还可以包括:
[0058] 通过预设网络命名管道向所述编解码服务器模块发送参数信息,其中,所述网络命名管道由所述编解码服务器模块初始化,所述参数信息包括编码参数信息或解码参数信息;
[0059] 接收所述编解码服务器模块发送的所述共享内存区域对应的标识符,基于所述标识符将所述待处理视频源数据存放至所述共享内存区域。
[0060] 本实施例中,需要说明的是,在步骤S20执行之前,需要通过预设网络命名管道向编解码服务器模块发送参数信息,编解码服务器模块接收到参数信息后,如果参数信息是编码参数信息则会根据编码参数信息创建英伟达编码器,或者如果参数信息是解码参数信息则会根据解码参数信息创建英伟达解码器,而且编解码服务器模块会创建共享内存区域,并通过网络命名管道反馈共享内存区域的标识符。在接收到编解码服务器模块发送的共享内存区域对应的标识符后,会执行步骤S20,之后编解码服务器模块会利用创建的英伟达编码器对待处理视频源数据进行编码生成目标视频数据或利用创建的英伟达解码器对待处理视频源数据进行解码生成目标视频数据,将目标视频数据存放入共享内存区域并进行通知。之后会执行步骤S21。
[0061] 如图3所示,本发明实施例提供一种编解码服务器模块,该模块运行于Linux操作系统,包括:
[0062] 接收子模块30,用于接收安卓编解码插件模块发送的编码请求或解码请求;
[0063] 第一读取子模块31,用于基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;
[0064] 生成子模块32,用于通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;
[0065] 第一发送子模块33,用于将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,其中,所述Linux操作系统所在的宿主机中使用docker服务运行所述安卓操作系统,所述宿主机外挂N卡。
[0066] 本发明实施例提供的编解码服务器模块,借助于接收子模块30接收安卓编解码插件模块发送的编码请求或解码请求;借助于第一读取子模块31基于所述编码请求或解码请求从预先创建的共享内存区域读取所述安卓编解码插件模块存放的待处理视频源数据;借助于生成子模块32通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据;借助于第一发送子模块33将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块发送通知消息,以使所述安卓编解码插件模块基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。
[0067] 本申请实施例提供的编解码服务器模块,其实现过程与本申请实施例提供的视频编解码处理方法一致,所能达到的效果也与本申请实施例提供的视频编解码处理方法相同,在此不再赘述。
[0068] 如图4所示,本发明实施例提供一种安卓编解码插件模块,该模块运行于宿主机中使用docker服务运行的安卓操作系统,包括:
[0069] 第二发送子模块40,用于将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求,其中,所述共享内存区域由所述编解码服务器模块预先创建,所述编解码服务器模块运行于所述宿主机使用的Linux操作系统,所述宿主机外挂N卡;
[0070] 第二读取子模块41,用于接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,其中,所述目标视频数据由所述编解码服务器模块通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码生成。
[0071] 本发明实施例提供的安卓编解码插件模块,借助于第二发送子模块40将待处理视频源数据存放入共享内存区域,向编解码服务器模块发送编码请求或解码请求;借助于第二读取子模块41接收所述编解码服务器模块发送的通知消息,基于所述通知消息从所述共享内存区域读取目标视频数据,并将其返回所述安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。
[0072] 本申请实施例提供的安卓编解码插件模块,其实现过程与本申请实施例提供的视频编解码处理方法一致,所能达到的效果也与本申请实施例提供的视频编解码处理方法相同,在此不再赘述。
[0073] 如图5所示,本发明实施例提供一种视频编解码处理系统,包括:
[0074] 安卓编解码插件模块50和编解码服务器模块51,其中;
[0075] 所述安卓编解码插件模块50,运行于宿主机中使用docker服务运行的安卓操作系统,用于将待处理视频源数据存放入所述编解码服务器模块51预先创建的共享内存区域并发送编码请求或解码请求给所述编解码服务器模块51,其中,所述宿主机外挂N卡;
[0076] 所述编解码服务器模块51,运行于所述宿主机使用的Linux操作系统,用于接收所述安卓编解码插件模块50发送的编码请求或解码请求,基于所述编码请求或解码请求从所述共享内存区域读取所述待处理视频源数据,通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据,将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块50发送通知消息;
[0077] 所述安卓编解码插件模块50,还用于接收所述编解码服务器模块51发送的通知消息,基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回所述安卓操作系统。
[0078] 本发明实施例提供的视频编解码处理系统,借助于运行于外挂N卡的宿主机中使用docker服务运行的安卓操作系统的安卓编解码插件模块50和运行于所述宿主机使用的Linux操作系统的编解码服务器模块51,设计所述安卓编解码插件模块50将待处理视频源数据存放入所述编解码服务器模块51预先创建的共享内存区域并发送编码请求或解码请求给所述编解码服务器模块51;设计所述编解码服务器模块51接收所述安卓编解码插件模块50发送的编码请求或解码请求,基于所述编码请求或解码请求从所述共享内存区域读取所述待处理视频源数据,通过预先创建的英伟达编码器或英伟达解码器对所述待处理视频源数据进行编码或解码,生成目标视频数据,将所述目标视频数据存放入所述共享内存区域,并向所述安卓编解码插件模块50发送通知消息;还设计所述安卓编解码插件模块50接收所述编解码服务器模块51发送的通知消息,基于所述通知消息从所述共享内存区域读取所述目标视频数据,并将其返回所述安卓操作系统,整个编解码方案中通过英伟达编码器或英伟达解码器调用N卡的编解码功能实现需要使用的英伟达专用视频编解码软件包套件,而N卡不但可以用来图形显示,而且具有极强的视频编解码能力,且支持RGBA转YUV功能,因此能够提供一种可以支持RGBA转YUV且对安卓支持友好的视频编解码方案。
[0079] 下面以视频编码过程为例对本申请中视频编解码处理方法进行说明。图6为本发明实施例提供的另一种视频编解码处理系统的结构示意图,图7为本发明实施例提供的又一种视频编解码处理方法的流程示意图,图6中宿主机的操作系统使用ARM版ubuntu,在ubuntu上使用docker服务运行Android,在ubuntu上运行编解码服务器模块codec server,Android内实现视频编解码插件模块encoder/decoder plugin,该插件模块encoder/decoder plugin通过Android的libstagefrighthw模块和网络命名管道Pipe跟ubuntu上的编解码服务器模块codec server通信。图6示出的架构涉及的视频编码处理过程如图7所示。图7中,编解码服务器模块初始化Linux网络命名管道,并监听该管道,通过docker容器将网络命名管道传到容器安卓。之后安卓编解码插件模块打开网络命名管道,将编码器类型、视频长、宽、编码率等编码参数信息通过网络命名管道传递到编解码服务器模块。编解码服务器模块收到编码参数信息后,通过编解码器FFmpeg创建对应的英伟达编码器(比如图6中的英伟达h264编码器h264_nvenc),并创建一个共享内存区域SHM,将共享内存区域SHM的标识符(比如句柄handle)传递回安卓编解码插件模块。安卓编解码插件模块收到共享内存区域SHM的标识符后,会将要编码的RGBA数据放在共享内存区域SHM,并通知编解码服务器模块进行编码。之后编解码服务器模块会将共享内存区域SHM的数据进行编码(安卓编解码插件模块每次请求编码一帧图像数据,而编解码服务器模块根据安卓编解码插件模块的请求每次编码一帧图像数据)。编码完成后,编解码服务器模块会将编码后的数据放在共享内存区域SHM,并通知安卓编解码插件编码完毕,安卓编解码插件收到通知后,会将编码后的数据返回给安卓编码框架。
[0080] 视频解码过程与视频编码过程一致,所不同的是解码过程涉及的参数为解码参数信息,且编解码服务器模块收到解码参数信息后,通过编解码器FFmpeg创建的是对应的英伟达解码器(比如图6中的英伟达h264解码器nvdec_h264),具体过程此处不再赘述。
[0081] 图8为本发明实施例电子设备的实体结构示意图,如图8所示,该电子设备可以包括:处理器(processor)80、存储器(memory)81和总线82,其中,处理器80和存储器81通过总线82完成相互间的通信。处理器80可以调用存储器81中的计算机程序,以执行前述任一实施例所述的视频编解码处理方法。
[0082] 本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行前述任一实施例所述的视频编解码处理方法。
[0083] 本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,该程序被处理器执行时实现前述任一实施例所述的视频编解码处理方法。
[0084] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。