CN117555606A - 多媒体数据的处理方法、相关设备及存储介质 - Google Patents
多媒体数据的处理方法、相关设备及存储介质 Download PDFInfo
- Publication number
- CN117555606A CN117555606A CN202210930666.1A CN202210930666A CN117555606A CN 117555606 A CN117555606 A CN 117555606A CN 202210930666 A CN202210930666 A CN 202210930666A CN 117555606 A CN117555606 A CN 117555606A
- Authority
- CN
- China
- Prior art keywords
- library
- multimedia data
- target
- code segment
- encoding
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 18
- 230000003068 static effect Effects 0.000 claims abstract description 310
- 230000006870 function Effects 0.000 claims abstract description 245
- 238000000034 method Methods 0.000 claims abstract description 158
- 238000004590 computer program Methods 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 8
- 244000179970 Monarda didyma Species 0.000 description 4
- 235000010672 Monarda didyma Nutrition 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例涉及计算机技术领域,公开了多媒体数据的处理方法、相关设备及存储介质,该方法包括:加载目标动态库,目标动态库用于存储目标函数;当目标动态库加载成功,且目标动态库中存在目标函数时,加载第一静态库,调用第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;当目标动态库加载失败,或者目标动态库中不存在目标函数时,加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。采用本申请实施例,可在保证系统兼容的同时,使得编解码的速度更快。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及多媒体数据的处理方法、相关设备及存储介质。
背景技术
现有的在安卓系统(Android,一种由美国谷歌公司开发的移动操作系统)上的多媒体数据编解码主要有两种,一种是使用Java(一门面向对象的编程语言)接口进行多媒体数据编解码,另一种是使用Native接口(本地编程语言编写的接口)进行多媒体数据编解码。其中,Java接口兼容的安卓系统的版本多于Native接口,但Java接口编解码的速度比Native接口慢,也就是延时更高。因此,如何在保证系统兼容的同时,使得编解码的速度更快,是目前亟需解决的问题。
发明内容
本申请实施例提供一种多媒体数据的处理方法、相关设备、存储介质及计算机产品,可在保证系统兼容的同时,使得编解码的速度更快。
一方面,本申请实施例提供了一种多媒体数据的处理方法,包括:
加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
一方面,本申请实施例提供了一种多媒体数据的处理装置,所述多媒体数据的处理装置包括加载单元和处理单元,其中:
所述加载单元,用于加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
所述处理单元,用于当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
所述处理单元,还用于当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
另一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括输入接口和输出接口,所述计算机设备还包括:
处理器,适于实现一条或多条计算机程序;以及,
计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行上述多媒体数据的处理方法。
另一方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由处理器加载并执行上述多媒体数据的处理方法。
另一方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述多媒体数据的处理方法。
本申请实施例中,会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种解码缓存的示意图;
图2是本申请实施例提供的一种多媒体数据的处理系统的结构示意图;
图3是本申请实施例提供的一种多媒体数据的处理方法的流程示意图;
图4是本申请实施例提供的一种自适应加载静态库的过程示意图;
图5是本申请实施例提供的另一种多媒体数据的处理方法的流程示意图;
图6是本申请实施例提供的一种多媒体数据的处理装置的结构示意图;
图7是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有的针对安卓系统(Android,一种由美国谷歌公司开发的移动操作系统)的音视频框架主要有两种,第一种是只使用Java(一门面向对象的编程语言)接口进行音视频编解码。其中,Java接口指的是用Java编写的接口。具体来说,Java接口可兼容的安卓系统版本相对来说是比较多的,且大部分开发者使用的编程语言为Java,因此使用Java接口进行音视频编解码被广泛使用。但由于音视频编解码的过程需要与安卓系统的多媒体框架层(Stagefright)进行交互,而Java通常并不是终端设备本地使用的编程语言,因此在使用Java接口时需依赖JNI(Java Native Interface)去提供若干的应用程序编程接口以实现Java和操作系统和硬件的交互。而Java接口对JNI的依赖也使得使用Java接口进行音视频编解码所需的内存增加,以及编解码的路径增大。
第二种是只使用Native接口进行音视频编解码。其中Native接口指的是通过终端设备的本地编程语言(如C、C++等)编写的接口。由于Native接口是通过本地编程语言(即终端设备的操作系统所使用的编程语言)编写的,因此Native接口不需要像Java接口通过JNI才能与Stagefright进行交互,而是可以直接与Stagefright进行交互,故而Native接口的相对Java接口来说所需的内存更少,以及Native接口编解码的路径更短,从而使得Native接口的编解码速度也高于Java接口。但是Native接口只支持5.0版本以上的安卓系统使用,且部分Native接口可能需要更高的系统才能使用,因此Native接口对于低版本的安卓系统不友好,兼容性较低。需要说明的是,接口是一系列方法的声明,而这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。也就是说,方法是能够实现某种功能的代码段,而类是多个方法的集合,接口则是声明完成某种任务所需要的方法。如用于完成音视频编解码任务的接口声明了多个具备不同的音视频编解码功能的方法,那么在音视频编解码时会依次找到相应的方法所属的类以实现调用相应的方法对音视频进行编解码处理。
此外,在音视频编解码的过程中通常会采用解码缓存的方式进行解码,其中,解码缓存指的是每一帧数据送进解码器时,解码器需要在解码缓存中缓存若干帧才会输出解码后的帧。其中缓存帧的过程可以被称为解码缓存,也可被称为囤帧。通常来说,若有囤帧的现象,一般会缓存3-6帧数据不等,造成48ms-96ms的解码延时。示例性地,请参见附图1,示出了一种解码缓存的示意图。在解码器101每缓存6帧才会输出解码后的帧,因此解码器101造成的解码延时约有96ms。解码缓存通常会导致单帧解码延时(即帧进入解码器的时间点与帧渲染到终端设备的显示屏幕上的时间点之间的差值)增大,如果在解码缓存的基础上再采用Java接口进行解码,会导致延时更大,不适用于对低延时需求高的视频场景,如云游戏,视频会议,视频通话等应用场景。另外,由于在大部分实时视频场景中所使用的帧内编码帧(Intra-Picture,简称I帧)和前后预测编码帧(Predictive-Picture,简称P帧)占用的内存较大,而不是像双向预测内插编码帧(Bi-directional interpolated predictionframe,简称B帧)一样节省内存空间,因此也进一步说明了所需的内存更大的Java接口不适用于对低延时需求高的视频场景。需要说明的是,可以使用CAVLC编码(上下文自适应的变长编码)、CABAC编码(基于上下文的自适应二进制算术编码)等方式进行音视频编解码,在此不限定。
基于此,本申请实施例提供了一种多媒体数据的处理方案,该方案在进行编解码处理之前,会先加载用于存储目标函数的目标动态库,其中目标函数指的是第一静态库中的代码段所调用的函数。当目标动态库加载成功,且目标动态库中存在目标函数时,会加载第一静态库,后续会调用第一静态库中的代码段对待处理多媒体数据进行编解码处理;当目标动态库加载失败,或者目标动态库中不存在目标函数时,会加载第二静态库,后续则会调用第二静态库中的代码段对待处理多媒体数据进行编解码处理。需要说明的是,第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,第二静态库中的代码段是由预设编程语言编写得到的,预设编程语言不同于操作系统所使用的编程语言。
不难看出,本方案会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。
具体来说,静态库是指在实际使用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件。第一静态库中包括通过终端设备运行的操作系统所使用的编程语言编写的音视频编解码所需的类,由于一个类包括多个方法,且Native接口所使用的编程语言也是终端设备运行的操作系统所使用的编程语言,那么,也就相当于第一静态库包括Native接口所声明的所有方法,从而可以推理出第一静态库是对Native接口的抽象化与封装,进而可以推理出通过调用第一静态库中的代码段的方式对待处理多媒体数据进行编解码处理也就相当于调用Native接口对待处理多媒体数据进行编解码处理。第二静态库中包括通过预设编程语言编写的音视频编解码所需的类,当所述预设编程语言为Java时,也就相当于第二静态库包括Java接口所声明的所有方法,从而可以推理出第二静态库是对Java接口的抽象化与封装。那么,通过调用第二静态库中的代码段的方式对待处理多媒体数据进行编解码处理也就相当于调用Java接口对待处理多媒体数据进行编解码处理。
具体实现中,可以设定hwcodecnative库为第一静态库,hwcodecjava库为第二静态库,hwcodecnative库和hwcodecjava库可以统称为hwcodec库。其中,hwcodecnative库包括对Native接口抽象出NObject类(Native的基类,多个类的共同起源被称为基类),以及hwcodecnative库还包括基于NObject继承的与音视频编解码相关的类,如NMediacodec(用本地编程语言编写的用于编解码的类),NMediaFormat(用本地编程语言编写的用于定义多媒体数据的媒体格式的类),NMediaCrypto(用本地编程语言编写的用于安全加密的类)等与音视频编解码相关的类。除此之外,hwcodecnative库中还需要保存着Native接口中需要使用到的Native类,如AMediacodec(用于编解码的类),AMediaFormat(用于定义多媒体数据的媒体格式的类),AMediaCrypto(用于安全加密的类)等Native接口中提供的类。hwcodecjava库包括对Java接口抽象出JObject类(Java的基类),以及hwcodecjava库还包括基于JObject继承的与音视频编解码相关的类,如JMediacodec(用Java编写的用于编解码的类),JMediaFormat(用Java编写的用于定义多媒体数据的媒体格式的类),JMediacrypto(用Java编写的用于安全加密的类)等与音视频编解码相关的类。可选地,NMediacodec和JMediacodec等类中的方法在被调用时会生成相同参数相同名字的音视频编解码函数,因此虽然分别使用的是第一静态库和第二静态库,业务层(即与终端设备进行交互的层)不需要考虑具体使用的是哪一类接口,只需调用音视频编解码函数即可。同时,由于第一静态库和第二静态库被调用的代码段的功能是一致的,所以业务层也只需写一套编解码逻辑(即音视频编解码函数)即可,由该编解码逻辑决定在编解码的过程中什么时候调用哪个方法,无需根据不同静态库重新写新的编解码逻辑,有利于提高代码的复用性。
此外,静态库和动态库(Dynamic Link Library或者Dynamic-link Library,缩写为DLL,也被称为动态链接库)都属于通过封装代码开放接口从而达到保护核心代码的目的。其中,静态库是静态的,也就是说不会被动态编译,只会静态编译,节省了编译时间,提高了编译速度;动态库是动态加载的,在不同应用的运行进程会加载不同的代码段,有利于节省内存空间和提升系统的性能。而所述目标动态库指的是安卓系统中帮助开发者快速通过本地编程语言进行开发的动态库。具体实现中。目标动态库可以是NDK库(AndroidNative Development Kit),用于帮助开发者在安卓系统下快速开发C或C++的动态库。
基于上述多媒体数据的处理方法,本申请实施例提供了一种多媒体数据的处理系统,可参见图2,图2所示的多媒体数据的处理系统可以包括多个终端设备201和多个服务器202,其中任一终端设备和任一服务器之间均建立有通信连接。终端设备201可以包括智能手机、平板电脑、笔记本电脑、台式计算机、智能车载以及智能可穿戴设备中的任意一种或多种。终端设备201内可运行各式各样的客户端(application,APP),如多媒体播放客户端、社交客户端、浏览器客户端、信息流客户端、教育客户端,等等。服务器202可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备201以及服务器202之间可以通过有线或无线通信方式进行直接或间接地通信连接,本申请在此不做限制。
在一个实施例中,上述多媒体数据的处理方法可以仅由图2所示的多媒体数据的处理系统中的终端设备201执行,具体执行过程为:终端设备201加载用于存储目标函数的目标动态库,其中目标函数指的是第一静态库中的代码段所调用的函数。当目标动态库加载成功,且目标动态库中存在目标函数时,终端设备201会加载第一静态库;之后,终端设备201会调用第一静态库中的代码段对待处理多媒体数据进行编解码处理,以得到编解码处理后的多媒体数据,并输出编解码处理后的多媒体数据。当目标动态库加载失败,或者目标动态库中不存在目标函数时,终端设备201会加载第二静态库;之后,终端设备201会调用第二静态库中的代码段对待处理多媒体数据进行编解码处理,以得到编解码处理后的多媒体数据,并输出编解码处理后的多媒体数据。
在另一个实施例中,上述多媒体数据的处理方法可以运行在多媒体数据的处理系统中,多媒体数据的处理系统可以包括终端设备和服务器,其中,所述多媒体数据的处理方法可由图2所示的多媒体数据的处理系统中所包含的终端设备201和服务器202来共同完成,其中终端设备201中运行有用于多媒体播放的客户端,具体执行过程为:服务器202向终端设备201中运行的客户端发送待处理多媒体数据,终端设备201中运行的客户端先加载用于存储目标函数的目标动态库,其中目标函数指的是第一静态库中的代码段所调用的函数。当目标动态库加载成功,且目标动态库中存在目标函数时,终端设备201中运行的客户端会加载第一静态库;之后,终端设备201中运行的客户端会调用第一静态库中的代码段对待处理多媒体数据进行编解码处理,以得到编解码处理后的多媒体数据,并输出编解码处理后的多媒体数据。当目标动态库加载失败,或者目标动态库中不存在目标函数时,终端设备201中运行的客户端会加载第二静态库;之后,终端设备201中运行的客户端会调用第二静态库中的代码段对待处理多媒体数据进行编解码处理,以得到编解码处理后的多媒体数据,并输出编解码处理后的多媒体数据。
基于上述多媒体数据的处理方案以及多媒体数据的处理系统,本申请实施例提供了一种多媒体数据的处理方法。参见图3,为本申请实施例提供的一种多媒体数据的处理方法的流程示意图。图3所示的多媒体数据的处理方法可由图2所示的终端设备执行。图3所示的多媒体数据的处理方法可包括步骤S301-S303:
S301,加载目标动态库。
在本申请实施例中,所述目标动态库用于存储目标函数,而所述目标函数指的是第一静态库中的代码段所调用的函数。由于第一静态库中存在部分代码段会调用目标动态库中的函数(也是一个代码段),因此使用第一静态库的一个前提是存在已经加载好了的目标动态库。具体实现中,所述目标动态库可以是mediandk库这个NDK库,那么加载将Native接口抽象化的第一静态库之前,需要加载安卓系统自带的mediandk库,但是mediandk库只存在于版本号为5.0以上的安卓系统中,若在低版本的安卓系统中加载会造成崩溃。因此需要先对mediandk库进行试加载。
可选地,由于上述提及Native接口只支持5.0版本以上的安卓系统使用,且部分Native接口可能需要更高的系统才能使用,以及第一静态库是对Native接口进行抽象化和封装得到的,因此在加载目标动态库之前,还可以:先获取终端设备运行的操作系统的系统版本标识;若系统版本标识高于或等于预设版本标识,则触发执行加载目标动态库,当目标动态库加载成功,且目标动态库中存在目标函数时,加载第一静态库,调用第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当目标动态库加载失败,或者目标动态库中不存在目标函数时,加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;若系统版本标识低于预设版本标识,则加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行编解码处理,并输出第二编解码处理后的多媒体数据。
其中,所述终端设备运行的操作系统可以是安卓系统。所述系统版本标识指的是能够唯一标识终端设备运行的操作系统的版本的信息。具体来说,所述系统版本标识可以是系统版本号,如Android 1.0、Android 1.1等;可以是操作系统的系统版本名称,如阿童木(指示Android 1.0)、发条机器人(指示Android1.0)、青柠派(指示Android 5.0)等;也可以是操作系统的系统版本编码,如1(指示Android 1.0)、9(指示Android 2.3)等;还可以是操作系统的版本等级,如版本等级21指示Android 5.0,版本等级23指示Android 6.0,在此不限定。此外,所述预设版本标识可以是人为设定的,也可以是系统设定的,在此不限定。所述系统版本标识可以是系统版本号,如Android 1.0、Android 1.1等;可以是操作系统的系统版本名称,如阿童木(指示Android 1.0)、发条机器人(指示Android 1.0)、青柠派(指示Android 5.0)等;也可以是操作系统的系统版本编码,如1(指示Android 1.0)、9(指示Android 2.3)等;还可以是操作系统的版本等级,如版本等级21指示Android 5.0,版本等级23指示Android 6.0,在此不限定。
可选地,由于当系统版本标识过高时,说明获取到的系统版本标识不正常,因此若获取到的终端设备运行的操作系统的系统版本标识高于目标版本标识,则加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。其中目标版本标识大于预设版本标识,所述目标版本标识可以是系统版本号,如Android 1.0、Android1.1等;可以是操作系统的系统版本名称,如阿童木(指示Android 1.0)、发条机器人(指示Android 1.0)、青柠派(指示Android 5.0)等;也可以是操作系统的系统版本编码,如1(指示Android 1.0)、9(指示Android 2.3)等;还可以是操作系统的版本等级,如版本等级21指示Android 5.0,版本等级23指示Android6.0,在此不限定。
具体实现中,由于上述提及Native接口只支持5.0版本以上的安卓系统使用,也就是说Native接口只支持版本等级大于或等于21,因此预设版本标识可以是版本等级21。那么,所述获取终端设备运行的操作系统的系统版本标识的方式可以是:获取安卓系统中自带的字段“ro.build.version.sdk”,该字段的属性的值为当前安卓系统的版本等级(即system_version);然后再将获取到的版本等级与预设版本标识进行比较。若获取到的版本等级大于或等于21,则加载第一静态库;若获取到的版本等级低于21,则加载第二静态库。可选地,若获取到的版本等级system_version大于256(即目标版本标识),则说明该安卓系统的版本等级获取不正常,此时直接加载第一静态库。
S302,当目标动态库加载成功,且目标动态库中存在目标函数时,加载第一静态库,调用第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据。
在本申请实施例中,确定目标动态库是否加载成功的方式可以是:调用动态库开启函数,在操作系统中查找并加载目标动态库;若动态库开启函数的返回值为指示目标动态库的地址指针,则确定目标动态库加载成功;若动态库开启函数的返回值为第一预设返回值,则确定目标动态库加载失败。
具体来说,所述第一预设返回值可以是NULL(即空),也可以是其他用于指示查找失败的字符或短语,在此不限定。所述动态库开启函数可以是dlopen函数(一个计算机函数,功能是以指定模式打开指定的动态链接库文件),其中,dlopen函数的参数包括待打开的动态链接库在操作系统中的位置/路径(即pathname),以及打开动态链接库的模式(即mode)。另外,若dlopen函数的返回值为句柄(即一种指针,当要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄),则说明动态链接库加载成功;若dlopen函数的返回值为NULL,则说明动态链接库打开错误,即动态链接库加载失败。
另外,确定目标动态库是否存在目标函数的方式可以是:调用地址查找函数,获取目标函数的函数标识,并在目标动态库中查找函数标识与函数标识相同的函数;若地址查找函数的返回值为查找到的函数的函数地址,则确定目标动态库中存在目标函数;若地址查找函数的返回值为第二预设返回值,则确定目标动态库中不存在目标函数。
具体来说,所述第二预设返回值可以是NULL,也可以是其他用于指示查找失败的字符或短语,在此不限定。所述地址查找函数可以是dlsym函数(一个计算机函数,功能是根据动态链接库操作句柄与符号,返回符号对应的地址)。其中,dlsym函数的参数包括上述dlopen函数返回的句柄,以及要求获取的函数或全局变量的名称。若dlsym函数的返回值为指向所述要求获取的函数或全局变量的地址,则说明dlopen函数打开的动态链接库中存在该dlsym函数要求获取的函数或全局变量;若dlsym函数的返回值为NULL,则说明dlopen函数打开的动态链接库中不存在该dlsym函数要求获取的函数或全局变量。
此外,上述提及可以通过编解码逻辑,决定在编解码的过程中什么时候调用哪个方法,同时,由于某一步的编解码需要调用第一静态库中的某个方法(即代码段)得到相应的返回参数以进行下一步的编解码。因此所述加载第一静态库,调用第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据的具体方式可以是:在第一静态库加载成功之后,调用用于对多媒体数据进行编解码的编解码函数,按照编解码顺序调用第一静态库中的代码段对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据。
可选地,若在调用第一静态库中的代码段时,检测到调用错误提示信息,则卸载第一静态库;加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。具体来说,所述调用错误提示信息可以是文字报错、语音报错、终端设备黑屏等与说明无法调用第一静态库中的代码段相关的信息,在此不限定。由于第一静态库对操作系统和终端设备的硬件的要求较高,因此可以在已经调用第一静态库中的代码段之后,持续检查调用过程是否出现错误或崩溃,如果出现错误则可以立刻自动卸载第一静态库,改为加载兼容性更高的第二静态库,后续则调用第二静态库中的代码段对待处理多媒体数据进行第二编解码处理。
需要说明的是,虽然上述提及业务层只需写一套编解码逻辑(即音视频编解码函数)即可,由该编解码逻辑决定在编解码的过程中什么时候调用哪个方法,无需根据不同静态库重新写新的编解码逻辑,但由于两次编解码处理的过程中所调用的代码段不同,因此通过第一编解码处理和第二编解码处理来进行区分,后续不再赘述。
S303,当目标动态库加载失败,或者目标动态库中不存在目标函数时,加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。
在本申请实施例中,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于操作系统所使用的编程语言,也就是说预设编程语言不是本地编程语言,预设编程语言与第一静态库所使用的编程语言不同。所述加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据的具体方式可以是:确定用于对多媒体数据进行编解码的编解码函数需要调用的目标代码段的代码段标识,调用含有代码段标识的第一查找函数,查找目标代码段所属的目标代码段集合;调用含有代码段标识的第二查找函数,在目标代码段集合中查找代码段标识对应的代码段;通过处理函数,调用查找到的目标代码段对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。
具体实现中,由于上述提及在使用Java接口时需依赖JNI去提供若干的应用程序编程接口以实现Java和操作系统和硬件的交互,因此当预设编程语言为Java时,使用JNI调用Java接口的过程主要包括:
1)使用FindClass方法(用于获取类的方法)获取指定类,其中FindClass方法相当于上述的第一查找函数,类相当于上述的目标代码段所属的目标代码段集合;
2)使用GetStaticMethodID方法(用于获取静态方法ID的方法)或者GetMethodID方法(用于获取非静态方法ID的方法)在类中获取静态和非静态的方法ID,其中GetStaticMethodID方法或者GetMethodID方法相当于上述的第二查找函数,当GetStaticMethodID方法或者GetMethodID方法的返回值为方法ID时,也就说明查找到目标代码段;
3)使用CallObjectMethod方法(用于调用非静态方法的方法)或者CallStaticObjectMethod方法(用于调用静态方法的方法)调用非静态或者静态方法,对于没有返回值的静态或者非静态方法,使用CallStaticVoidMethod方法(用于调用无返回值的静态方法的方法)调用,需要说明的是,所述CallObjectMethod方法、CallStaticObjectMethod方法或者CallStaticVoidMethod方法相当于上述的处理函数,所述静态或者非静态方法相当于上述的目标代码段。
具体实现中,请参见附图4,示出了一种自适应加载静态库的过程示意图。可以预先设置一个代表接口类型的字段native_api,当native_api的值为1时,加载hwcodecnative库(即第一静态库),当native_api的值为0时,则加载hwcodecjava库(即第二静态库)。
由于调用hwcodecnative库进行编解码处理的性能会高于调用hwcodecjava库进行编解码处理,因此如步骤S401所示,优先将设置native_api=1,然后执行步骤S402至S403,获取操作系统的版本等级,并判断版本等级是否大于21且小于256。当版本等级小于21或者大于256时,执行步骤S404,将设置native_api=0,并执行步骤S405加载hwcodecjava库。具体实现中,可以通过安卓系统自带的字段“ro.build.version.sdk”获取到安卓系统的版本等级system_version。若system_version小于21,或者system_version大于256,则将native_api置为0;若system_version大于21,且system_version小于256,则不改变native_api的值。
当版本等级大于21且小于256时,执行步骤S406,开始加载hwcodecnative库所依赖的mediandk库,其中加载mediandk库的具体方式为通过dlopen函数去查找并加载mediandk库。在确定开始加载mediandk库之后,执行步骤S407判断dlopen函数是否查找并成功加载mediandk库,若dlopen函数没有查找到mediandk库,或者没有成功加载mediandk库,则执行步骤S404,将设置native_api=0,并执行步骤S405加载hwcodecjava库;若dlopen函数查找并成功加载mediandk库,则执行步骤S408,进一步判断dlsym函数是否从mediandk库中查找到目标代码段。
若在经过步骤S408后,native_api仍然等于1(即dlsym函数从mediandk库中查找到目标代码段),则如步骤S409所示,此时可以开始加载hwcodecnative库。需要说明的是,只要native_api=0,就加载hwcodecjava库。最后,hwcodecnative库完成加载后,会再设置一道保险,也就是如步骤S410所示,后续会判断在调用hwcodecnative库时是否出现了报错或黑屏;若没有出现报错或黑屏,则继续调用hwcodecnative库进行音视频编解码;若出现了报错或黑屏,则立刻执行步骤S411卸载hwcodecnative库并加载hwcodecjava库,同时,后续会调用hwcodecjava库完成音视频编解码。
本申请实施例中,会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。
基于上述多媒体数据的处理方案以及多媒体数据的处理系统,本申请实施例提供了另一种多媒体数据的处理方法。参见图5,为本申请实施例提供的另一种多媒体数据的处理方法的流程示意图。图5所示的多媒体数据的处理方法可由图2所示的终端设备中运行的客户端执行。图5所示的多媒体数据的处理方法可包括如下步骤:
S501,获取终端设备的处理器的处理器标识。
在本申请实施例中,所述终端设备的处理器指的是集成了中央处理器(CPU)、图形处理器(GPU)、数字信号处理器(DSP)、图像处理器(ISP)、神经网络处理器(NPU)等一种或者多种处理器。所述处理器标识可以是终端设备的处理器的型号、编码或名称,在此不限定。具体来说,终端设备可以是手机、平板电脑等移动终端设备,那么终端设备的处理器可以是手机芯片、平板电脑芯片等。举例来说,当终端设备的处理器为手机芯片时,处理器标识可以是手机芯片的型号,如骁龙855、骁龙865、麒麟820、麒麟985等。
可选地,在获取终端设备的处理器的处理器标识之前,终端设备中运行的客户端还可以判断是否是该客户端在启动之后首次检测到对多媒体数据的编解码需求;若该客户端是在启动之后首次检测到对多媒体数据的编解码需求,则触发执行步骤S501至S506;若该客户端在首次检测到对多媒体数据的编解码需求之后,再次检测到对多媒体数据的编解码需求,则调用首次检测到编解码需求时所加载的静态库中的代码段,对待处理多媒体数据进行编解码处理,并输出编解码处理后的多媒体数据。其中,所述对多媒体数据的编解码需求指的是播放多媒体数据或者上传多媒体数据的需求。具体来说,如果客户端在首次有对多媒体数据的编解码需求时已经自适应加载了最佳的静态库了的话,之后客户端可以直接调用首次检测到编解码需求时所加载的静态库中的代码段,对待处理多媒体数据进行编解码处理,不用每次检测到编解码需求时都要执行确定应该加载哪个静态库的过程,有利于提升编解码处理的速度。
举例来说,终端设备M运行的客户端是视频会议应用的客户端,那么在视频会议发起时,该视频会议应用的客户端的使用对象A会有关于上传自己的实时视频至视频会议应用的服务器以便于该服务器能够将自己的实时视频传输至参加视频会议的其他对象的编解码需求,以及关于接收服务器传输的参加视频会议的其他对象的实时视频,并播放参加视频会议的其他对象的实时视频的编解码需求。其中,如果使用对象A在打开了视频会议应用(即启动运行视频会议应用的客户端)之后,首次参加视频会议,那么可以确定视频会议应用的客户端是首次检测到对视频的编解码需求,那么,此时视频会议应用的客户端可以获取终端设备M的处理器的处理器标识,并判断终端设备M的处理器的处理器标识是否存在于标识黑名单中,若终端设备M的处理器的处理器标识不存在于标识黑名单中,则直接加载第二静态库,调用第二静态库中的代码段,对首次检测到的编解码需求指示的待处理视频进行第二编解码处理,并输出第二编解码处理后的视频;若终端设备M的处理器的处理器标识存在于标识黑名单中,则加载目标动态库,当目标动态库加载成功,且目标动态库中存在目标函数时,加载第一静态库,调用第一静态库中的代码段,对首次检测到的编解码需求指示的待处理视频进行第一编解码处理,并输出第一编解码处理后的视频;当目标动态库加载失败,或者目标动态库中不存在目标函数时,加载第二静态库,调用第二静态库中的代码段,对首次检测到的编解码需求指示的待处理视频进行第二编解码处理,并输出第二编解码处理后的视频。
如果使用对象A在打开了视频会议应用(即启动运行视频会议应用的客户端)之后,在上午参加了一次视频会议之后,没有退出视频会议应用(即没有停止运行视频会议应用的客户端),而是在下午又参加了另一个视频会议,那么,使用对象A参加了另一个视频会议时,可以确定视频会议应用的客户端是第二次检测到对视频的编解码需求,此时视频会议应用的客户端可以直接调用首次检测到编解码需求时所加载的静态库中的代码段,对第二次检测到的编解码需求指示的待处理多媒体数据进行编解码处理,并输出相应的编解码处理后的多媒体数据。
S502,处理器标识是否存在于标识黑名单。
在本申请实施例中,由于Native接口对终端设备的硬件也有一定的要求,存在部分处理器无法使用Native接口进行编解码,而第一静态库是对Native接口的抽象化和封装,导致部分处理器也无法加载和使用第一静态库进行编解码。因此,会有标识黑名单,该标识黑名单中包括一个或多个不能加载和使用第一静态库的处理器的处理器标识。
需要说明的是,当处理器标识存在于标识黑名单时,执行步骤S503;当处理器标识不存在于标识黑名单时,执行步骤S504至S506。
S503,加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。
在本申请实施例中,所述调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据的具体过程可以是:调用含有目标代码段的代码段标识的宏定义代码段调用函数,在第二静态库中查找目标代码段所属的代码段集合,其中,目标代码段指的是在第二编解码处理过程中需要调用的第二静态库中的代码段;调用宏定义代码段调用函数,在代码段集合中查找代码段标识对应的目标代码段;基于查找到的代码段对待处理多媒体数据进行第二编解码处理,得到第二编解码处理后的多媒体数据。
具体来说,所述宏定义代码段调用函数相当于将上述提及的使用JNI调用Java接口的过程进行了脚本化,每当需要使用Java接口中的某个方法(即目标代码段)时,就将该方法的方法ID(即代码段标识)写进宏定义代码段调用函数。也就是说,通过宏定义代码段调用函数,可以避免针对每个需要调用的第二静态库中的代码段编写一大段逻辑相似的调用代码,而是直接将每个需要调用的第二静态库中的代码段的代码段标识写入宏定义代码段调用函数就可以了,有利于提高代码段的复用性、便捷性、可读性和简洁性。
可选地,由于部分代码段(即方法或函数)支持的操作系统的版本不同,因此所述宏定义代码段调用函数还可以包括允许调用所述目标代码段的最高系统版本标识,以及允许调用目标代码段的最低系统版本标识,那么还可以:当终端设备运行的操作系统的系统版本标识低于最高系统版本标识,且系统版本标识高于最低系统版本标识时,触发执行所述调用含有目标代码段的代码段标识的宏定义代码段调用函数,查找目标代码段所属的代码段集合,以及代码段集合中与代码段标识相同的代码段,目标代码段指的是需要调用的第二静态库中的代码段,基于查找到的代码段对待处理多媒体数据进行第二编解码处理,得到第二编解码处理后的多媒体数据。具体来说,每个代码段的能够被调用的操作系统的版本不同,所述最高系统版本标识和最低系统版本标识可以是人为设定的,也可以是系统设定的,在此不限定。所述最高系统版本标识和最低系统版本标识可以是系统版本号,如Android 1.0、Android 1.1等;可以是操作系统的系统版本名称,如阿童木(指示Android1.0)、发条机器人(指示Android 1.0)、青柠派(指示Android 5.0)等;也可以是操作系统的系统版本编码,如1(指示Android 1.0)、9(指示Android 2.3)等;还可以是操作系统的版本等级,如版本等级21指示Android 5.0,版本等级23指示Android 6.0,在此不限定。
具体实现中,当第二静态库使用的预设编程语言为Java时,可以设定将上述提及的使用JNI调用Java接口的过程进行了脚本化,得到宏定义代码段调用函为:#defineJAVA_METHOD(mtype,cmethod,jmethod,sig,rtype,api,deprecated_api),其中宏定义代码段调用函数也可以称作脚本。该宏定义代码段调用函数中的7个参数的具体解释如表1所示:
表1
其中,操作系统使用的编程语言为Native,由Native编写的代码段都可以称作在Native环境下的方法;此外,由Java编写的代码段都可以称作在Java环境下的方法。由于用于编解码处理的音视频编解码函数通常都是Native编写,当音视频编解码函数需要调用cmethod指示的Native方法时,由于此时加载的是第二静态库,因此需要将cmethod指示的Native方法替换成jmethod指示的Java方法。此外,Java的方法签名是用于区分同名方法的参数个数和类型的手段,同时,由于不同方法的返回值的类型不同,因此需要rtype去声明Java类的返回类型。另外,api也就相当于上述提及的最低系统版本标识,而deprecated_api也就相当于上述提及的最高系统版本标识。
需要说明的是,通过调用该宏定义代码段调用函数,可以自动展开为如表2所示的函数以进行JNI调用的过程:
表2
其中,所述Java_##cmethod(int32_t*result,JNIEnv*env,...)函数相当于集成了上述的提及的使用JNI调用Java接口的过程的3个步骤中的所有函数,所述get_mid_##cmethod()函数的返回值是使用JNI调用Java接口的过程中第2个步骤获取到的方法ID,由于Java_##cmethod(int32_t*result,JNIEnv*env,...)函数在获取到jmethod指示的方法的方法ID之后,会保存下来,此时就会在不需要get_mid_##cmethod()函数去获取jmethod指示的方法的方法ID,但如果出现了Java_##cmethod(int32_t*result,JNIEnv*env,...)函数没有获取到jmethod指示的方法的方法ID的情况,则会调用get_mid_##cmethod()函数去获取jmethod指示的方法的方法ID。另外,所述env指的是打开Java环境的指针。所述调用异常处理函数指的是有些情况下调用第二静态库时会出现调用出错和崩溃的情况,此时可以通过JNI调用异常处理函数避免出现出错和崩溃的情况,以提高容错率和兼容性。
需要说明的是,在Native环境下,调用该宏定义代码段调用函数便可以自动对JNI调用过程中使用到的函数进行声明,在代码中便可以直接通过调用Java_##cmethod获得对应的Java方法的返回结果,实现了代码的简洁性与便捷性。
S504,加载目标动态库。
S505,当目标动态库加载成功,且目标动态库中存在目标函数时,加载第一静态库,调用第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据。
其中,步骤S504至步骤S505的具体实施方式可参见步骤S301至步骤S302的具体实施方式,在此不赘述。
S506,当目标动态库加载失败,或者目标动态库中不存在目标函数时,加载第二静态库,调用第二静态库中的代码段,对待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据。
其中,步骤S506的具体实施方式可参见步骤S503或者步骤S303的具体实施方式,在此不赘述。
在本申请实施例中,会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。另外,通过本方案中还宏定义代码段调用函数将JNI调用Java接口的过程脚本化,有利于提高代码段的复用性、便捷性、可读性和简洁性。
基于上述多媒体数据的处理方法的相关描述,本申请还公开了一种多媒体数据的处理装置。该多媒体数据的处理装置可以是运行与上述所提及的计算机设备中的一个计算机程序(包括程序代码)。该多媒体数据的处理装置可以执行如图3和图5所示的多媒体数据的处理方法,请参见图6,该多媒体数据的处理装置至少可以包括:加载单元601和处理单元602。
所述加载单元601,用于加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
所述处理单元602,用于当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
所述处理单元602,还用于当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
在一种实施方式中,所述处理单元602具体还可用于执行:
若在调用所述第一静态库中的代码段时,检测到调用错误提示信息,则卸载所述第一静态库;
加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
在又一种实施方式中,所述处理单元602还可用于执行:
获取所述终端设备的处理器的处理器标识;
若所述处理器标识存在于标识黑名单,则加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
在又一种实施方式中,所述处理单元602具体还可用于执行:
获取终端设备运行的操作系统的系统版本标识;
若所述系统版本标识高于或等于预设版本标识,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若所述系统版本标识低于所述预设版本标识,则加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行编解码处理,并输出所述第二编解码处理后的多媒体数据。
在又一种实施方式中,所述处理单元602具体还可用于执行:
若在启动之后首次检测到对多媒体数据的编解码需求,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若在所述首次检测到对多媒体数据的编解码需求之后,再次检测到对多媒体数据的编解码需求,则调用首次检测到编解码需求时所加载的静态库中的代码段,对待处理多媒体数据进行编解码处理,并输出编解码处理后的多媒体数据。
在又一种实施方式中,所述处理单元602在调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据时,具体可用于执行:
调用含有目标代码段的代码段标识的宏定义代码段调用函数,在所述第二静态库中查找所述目标代码段所属的代码段集合,所述目标代码段指的是在第二编解码处理过程中需要调用的所述第二静态库中的代码段;
调用所述宏定义代码段调用函数,在所述代码段集合中查找所述代码段标识对应的目标代码段;
基于查找到的目标代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
在又一种实施方式中,所述宏定义代码段调用函数还包括允许调用所述目标代码段的最高系统版本标识,以及允许调用所述目标代码段的最低系统版本标识;
所述处理单元602还可以用于执行:
当终端设备运行的操作系统的系统版本标识低于所述最高系统版本标识,且所述系统版本标识高于所述最低系统版本标识时,触发执行所述调用含有目标代码段的代码段标识的宏定义代码段调用函数,查找所述目标代码段所属的代码段集合,以及所述代码段集合中与所述代码段标识相同的代码段,所述目标代码段指的是需要调用的所述第二静态库中的代码段,基于所述查找到的代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
在又一种实施方式中,在确定所述目标动态库是否加载成功时,所述处理单元602具体还可用于执行:
调用动态库开启函数,在所述操作系统中查找并加载所述目标动态库;
若所述动态库开启函数的返回值为指示所述目标动态库的地址指针,则确定所述目标动态库加载成功;
若所述动态库开启函数的返回值为第一预设返回值,则确定所述目标动态库加载失败。
在又一种实施方式中,在确定所述目标动态库是否存在所述目标函数时,所述处理单元602具体可以用于执行:
调用地址查找函数,获取所述目标函数的函数标识,并在所述目标动态库中查找函数标识与所述函数标识相同的函数;
若所述地址查找函数的返回值为查找到的函数的函数地址,则确定所述目标动态库中存在所述目标函数;
若所述地址查找函数的返回值为第二预设返回值,则确定所述目标动态库中不存在所述目标函数。
根据本申请的一个实施例,图3和图5所示的方法所涉及各个步骤可以是由图6所示的多媒体数据的处理装置中的各个单元来执行的。例如,图3所示的步骤S301可由图6所示的多媒体数据的处理装置中的加载单元601来执行;步骤S302至步骤S303可由图6所示的多媒体数据的处理装置中的处理单元602来执行。再如,图5所示的步骤S501至步骤S503、步骤S505至步骤S506可由图6所示的多媒体数据的处理装置中的处理单元602来执行;步骤S504可由图6所示的多媒体数据的处理装置中的加载单元601来执行。
根据本申请的另一个实施例,图6所示的多媒体数据的处理装置中的各个单元是基于逻辑功能划分的,上述各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。在本申请的其它实施例中,上述基于多媒体数据的处理装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机设备的通用计算设备上,运行能够执行如图3或图5所示的方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图6所示的多媒体数据的处理装置,以及来实现本申请实施例的多媒体数据的处理方法。计算机程序可以记载于例如计算机存储介质上,并通过计算机存储介质装载于上述计算机设备中,并在其中运行。
本申请实施例中,会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。
基于上述的方法实施例以及装置实施例,本申请还提供了一种电子设备。参见图7,为本申请实施例提供的一种电子设备的结构示意图。图7所示的电子设备可至少包括处理器701、输入接口702、输出接口703以及计算机存储介质704。其中,处理器701、输入接口702、输出接口703以及计算机存储介质704可通过总线或其他方式连接。
计算机存储介质704可以存储在电子设备的存储器中,计算机存储介质704用于存储计算机程序,计算机程序包括程序指令,处理器701用于执行计算机存储介质704存储的程序指令。处理器701(或称CPU(Central Processing Unit,中央处理器))是电子设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现上述多媒体数据的处理方法流程或相应功能。
本申请实施例还提供了一种计算机存储介质(Memory),计算机存储介质是电子设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机存储介质既可以包括终端中的内置存储介质,当然也可以包括终端所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器701加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速随机存取存储器(random access memory,RAM)存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。
在一个实施例中,可由处理器701加载并执行计算机存储介质中存放的一条或多条指令,以实现上述有关图2和图5的多媒体数据的处理方法实施例中的方法的相应步骤,具体实现中,计算机存储介质中的一条或多条指令由处理器701加载并执行如下步骤:
处理器701加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
处理器701当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
处理器701当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
在一个实施例中,所述处理器701具体还可以用于执行:
若在调用所述第一静态库中的代码段时,检测到调用错误提示信息,则卸载所述第一静态库;
加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
在一个实施例中,所述处理器701具体还可用于执行:
获取所述终端设备的处理器的处理器标识;
若所述处理器标识存在于标识黑名单,则加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
在一个实施例中,所述处理器701具体还可用于执行:
获取终端设备运行的操作系统的系统版本标识;
若所述系统版本标识高于或等于预设版本标识,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若所述系统版本标识低于所述预设版本标识,则加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行编解码处理,并输出所述第二编解码处理后的多媒体数据。
在一个实施例中,所述处理器701具体还可用于执行:
若在启动之后首次检测到对多媒体数据的编解码需求,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若在所述首次检测到对多媒体数据的编解码需求之后,再次检测到对多媒体数据的编解码需求,则调用首次检测到编解码需求时所加载的静态库中的代码段,对待处理多媒体数据进行编解码处理,并输出编解码处理后的多媒体数据。
在一个实施例中,所述处理器701在调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据时,具体可用于执行:
调用含有目标代码段的代码段标识的宏定义代码段调用函数,在所述第二静态库中查找所述目标代码段所属的代码段集合,所述目标代码段指的是在第二编解码处理过程中需要调用的所述第二静态库中的代码段;
调用所述宏定义代码段调用函数,在所述代码段集合中查找所述代码段标识对应的目标代码段;
基于查找到的目标代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
在一个实施例中,所述宏定义代码段调用函数还包括允许调用所述目标代码段的最高系统版本标识,以及允许调用所述目标代码段的最低系统版本标识;
所述处理器701还可以用于执行:
当终端设备运行的操作系统的系统版本标识低于所述最高系统版本标识,且所述系统版本标识高于所述最低系统版本标识时,触发执行所述调用含有目标代码段的代码段标识的宏定义代码段调用函数,查找所述目标代码段所属的代码段集合,以及所述代码段集合中与所述代码段标识相同的代码段,所述目标代码段指的是需要调用的所述第二静态库中的代码段,基于所述查找到的代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
在一个实施例中,在确定所述目标动态库是否加载成功时,所述处理器701具体可以用于执行:
调用动态库开启函数,在所述操作系统中查找并加载所述目标动态库;
若所述动态库开启函数的返回值为指示所述目标动态库的地址指针,则确定所述目标动态库加载成功;
若所述动态库开启函数的返回值为第一预设返回值,则确定所述目标动态库加载失败。
在一个实施例中,在确定所述目标动态库是否存在所述目标函数时,所述处理器701还可用于执行:
调用地址查找函数,获取所述目标函数的函数标识,并在所述目标动态库中查找函数标识与所述函数标识相同的函数;
若所述地址查找函数的返回值为查找到的函数的函数地址,则确定所述目标动态库中存在所述目标函数;
若所述地址查找函数的返回值为第二预设返回值,则确定所述目标动态库中不存在所述目标函数。
本申请实施例中,会将不同编解码处理方式所需的代码段抽象化和封装成不同的静态库,以便于后续可以根据终端设备的实际情况自适应选择最合适的编解码处理方式。此外,由于第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的,因此调用第一静态库中的代码段进行编解码处理的延时是会低于调用第二静态库中的代码段进行编解码处理时的延时的。同时,调用第一静态库中的代码段对进行编解码处理时会依赖目标动态库中的目标函数,也就是说,加载第一静态库的前提条件是已经成功加载了存储有目标函数的目标动态库,否则直接加载第一静态库容易导致第一静态库在加载时崩溃,因此第一静态库的兼容性会低于第二静态库。由此可见,本方案通过先判断目标动态库是否加载成功,以及目标动态库中是否存储有目标函数的方式,以便于在目标动态库加载成功,以及目标动态库中存储有目标函数时优先加载第一静态库,从而实现在保证第一静态库不会加载崩溃的情况下,优先加载编解码处理延时更低的第一静态库,有利于在系统能够兼容的情况下,使得编解码速度更快。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该电子设备执行上述如图3和图5所示的方法实施例。其中,计算机可读存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
本发明实施例中的多媒体数据的处理方法可应用于各种具有播放或者拍摄多媒体数据的场景,在此不限定。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (13)
1.一种多媒体数据的处理方法,其特征在于,包括:
加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若在调用所述第一静态库中的代码段时,检测到调用错误提示信息,则卸载所述第一静态库;
加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述终端设备的处理器的处理器标识;
若所述处理器标识存在于标识黑名单,则加载所述第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出所述第二编解码处理后的多媒体数据。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取终端设备运行的操作系统的系统版本标识;
若所述系统版本标识高于或等于预设版本标识,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若所述系统版本标识低于所述预设版本标识,则加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行编解码处理,并输出所述第二编解码处理后的多媒体数据。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若在启动之后首次检测到对多媒体数据的编解码需求,则触发执行所述加载目标动态库,当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据,当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据;
若在所述首次检测到对多媒体数据的编解码需求之后,再次检测到对多媒体数据的编解码需求,则调用首次检测到编解码需求时所加载的静态库中的代码段,对待处理多媒体数据进行编解码处理,并输出编解码处理后的多媒体数据。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,包括:
调用含有目标代码段的代码段标识的宏定义代码段调用函数,在所述第二静态库中查找所述目标代码段所属的代码段集合,所述目标代码段指的是在第二编解码处理过程中需要调用的所述第二静态库中的代码段;
调用所述宏定义代码段调用函数,在所述代码段集合中查找所述代码段标识对应的目标代码段;
基于查找到的目标代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
7.根据权利要求6所述的方法,其特征在于,所述宏定义代码段调用函数还包括允许调用所述目标代码段的最高系统版本标识,以及允许调用所述目标代码段的最低系统版本标识;
所述方法还包括:
当终端设备运行的操作系统的系统版本标识低于所述最高系统版本标识,且所述系统版本标识高于所述最低系统版本标识时,触发执行所述调用含有目标代码段的代码段标识的宏定义代码段调用函数,查找所述目标代码段所属的代码段集合,以及所述代码段集合中与所述代码段标识相同的代码段,所述目标代码段指的是需要调用的所述第二静态库中的代码段,基于所述查找到的代码段对所述待处理多媒体数据进行第二编解码处理,得到所述第二编解码处理后的多媒体数据。
8.根据权利要求1-5任一项所述的方法,其特征在于,所述确定所述目标动态库是否加载成功的方式包括:
调用动态库开启函数,在所述操作系统中查找并加载所述目标动态库;
若所述动态库开启函数的返回值为指示所述目标动态库的地址指针,则确定所述目标动态库加载成功;
若所述动态库开启函数的返回值为第一预设返回值,则确定所述目标动态库加载失败。
9.根据权利要求1-5任一项所述的方法,其特征在于,确定所述目标动态库是否存在所述目标函数的方式包括:
调用地址查找函数,获取所述目标函数的函数标识,并在所述目标动态库中查找函数标识与所述函数标识相同的函数;
若所述地址查找函数的返回值为查找到的函数的函数地址,则确定所述目标动态库中存在所述目标函数;
若所述地址查找函数的返回值为第二预设返回值,则确定所述目标动态库中不存在所述目标函数。
10.一种多媒体数据的处理装置,其特征在于,所述多媒体数据的处理装置包括加载单元和处理单元,其中:
所述加载单元,用于加载目标动态库,所述目标动态库用于存储目标函数,所述目标函数指的是第一静态库中的代码段所调用的函数,所述第一静态库中的代码段是由终端设备运行的操作系统所使用的编程语言编写得到的;
所述处理单元,用于当所述目标动态库加载成功,且所述目标动态库中存在所述目标函数时,加载所述第一静态库,调用所述第一静态库中的代码段,对待处理多媒体数据进行第一编解码处理,并输出第一编解码处理后的多媒体数据;
所述处理单元,还用于当所述目标动态库加载失败,或者所述目标动态库中不存在所述目标函数时,加载第二静态库,调用所述第二静态库中的代码段,对所述待处理多媒体数据进行第二编解码处理,并输出第二编解码处理后的多媒体数据,所述第二静态库中的代码段是由预设编程语言编写得到的,所述预设编程语言不同于所述操作系统所使用的编程语言。
11.一种计算机设备,其特征在于,包括:
处理器,所述处理器适于实现一条或多条计算机程序;
计算机存储介质,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由所述处理器加载并执行如权利要求1-9任一项所述的多媒体数据的处理方法。
12.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或多条计算机程序,所述一条或多条计算机程序适于由处理器加载并执行如权利要求1-9任一项所述的多媒体数据的处理方法。
13.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序适于由处理器加载并执行如权利要求1-9任一项所述的多媒体数据的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210930666.1A CN117555606A (zh) | 2022-08-03 | 2022-08-03 | 多媒体数据的处理方法、相关设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210930666.1A CN117555606A (zh) | 2022-08-03 | 2022-08-03 | 多媒体数据的处理方法、相关设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117555606A true CN117555606A (zh) | 2024-02-13 |
Family
ID=89811599
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210930666.1A Pending CN117555606A (zh) | 2022-08-03 | 2022-08-03 | 多媒体数据的处理方法、相关设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117555606A (zh) |
-
2022
- 2022-08-03 CN CN202210930666.1A patent/CN117555606A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109194960B (zh) | 一种图像帧渲染方法、装置及电子设备 | |
JP5781497B2 (ja) | 拡張可能なメディア形式を持つホスト型アプリケーションプラットフォーム | |
CN107832099B (zh) | 一种客户端版本兼容的方法、装置及存储介质 | |
CN112817657B (zh) | 一种应用程序启动项加载方法、装置、系统及存储介质 | |
CN106850650B (zh) | 用于游戏客户端访问数据的方法及客户端游戏系统 | |
CN112463123A (zh) | 任务编译方法、装置、网络节点、系统及存储介质 | |
CN113590327A (zh) | 项目资源检测方法、装置、电子设备及存储介质 | |
CN106940714B (zh) | 一种数据处理方法、装置及电子设备 | |
CN112256421A (zh) | 通信处理方法、装置、存储介质及电子设备 | |
CN116560878B (zh) | 一种内存共享方法和相关装置 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
WO2023143545A1 (zh) | 资源处理方法、装置、电子设备及计算机可读存储介质 | |
CN114115884A (zh) | 一种编程服务的管理方法以及相关装置 | |
CN117555606A (zh) | 多媒体数据的处理方法、相关设备及存储介质 | |
CN111966508A (zh) | 一种消息的批量发送方法、装置、计算机设备和存储介质 | |
CN117971350A (zh) | 小程序运行方法、装置和计算机可读存储介质 | |
CN112527535B (zh) | 一种基于原生WebView扩展应用的互动方法及终端 | |
CN114546351A (zh) | 一种基于Java MVC架构的统一出参入参封装类结构、方法及电子设备 | |
CN108023966B (zh) | 通用网关接口请求处理方法、设备和存储介质 | |
CN113849157B (zh) | 动画播放管理的方法、装置、设备及存储介质 | |
CN111309322A (zh) | 一种基于规则式的响应式智能应用开发系统 | |
CN116700838B (zh) | 一种as语言接口函数、音视频处理方法和系统 | |
CN112764828B (zh) | 业务逻辑管理方法及装置、计算机设备和介质 | |
CN117573177A (zh) | 一种游戏客户端的热更新方法、装置、设备及存储介质 | |
CN114637680A (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 |