发明内容
本申请提供了一种音视频缓冲区读取处理方法及装置,用于解决现有的视联网音视频设备存在运行稳定性差的技术问题。
为解决上述技术问题,本申请第一方面提供了一种音视频缓冲区读取处理方法,包括:
响应于音视频数据读取指令,根据所述音视频数据读取指令对应的读取属性信息,生成读取句柄;
根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,读取存储在音视频缓存区中的所述目标音视频数据,其中,所述音视频缓冲区中的音视频数据是根据视联网音视频设备采集的原始音视频数据,对所述原始音视频数据进行预处理后得到的。
优选地,所述根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,读取存储在音视频缓存区中的所述目标音视频数据具体包括:
根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,从音视频缓存区中依次读取所述目标音视频数据中的单帧数据,当所述单帧数据使用完毕后,则释放所述单帧数据的应用再读取剩余的单帧数据,直至所述目标音视频数据全部读取完成为止。
优选地,所述根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,读取存储在音视频缓存区中的所述目标音视频数据具体包括:
根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,从音视频缓存区中一次性读取所述目标音视频数据。
优选地,所述当所述目标音视频数据使用完成之后,还包括:
销毁并释放所述读取句柄。
优选地,所述读取属性信息包括:读取模式信息与读取业务模块信息。
本申请第二方面提供了一种音视频缓冲区读取处理装置,包括:
读取句柄生成单元,用于响应于音视频数据读取指令,根据所述音视频数据读取指令对应的读取属性信息,生成读取句柄;
引用获取单元,用于根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,读取存储在音视频缓存区中的所述目标音视频数据,其中,所述音视频缓冲区中的音视频数据是根据视联网音视频设备采集的原始音视频数据,对所述原始音视频数据进行预处理后得到的。
优选地,所述引用获取单元具体用于:
根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,从音视频缓存区中依次读取所述目标音视频数据中的单帧数据,当所述单帧数据使用完毕后,再读取剩余的单帧数据,直至所述目标音视频数据全部读取完成为止。
优选地,所述引用获取单元具体用于:
根据需要获取的目标音视频数据,结合所述读取句柄,通过引用调用方式,从音视频缓存区中一次性读取所述目标音视频数据。
优选地,还包括:
句柄销毁单元,用于销毁并释放所述读取句柄。
优选地,所述读取属性信息包括:读取模式信息与读取业务模块信息。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请提供的方案通过对音视频缓冲区的数据读写方式改进,采用由消费者模块创建各自读取数据的句柄,利用该读取句柄作为唯一标识,以数据引用的方式从音视频缓冲区读取数据以用于进行业务处理,由于本方案的数据采用引用方式获取,不额外增加内存,当前消费者模块使用完数据后,可以对数据引用进行释放,通过这种读写方式能够以较低的硬件资源支持多个业务功能模块的运行,且不增加大幅的内存消耗,从而解决了现有的视联网音视频设备因内存资源紧缺导致的运行稳定性差的技术问题。
具体实施方式
针对现有的视联网音视频设备普遍存在的内存资源紧缺现状,申请人对现有的视联网音视频系统架构进行深入研究,通过研究发现,旧版架构为单生产者单消费者架构,具体如图1所示,这种架构下,硬件设备采集的音视频数据根据业务分别存储多个缓冲区作为生产者,各个消费者业务消费各自的缓冲区消费数据,在旧版的架构下,音视频采用单生产者单消费者,多个业务场景使用多个缓冲区,例如,假设设备使用的音视频业务有5个,按照旧版本架构需要开通5个音视频缓冲区,消耗资源巨多,造成硬件内存资源的浪费,使得硬件资源不足以支撑可持续的业务发展。
针对旧版架构存在的问题,本申请实施例提供了一种音视频缓冲区读取处理方法及装置,用于解决现有的视联网音视频设备存在运行稳定性差的技术问题。
为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本申请一部分实施例,而非全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
请参阅图2与图3,本申请第一个实施例提供的一种音视频缓冲区读取处理方法,包括:
步骤101、响应于音视频数据读取指令,根据音视频数据读取指令对应的读取属性信息,生成读取句柄。
步骤102、根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,读取存储在音视频缓存区中的目标音视频数据。
其中,音视频缓冲区中的音视频数据是根据视联网音视频设备采集的原始音视频数据,对原始音视频数据进行预处理后得到的。
需要说明的是,SDK软件内部不同的业务功能模块,例如包括云存储模块、视频直播模块等,这些模块是系统中的音视频媒体数据的消费主体,因此也被称为消费者模块。而音视频缓冲区用于存储IPC等设备采集到的音视频数据,具体可包括每一帧数据对应的时间戳、数据长度、编码类型等属性,写入SDK的音视频缓冲区,同时,SDK软件还可以对输入的音视频数据做预处理,上述的预处理包括但不限于:当缓存区已满时进行丢帧处理,以及对存储的音视频数据进行关键帧标记、索引记录等数据优化处理。
当视联网设备的业务功能模块需要从音视频缓存区获取音视频数据时,系统会自动生成音视频数据读取指令,此指令用于触发并控制业务功能模块执行本申请提供的音视频缓冲区读取处理方法。当业务功能模块接收并响应了该音视频数据读取指令后,业务功能模块会根据音视频数据读取指令对应的读取属性信息,生成相应的读取句柄,通过读取句柄作为唯一标识从音视频缓冲区读取数据,其中,读取属性信息包括:读取模式信息与读取业务模块信息。
在得到读取句柄后,则可以利用该读取句柄,再结合需要获取的音视频数据,即目标音视频数据,通过引用调用方式,读取存储在音视频缓存区中的目标音视频数据,由于本申请的数据采用引用方式获取,不额外增加内存,当前消费者模块使用完数据后,可以对数据引用进行释放,极大地减小了内存使用。
为了更清楚地说明本申请的技术方案,本申请还提供了关于音视频缓冲区读取处理方法在系统层面的完整实施例的示例说明。
终端IPC硬件厂商接入视联SDK,硬件获取到已经编码的H264或H265数据和音频PCM数据,包括时间戳、帧类型、数据内容和对应长度,传参进入SDK音视频环形缓冲区。缓冲区内部判断是否已满,若当前缓冲区已满,则做数据丢帧处理,具体为将最旧的GOP数据丢掉,保持最新的帧数据写入环形缓冲尾部,写缓冲区按照此逻辑循环处理;
读取数据的业务模块包括云存上传、卡录像、流媒体转发、P2P点对点直播,按照需要读取的模式创建各自的读取句柄,然后通过句柄采用原数据引用的方式获取缓冲内容,获取后直接使用,不用再额外开销内存,但是不能修改原数据内容,使用完毕后对引用进行释放,如此循环获取直到当前业主关闭对应读取句柄为止。
从上述提供的技术方案可以看出,本申请提供的方案通过对音视频缓冲区的数据读写方式改进,采用由消费者模块创建各自读取数据的句柄,利用该读取句柄作为唯一标识,以数据引用的方式从音视频缓冲区读取数据以用于进行业务处理,由于本方案的数据采用引用方式获取,不额外增加内存,当前消费者模块使用完数据后,可以对数据引用进行释放,而且由于句柄占用的空间极小(一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节),即使音视频缓存区中的数据同时被多个读取句柄引用,其产生的资源消耗也远小于旧架构的资源消耗,因此,通过本申请提供的缓存区读取方式能够以较低的硬件资源支持多个业务功能模块的运行,且不增加大幅的内存消耗,从而解决了现有的视联网音视频设备因内存资源紧缺导致的运行稳定性差的技术问题。
以上内容为本申请提供的一种音视频缓冲区读取处理方法的一个实施例的详细说明,下面为本申请提供的一种音视频缓冲区读取处理方法的另一个实施例的详细说明。
请参阅图4,在上述第一个实施例的基础上,本申请第二个实施例提供的一种音视频缓冲区读取处理方法,包括:
进一步地,步骤102中提及的根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,读取存储在音视频缓存区中的目标音视频数据,其步骤过程具体包括:
步骤1021、根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,从音视频缓存区中依次读取目标音视频数据中的单帧数据,当单帧数据使用完毕后,则释放单帧数据的应用再读取剩余的单帧数据,直至目标音视频数据全部读取完成为止。
在一些实施例中,步骤102的步骤过程也可以包括:
步骤1022、根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,从音视频缓存区中一次性读取目标音视频数据。
需要说明的是,上述的步骤1021与步骤1022都是对业务功能模块从音视频缓存区获取音视频数据的步骤细化。其中,步骤1021提供的是逐帧引用的方式,具体为:根据创建的读取句柄,采用引用调用的方式,按照单帧循环获取的方式读取该目标音视频数据的单帧数据,当该单帧数据使用完成后,则可以释放引用,再继续读取下一帧数据,如此循环,直至该目标音视频数据的全部帧数据均读取完成为止;而步骤1022提供的是一次性引用的方式,例如,根据创建的读取句柄,通过多个读取句柄与目标音视频数据的各帧一一对应,然后通过引用调用方式,一次性读取目标音视频数据。
以上两种读取方式,一般情况下优选采用步骤1021提及的逐帧引用方式,但在一些特殊的应用场景下,例如要获取的目标音视频数据仅为少量的关键帧时,也可以采用步骤1022提及的一次性引用方式。
进一步地,当目标音视频数据使用完成之后,还包括:
步骤103、销毁并释放读取句柄。
需要说明的是,若当前业务功能模块消费完数据后,可以销毁读取句柄,从而释放该读取句柄所占用的资源。
以上内容为本申请提供的一种音视频缓冲区读取处理方法的另一个实施例的详细说明,下面为本申请提供的一种音视频缓冲区读取处理装置的一个实施例的详细说明。
请参阅图5,本申请第三个实施例提供了一种音视频缓冲区读取处理装置,包括:
读取句柄生成单元201,用于响应于音视频数据读取指令,根据音视频数据读取指令对应的读取属性信息,生成读取句柄;
引用获取单元202,用于根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,读取存储在音视频缓存区中的目标音视频数据,其中,音视频缓冲区中的音视频数据是根据视联网音视频设备采集的原始音视频数据,对原始音视频数据进行预处理后得到的。
进一步地,引用获取单元202具体用于:
根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,从音视频缓存区中依次读取目标音视频数据中的单帧数据,当单帧数据使用完毕后,再读取剩余的单帧数据,直至目标音视频数据全部读取完成为止。
进一步地,引用获取单元202具体用于:
根据需要获取的目标音视频数据,结合读取句柄,通过引用调用方式,从音视频缓存区中一次性读取目标音视频数据。
进一步地,还包括:
句柄销毁单元203,用于销毁并释放读取句柄。
进一步地,读取属性信息包括:读取模式信息与读取业务模块信息。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的终端,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例,例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。