CN109271327B - 内存管理方法及装置 - Google Patents

内存管理方法及装置 Download PDF

Info

Publication number
CN109271327B
CN109271327B CN201710587746.0A CN201710587746A CN109271327B CN 109271327 B CN109271327 B CN 109271327B CN 201710587746 A CN201710587746 A CN 201710587746A CN 109271327 B CN109271327 B CN 109271327B
Authority
CN
China
Prior art keywords
memory
memory address
video frame
frame data
multiplexing queue
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
Application number
CN201710587746.0A
Other languages
English (en)
Other versions
CN109271327A (zh
Inventor
徐峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision Digital Technology Co Ltd
Original Assignee
Hangzhou Hikvision Digital Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision Digital Technology Co Ltd filed Critical Hangzhou Hikvision Digital Technology Co Ltd
Priority to CN201710587746.0A priority Critical patent/CN109271327B/zh
Priority to PCT/CN2018/088395 priority patent/WO2019015395A1/zh
Priority to EP22164063.4A priority patent/EP4040299B1/en
Priority to EP18834482.4A priority patent/EP3640807B1/en
Priority to US16/631,304 priority patent/US11604726B2/en
Publication of CN109271327A publication Critical patent/CN109271327A/zh
Application granted granted Critical
Publication of CN109271327B publication Critical patent/CN109271327B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4334Recording operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4335Housekeeping operations, e.g. prioritizing content for deletion because of storage space restrictions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing 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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本发明公开了一种内存管理方法及装置,属于网络技术领域。该方法包括:基于内存复用队列,为视频帧数据分配第一内存地址,内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址;将视频帧数据存储至第一内存地址所指示的内存空间;在基于视频帧数据进行渲染后,将第一内存地址添加到内存复用队列中。通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。

Description

内存管理方法及装置
技术领域
本发明涉及网络技术领域,特别涉及一种内存管理方法及装置。
背景技术
终端能够通过浏览器在网页上进行视频播放,在播放视频的过程中,终端需要对浏览器占用的内存进行管理,比如为浏览器解码视频流分配内存,以及回收分配的内存。
现有技术中,浏览器从服务器接收到视频流后,一般以帧为单位对视频流进行解码,对于解码所得到的每一帧视频数据,终端均需要分配一定大小的内存空间,来存储该解码后的每一帧视频数据,以便后续对解码后的每一帧视频数据进行渲染,从而在终端呈现视频画面。其中,分配一定大小的内存空间是指分配内存地址,对于已经分配的内存地址,终端会定期进行回收。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
对于帧率较高的视频数据,比如帧率为25fps(帧每秒)的视频数据,1秒钟便需要进行25次内存分配,1分钟就达到1500次,导致短时间内会为浏览器分配大量的内存地址,即使对分配的内存地址进行定期回收,如此大量的内存地址也无法得到及时回收,导致内存占用量大,内存利用率低。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种内存管理方法及装置,能够提高内存利用率。所述技术方案如下:
第一方面,提供了一种内存管理方法,所述方法包括:
基于内存复用队列,为视频帧数据分配第一内存地址,所述内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址;
将所述视频帧数据存储至所述第一内存地址所指示的内存空间;
在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中。
在一种可能的实现方式中,所述基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果所述内存复用队列中包含有内存地址,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址,所述第二内存地址所指示的内存空间不小于所述视频帧数据的数据量;
如果从所述内存复用队列中获取到所述第二内存地址,将所述第二内存地址移出所述内存复用队列,并将所述第二内存地址作为所述第一内存地址。
在一种可能的实现方式中,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址之后,所述方法还包括:
如果未从所述内存复用队列中获取到所述第二内存地址,从所述内存复用队列以外内存地址中获取第三内存地址,所述第三内存地址所指示的内存空间不小于所述视频帧数据的数据量;
将所述第三内存地址作为所述第一内存地址。
在一种可能的实现方式中,所述基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果所述内存复用队列中未包含有内存地址,获取所述内存复用队列所包含内存地址以外的第四内存地址;
将所述第四内存地址作为所述第一内存地址。
在一种可能的实现方式中,所述方法还包括:
当接收到视频流时,获取所述视频流的分辨率;根据所述分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
在对接收到的视频流进行解码的过程中,当获取到所述视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
在一种可能的实现方式中,所述方法还包括:
通过多媒体浏览应用的指定接口启动子线程;
通过所述子线程对所述视频帧数据进行解码。
在一种可能的实现方式中,所述方法还包括:
通过多媒体浏览应用的主线程对所述视频帧数据进行渲染;
相应地,所述在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中,包括:
通过所述主线程将所述第一内存地址传递给所述多媒体浏览应用的子线程;通过所述子线程将所述第一内存地址添加到所述内存复用队列中;或,
通过所述主线程将所述第一内存地址添加到所述内存复用队列中。
第二方面,提供了一种内存管理装置,所述装置包括:
分配模块,用于基于内存复用队列,为视频帧数据分配第一内存地址,所述内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址;
存储模块,用于将所述视频帧数据存储至所述第一内存地址所指示的内存空间;
添加模块,用于在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中。
在一种可能的实现方式中,所述分配模块包括:
第一获取单元,用于如果所述内存复用队列中包含有内存地址,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址,所述第二内存地址所指示的内存空间不小于所述视频帧数据的数据量;
第一分配单元,用于如果从所述内存复用队列中获取到所述第二内存地址,将所述第二内存地址移出所述内存复用队列,并将所述第二内存地址作为所述第一内存地址。
在一种可能的实现方式中,所述分配模块还包括:
第二获取单元,用于如果未从所述内存复用队列中获取到所述第二内存地址,从所述内存复用队列以外内存地址中获取第三内存地址,所述第三内存地址所指示的内存空间不小于所述视频帧数据的数据量;
第二分配单元,用于将所述第三内存地址作为所述第一内存地址。
在一种可能的实现方式中,所述分配模块还包括:
第三获取单元,用于如果所述内存复用队列中未包含有内存地址,获取所述内存复用队列所包含内存地址以外的第四内存地址;
第三分配单元,用于将所述第四内存地址作为所述第一内存地址。
在一种可能的实现方式中,所述分配模块,用于当接收到视频流时,获取所述视频流的分辨率;根据所述分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
所述分配模块,用于在对接收到的视频流进行解码的过程中,当获取到所述视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
在一种可能的实现方式中,所述装置还包括:
启动模块,用于通过多媒体浏览应用的指定接口启动子线程;
解码模块,用于通过所述子线程对所述视频帧数据进行解码。
在一种可能的实现方式中,所述装置还包括:
渲染模块,用于通过多媒体浏览应用的主线程对所述视频帧数据进行渲染;
相应地,所述添加模块用于:通过所述主线程将所述第一内存地址传递给所述多媒体浏览应用的子线程;通过所述子线程将所述第一内存地址添加到所述内存复用队列中;或,通过所述主线程将所述第一内存地址添加到所述内存复用队列中。
第三方面,提供了一种电子设备,所述电子设备包括处理器和存储器;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的计算机程序,实现第一方面任一种实现方式所述的方法步骤。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一种实现方式所述的方法步骤。
本发明实施例提供的技术方案带来的有益效果是:
通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A是本发明实施例提供的一种实施环境的示意图;
图1B是本发明实施例提供的一种内存管理方法的流程图;
图2A是本发明实施例提供的一种内存管理方法的流程图;
图2B是本发明实施例提供的一种内存管理的流程图示意图;
图2C是本发明实施例提供的一种内存复用队列的示意图;
图2D是本发明实施例提供的一种内存管理方法的流程图;
图3A是本发明实施例提供的一种内存管理方法的流程图;
图3B是本发明实施例提供的一种内存管理的流程图示意图;
图3C是本发明实施例提供的一种内存管理方法的流程图;
图4是本发明实施例提供的一种内存管理装置的框图;
图5是本发明实施例提供的一种终端的结构示意图;
图6是本发明实施例提供的一种电子设备600的框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1A是本发明实施例提供的实施环境示意图,包括终端101,服务器102 和监控设备103。
其中,终端101能够在网页中播放视频,服务器102用于向终端101提供多媒体服务,监控设备103具有视频采集功能。
在一种实施方式中,服务器102的多媒体服务功能集成在监控设备103中。集成了服务器102的功能,监控设备103 也可以向终端101提供多媒体服务。终端101可以通过互联网与监控设备103直接进行交互。例如,终端101上安装有浏览器,通过在浏览器中输入监控设备103的网络地址来访问监控设备103,以获取监控设备103实时采集的视频流。
当然,监控设备103中还可以设置有存储器(比如硬盘存储器),监控设备 103可以将采集的视频数据存储到该存储器中,以便终端101能够获取已经存储的视频数据,从而进行监控视频的回放等。
在另一种实施方式中,服务器102作为一个独立的实体,终端101和监控设备103分别可以通过互联网与服务器102进行交互。监控设备103可以将采集的监控视频流实时发送至服务器102,由服务器102作为中转将视频流转发至终端103,以通过终端进行实时监控。例如,终端101上安装有浏览器,通过在该浏览器中输入服务器102的访问地址,从服务器102获取实时转发的视频流或者其他多媒体数据,比如,图像数据,音视频数据等。
其中,服务器102还可以将从监控设备103接收到监控视频流进行存储,比如存储到硬盘存储器中,使得终端101也可以从服务器获取已存储的监控视频数据,以进行监控回放。
需要说明的是,当服务器102集成在监控设备103中时,后续所涉及的服务器所执行的步骤均可以指监控设备103所执行的步骤。
图1B是本发明实施例提供的一种内存管理方法的流程图,参见图1B,本发明实施例提供的方法流程包括:
101、基于内存复用队列,为视频帧数据分配第一内存地址,该内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址。
102、将该视频帧数据存储至该第一内存地址所指示的内存空间。
103、在基于该视频帧数据进行渲染后,将该第一内存地址添加到该内存复用队列中。
在一种可能的实现方式中,该基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果该内存复用队列中包含有内存地址,根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址,该第二内存地址所指示的内存空间不小于该视频帧数据的数据量;
如果从该内存复用队列中获取到该第二内存地址,将该第二内存地址移出该内存复用队列,并将该第二内存地址作为该第一内存地址。
在一种可能的实现方式中,根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址之后,该方法还包括:
如果未从该内存复用队列中获取到该第二内存地址,从该内存复用队列以外内存地址中获取第三内存地址,该第三内存地址所指示的内存空间不小于该视频帧数据的数据量;
将该第三内存地址作为该第一内存地址。
在一种可能的实现方式中,该基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果该内存复用队列中未包含有内存地址,获取该内存复用队列所包含内存地址以外的第四内存地址;
将该第四内存地址作为该第一内存地址。
在一种可能的实现方式中,该方法还包括:
当接收到视频流时,获取该视频流的分辨率;根据该分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
在对接收到的视频流进行解码的过程中,当获取到该视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
本发明实施例提供的方法,通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。
在本发明实施例中,终端安装有多媒体浏览应用,该多媒体浏览应用是指具有在网页中展示多媒体数据的应用,比如该多媒体浏览应用可以为浏览器,其中,该浏览器可以为无插件浏览器,即可以不安装任何视频插件,便可以在网页中播放视频。比如,终端在通过浏览器访问监控设备103时,可以通过监控设备103获取视频解码程序,通过执行该视频解码程序来对接收到的视频流进行解码,从而实现在网页中播放视频。当然,该浏览器也可以通过安装视频插件来进行视频解码,以提供在网页中播放视频的功能。其中,终端通过浏览器从服务器上获取到视频流之后,对视频流所指示的每一帧数据进行解码。本实施例中将解码后的每一帧视频数据称为视频帧数据,终端需要为该视频帧数据分配内存,也即是,为该视频帧数据分配内存地址,以在内存地址所指示的内存空间中存储该视频帧数据。
其中,需要说明的是,终端为该视频帧数据分配内存的过程也即是多媒体浏览应用为该视频帧数据申请内存的过程,下述实施例中以终端进行内存分配的角度进行说明,其中执行主体均可以将终端替换为多媒体浏览应用。下面以多媒体浏览应用是浏览器为例,本发明实施例中,根据内存分配时机的不同,终端分配内存的方式可以包括以下两种:
(1)终端在通过浏览器接收到视频流之后,先对该视频流进行解码,然后根据解码得到的视频帧数据进行内存分配,分配的内存地址可以为从内存复用队列中移出的内存地址,在对该视频帧数据进行渲染之后,可以将该分配的内存地址添加到该内存复用队列中,以实现已分配内存地址的复用,该过程详见图2A所提供的实施例。
(2)终端在通过浏览器接收到视频流之后,为解码后的视频帧数据预先分配内存,分配的内存地址也可以为内存复用队列中所包含的内存地址,在对该视频帧数据进行渲染之后,也可以将该分配的内存地址添加到该内存复用队列中,以实现已分配内存地址的复用,该过程详见图3A所提供的实施例。
需要说明的是,为了便于说明,下述实施例以解码得到的一帧视频帧数据为例,对终端的内存管理过程进行介绍,其中,为该视频帧数据分配的内存地址简称为第一内存地址。
图2A是本发明实施例提供的一种内存管理方法的流程图,参见图2A,本发明实施例提供的方法流程包括:
201、在对接收到的视频流进行解码的过程中,当获取到解码得到的视频帧数据时,检测内存复用队列中是否包含有内存地址,如果包含有,执行步骤202,否则执行步骤205。
在本发明实施例中,终端在从服务器获取到视频流之后,会对该视频流所指示的每一帧视频数据进行解码。其中,视频流中包括符合预设格式的多个数据包,每个数据包对应有帧标识,具有相同帧标识的数据包构成一帧视频数据。终端可以根据数据包的帧标识来确定一帧视频数据,并在全部接收到该一帧视频数据之后,对该一帧视频数据进行解码,得到视频帧数据。其中,预设格式可以根据实际的视频传输需求进行预先设定或修改,本实施例对此不作限定。
其中,终端可以在主线程中从服务器中接收视频流,由于视频解码过程较为耗时,为了不堵塞主线程,可以采用web worker技术创建不同于主线程的异步线程,通过该异步线程来执行该解码的过程,该异步线程也可以称为子线程。实施时,终端可以通过浏览器的指定接口启动子线程,通过该子线程对视频帧数据进行解码。其中,指定接口可以预先进行设定或修改,例如该指定接口可以为浏览器的web worker接口,本实施例对此不作限定。参见图2B,其示出了一种内存管理的流程示意图,其中,终端通过主线程调用WebSocket接口,以创建一个数据通道,通过该数据通道从监控设备103或服务器102获取视频流。在主线程获取到视频流之后,将该视频流发送至子线程,例如,终端通过调用线程交互接口(postMessage)将该视频流发送至子线程。
其中,内存复用队列用于记录已经进行了渲染的视频数据所在的内存地址。需要说明的是,在解码得到视频帧数据之后,终端需要对该视频帧数据进行渲染,以显示该视频帧数据对应的视频画面,从而实现视频播放。本发明实施例中,将已经渲染过的视频帧数据所占用的内存地址添加到内存复用队列中,以便后续对该内存地址所指示的内存空间进行重复利用。
在本发明实施例中,该内存复用队列初始时可以为空;也可以在该内存复用队列中预先设置一个或多个能够满足视频帧数据的数据量的内存地址,也即是与视频流的分辨率对应的内存地址。
需要说明的是,本发明实施例中的内存地址是指一个内存块所对应的内存地址。例如,当内存以字节为单位进行编址时,假设内存块包括16个字节,则该内存块所对应的内存地址便是该16个字节的地址。在实施过程中,逻辑层可以通过数组来表示分配的内存块,相应地,内存复用队列为一个数组队列,每个数组可以称为队列的一个元素。
在本发明实施例中,终端可以检测内存复用队列是否为空,如果不为空,则确定该内存复用队列中包含有内存地址,执行步骤202;如果为空,则确定该内存复用队列中未包含有内存地址,执行步骤205。其中,终端检测内存复用队列是否为空的过程可以为:从内存复用队列的队列头,获取第一个元素,如果第一个元素不为空,则确定内存复用队列不为空;如果第一个元素为空,则确定内存复用队列为空。
202、如果内存复用队列中包含有内存地址,根据该视频帧数据的数据量,从内存复用队列中获取第二内存地址。
终端在解码得到该视频数据后,可以确定该视频帧数据的数据量,比如,终端可以确定该帧视频数据的帧长度、帧宽度,以及该视频帧数据的图像格式,来确定该视频帧数据的数据量。其中,视频帧数据的帧长度是指视频帧数据所指示图像中每一行所包含像素点的个数,视频帧数据的帧宽度是指视频帧数据所指示图像中每一列所包含像素点的个数。其中,视频帧数据的图像格式可以为RGB图像格式或者YUV图像格式等,本实施例对此不作限定。需要说明的是,在默认情况下视频帧数据的图像格式可以设置为YUV图像格式,如果渲染需要RGB图像格式,则终端可以进行图像格式转换,以将视频帧数据由YUV 图像格式转换为RGB图像格式;另外,终端还可以在解码过程中进行图像格式处理,直接输出满足渲染需求图像格式的视频帧数据。
需要说明的是,视频帧数据的帧长度、帧宽度可以携带在视频帧数据中,该图像格式可以为服务器和终端默认的图像格式,由服务器提前配置到终端;当然,该图像格式也可以根据实际需求变化,通过携带在视频帧数据中通知给终端,本实施例对此不作限定。在对视频流解码得到视频帧数据后,终端可以从视频帧数据中获取到,从而确定该帧视频帧数据的数据量。例如,对于图像格式为RGB24的视频帧数据,该视频帧数据的数据量为width×heigth×3Bit,对于图像格式为YUV420的视频帧数据,该帧视频数据的数据量为 width×heigth×1.5Bit。其中,width表示视频帧数据的帧长度,heigth表示视频帧数据的帧宽度。
当内存复用队列中包含有内存地址时,终端可以根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址。该第二内存地址所指示的内存空间应当不小于该视频帧数据的数据量。
其中,终端根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址的过程可以为:终端按照内存地址在内存复用队列中的排列顺序,从内存复用队列获取一个内存地址,检测该内存地址所指示的内存空间是否不小于视频帧数据的数据量,如果是,则将该内存地址确定为第二内存地址;如果否,则从该内存复用队列中获取下一个内存地址,直至获取到第二内存地址为止。
在另一种实施方式中,由于视频流的分辨率在一段时间内是相对稳定的,内存复用队列中所包含的多个内存地址所指示的内存空间应该是相同的,如果内存复用队列中第一个内存地址所指示内存空间的大小小于视频帧数据的数据量,那么后续获取的多个内存地址所指示的内存空间也很有可能小于视频帧数据的数据量,因此,为了提高处理效率,当终端在内存复用队列中获取的第一个内存地址所指示的内存空间小于视频帧数据的数据量时,将该内存地址移出该内存复用队列,终端不再获取内存复用队列中的下一个内存地址,直接执行从内存复用队列以外的内存地址中获取第三内存地址的过程,该过程详见步骤 204。
其中,当终端检测到当前获取的内存地址所指示的内存空间小于视频帧数据的数据量,终端将该内存地址进行回收,也即是,从内存复用队列中移出该内存地址,清空该内存地址所指示内存空间所存储的数据,并释放该内存地址。由于视频流的分辨率在一定时间以内是稳定的,当该内存地址所指示的内存空间小于视频帧数据的数据量时,说明该内存地址在一定时间以内是用不到的,通过及时回收用不到的内存地址,降低了内存占用率,提高了内存利用率。
203、如果从内存复用队列中获取到该第二内存地址,将所述第二内存地址移出内存复用队列,并将第二内存地址作为为该视频帧数据分配的第一内存地址。
当终端获取到第二内存地址时,将该第二内存地址移出该内存复用队列,并将该第二内存地址作为为视频帧数据分配的第一内存地址,以存储该视频帧数据。其中,从内存复用队列中移出一个内存地址是指从内存复用队列中删除该内存地址。
204、如果未从内存复用队列中获取到该第二内存地址,从内存复用队列以外内存地址中获取第三内存地址,将该第三内存地址作为分配的第一内存地址。
终端还有可能从内存复用队列中获取不到该第二内存地址,比如内存复用队列中不存在内存空间不小于视频帧数据的数据量的内存地址。此时,终端可以为该视频帧数据重新分配一个内存地址,也即是,终端在该内存复用队列以外的未分配的内存地址中获取第三内存地址,将该第三内存地址作为为该视频帧数据分配的第一内存地址。例如,终端可以采用new ArrayBuffer()语句创建一个满足视频帧数据大小的数组,将该数组所指示的内存地址即为第三内存地址。当然,该第三内存地址所指示内存空间不小于该视频帧数据的数据量。
205、如果内存复用队列中未包含有内存地址,从内存复用队列以外的内存地址中获取第四内存地址,将该第四内存地址作为分配的第一内存地址。
当终端检测到内存复用队列未包含有内存地址时,会为该视频帧数据重新分配一个内存地址,也即是,从复用队列以外的未分配的地址中获取第四内存地址。该分配第四内存地址的过程与步骤203中分配第三内存地址的过程同理,在此不做赘述。
206、将视频帧数据存储至第一内存地址所指示的内存空间。
参见图2B,本实施例中对视频流进行解码的过程,解码后分配内存的过程以及存储解码得到的视频帧数据的过程均可以在子线程中处理。终端在将视频帧数据存储到分配的内存空间之后,终端可以在主线程对该视频帧数据进行渲染,以显示该视频帧数据所指示的视频画面。
其中,终端对视频帧数据进行渲染的过程可以为:终端在主线程维护一个渲染队列,终端存储视频帧数据之后,通过地址推送消息将该视频帧数据所在的第一内存地址发送至主线程,以在主线程将该第一内存地址添加到该渲染队列。其中,地址推送消息携带该第一内存地址。实施时,终端通过多媒体浏览应用的主线程对该视频帧数据进行渲染。
在渲染过程中,终端会定时扫描该渲染队列,如图2B所示,终端向渲染队列请求视频帧数据(requestAnimationFrame),按照该渲染队列中内存地址的排列顺序,依次获取内存地址所指示的视频帧数据,并对获取的视频帧数据进行渲染。其中,由于终端对视频流解码的速度和渲染的速度之间存在差异,终端到达扫描渲染队列的周期时,该渲染队列可能为空,此时,终端便不执行渲染过程,待到下一个扫描周期继续进行扫描,待扫描到渲染队列不为空时,根据渲染队列中内存地址所指示的视频帧数据进行渲染。例如,终端可以采用预设绘图标准进行渲染,并以画布(canvas)为容器显示渲染后的图像。该预设绘图标准可以为WebGL(Web Graphics Library,web图形库)绘图标准,本实施例对此不作限定。
207、基于视频帧数据进行渲染后,将第一内存地址添加到内存复用队列中。
为了避免不断分配新的内存造成内存占用量迅速上升,本发明实施例中,将已经渲染过的视频帧数据所占用的内存空间进行重复利用,也即是,将已经渲染过的视频帧数据所在的内存地址回收到内存复用队列中,以便后续将该内存地址再次分配给其他未渲染的视频帧数据。
终端可以通过两种方式将第一内存地址添加到该内存复用队列中:在一种实施方式中,终端可以通过主线程将第一内存地址传递给该多媒体浏览应用的子线程,并通过该子线程将该第一内存地址添加到该内存复用队列中;在另一种实施方式中,终端直接通过主线程将该第一内存地址添加到该内存复用队列中。在实施过程中,终端在主线程对视频帧数据进行渲染后,可以通过调用线程交互接口(postMessage)将该第一内存地址发送给子线程,通过子线程执行将第一内存地址添加到内存复用队列的步骤。
需要说明的是,由于对视频流进行解码的速度和渲染的速度在一段时间内是相对稳定的,终端一直处于占用状态的内存地址的数目可以达到一个稳定的状态,也即是,当终端一直处于占用状态的内存地址的数目达到一定数目时,便能够满足已经解码但是还未进行渲染的视频帧数据的存储需求。此时,内存复用队列中所包含的内存地址的数目也处于相对稳定的状态,也即是,在从内存复用队列中移出一个内存地址时,也会向内存复用队列中添加一个内存地址。通过对播放高清监控视频的测试,在对视频播放过程中,内存复用队列中包含5 个内存地址时便可以满足播放需求。由于在播放视频的过程中,终端仅需开辟少量的内存地址,通过对该少量的内存地址的重复利用便可实现在网页中播放视频,大大降低了内存占用量,提高了内存利用率。
为了更加清楚的说明内存复用队列的原理,下面结合图2C所示的内存复用队列示意图进行解释说明,图中内存复用队列包括队列头和队列尾,终端从队列头移出内存地址以进行内存分配,该过程可以包括上述步骤201至步骤205 所对应的过程。终端从队列尾添加已经进行了渲染的视频帧数据所在的内存地址,该过程可以包括步骤206至步骤207所对应的过程。
本发明实施例提供的方法,通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。
另外,在该实施例中,通过在解码得到视频帧数据后,再为视频帧数据分配内存,使得终端可以根据视频帧数据的实际数据量,动态地为视频帧数据分配合适的内存空间,提高了内存分配的灵活性。
由于本发明实施例中承载内存管理的主体是多媒体浏览应用,为了更加清楚的对内存管理方法流程进行解释说明,下面以多媒体浏览应用是浏览器为例,对上述图2A所述的内存管理方法进行介绍,详细流程参见图2D:
2011、当从服务器接收到视频帧数据时,浏览器通过指定接口启动子线程,通过该子线程对该视频帧数据进行解码。
在本发明实施例中,浏览器通过输入的IP地址从服务器获取视频流,该视频流包含多个视频帧数据,浏览器对接收到的每一帧数据进行解码,以便后续通过渲染向用户展示视频内容。
其中,浏览器在主线程中从服务器中接收视频流,由于视频解码过程较为耗时,为了不堵塞主线程,可以采用web worker技术创建不同于主线程的异步线程,通过该异步线程来执行该解码的过程,该异步线程也可以称为子线程。实施时,可以通过浏览器的指定接口启动子线程,通过该子线程对视频帧数据进行解码。该指定接口可以预先进行设定或修改,例如该指定接口可以为浏览器的web worker接口,本实施例对此不作限定。其中,相应内存管理的流程示意图可以参见图2B。
其中,视频流中包括符合预设格式的多个数据包,每个数据包对应有帧标识,具有相同帧标识的数据包构成一帧视频数据。终端可以根据数据包的帧标识来确定一帧视频数据,并在全部接收到该一帧视频数据之后,对该一帧视频数据进行解码,得到视频帧数据。其中,预设格式可以根据实际的视频传输需求进行预先设定或修改,本实施例对此不作限定。
2012、当获取到解码得到的视频帧数据时,浏览器检测内存复用队列中是否包含有内存地址,如果包含有,执行步骤2013,否则执行步骤2016。
其中,内存复用队列用于记录已经进行了渲染的视频数据所在的内存地址。在解码得到视频帧数据之后,浏览器需要对该视频帧数据进行渲染,以显示该视频帧数据对应的视频画面,从而实现视频播放。本发明实施例中,浏览器可以将已经渲染过的视频帧数据所占用的内存地址添加到内存复用队列中,以便后续对该内存地址所指示的内存空间进行重复利用。
在本发明实施例中,该内存复用队列初始时可以为空;也可以在该内存复用队列中预先设置一个或多个能够满足视频帧数据的数据量的内存地址,也即与视频流的分辨率对应的内存地址。
需要说明的是,本发明实施例中的内存地址是指一个内存块所对应的内存地址。例如,当内存以字节为单位进行编址时,假设内存块包括16个字节,则该内存块所对应的内存地址便是该16个字节的地址。在实施过程中,逻辑层可以通过数组来表示分配的内存块,相应地,内存复用队列为一个数组队列,每个数组可以称为队列的一个元素。
浏览器可以检测内存复用队列是否为空,如果不为空,则确定该内存复用队列中包含有内存地址,执行步骤2013;如果为空,则确定该内存复用队列中未包含有内存地址,执行步骤2016。其中,浏览器检测内存复用队列是否为空的过程可以为:浏览器从内存复用队列的队列头,获取第一个元素,如果第一个元素不为空,则确定内存复用队列不为空;如果第一个元素为空,则确定内存复用队列为空。
2013、如果内存复用队列中包含有内存地址,浏览器根据该视频帧数据的数据量,从内存复用队列中获取第二内存地址。
浏览器在解码得到该视频数据后,可以确定该视频帧数据的数据量,比如,浏览器可以确定该帧视频数据的帧长度、帧宽度,以及该视频帧数据的图像格式,来确定该视频帧数据的数据量。其中,视频帧数据的帧长度、帧宽度和视频帧数据的图像格式的解释与步骤202中相应的解释同理,在此不做赘述。
需要说明的是,视频帧数据的帧长度、帧宽度可以携带在视频帧数据中,该图像格式可以为服务器和浏览器默认的图像格式,由服务器提前配置到浏览器;当然,该图像格式也可以根据实际需求变化,通过携带在视频帧数据中通知给浏览器,本实施例对此不作限定。在对视频流解码得到视频帧数据后,浏览器可以从视频帧数据中获取到帧长度、帧宽度和图像格式,从而确定该帧视频帧数据的数据量。例如,对于图像格式为RGB24的视频帧数据,该视频帧数据的数据量为width×heigth×3Bit,对于图像格式为YUV420的视频帧数据,该帧视频数据的数据量为width×heigth×1.5Bit。其中,width表示视频帧数据的帧长度,heigth表示视频帧数据的帧宽度。
当内存复用队列中包含有内存地址时,浏览器可以根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址。该第二内存地址所指示的内存空间应当不小于该视频帧数据的数据量。
其中,浏览器根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址的过程可以为:浏览器按照内存地址在内存复用队列中的排列顺序,从内存复用队列获取一个内存地址,检测该内存地址所指示的内存空间是否不小于视频帧数据的数据量,如果是,则将该内存地址确定为第二内存地址;如果否,则从该内存复用队列中获取下一个内存地址,直至获取到第二内存地址为止。
在另一种实施方式中,由于视频流的分辨率在一段时间内是相对稳定的,内存复用队列中所包含的多个内存地址所指示的内存空间应该是相同的,如果内存复用队列中第一个内存地址所指示内存空间的大小小于视频帧数据的数据量,那么后续获取的多个内存地址所指示的内存空间也很有可能小于视频帧数据的数据量,因此,为了提高处理效率,当浏览器在内存复用队列中获取的第一个内存地址所指示的内存空间小于视频帧数据的数据量时,将该内存地址移出该内存复用队列,浏览器不再获取内存复用队列中的下一个内存地址,直接执行从内存复用队列以外的内存地址中获取第三内存地址的过程,该过程详见步骤2015。
其中,当浏览器检测到当前获取的内存地址所指示的内存空间小于视频帧数据的数据量,浏览器将该内存地址进行回收,也即是,从内存复用队列中移出该内存地址,清空该内存地址所指示内存空间所存储的数据,并释放该内存地址。由于视频流的分辨率在一定时间以内是稳定的,当该内存地址所指示的内存空间小于视频帧数据的数据量时,说明该内存地址在一定时间以内是用不到的,通过及时回收用不到的内存地址,降低了内存占用率,提高了内存利用率。
2014、如果从内存复用队列中获取到该第二内存地址,浏览器将该第二内存地址移出内存复用队列,并将第二内存地址作为为该视频帧数据分配的第一内存地址。
当浏览器获取到第二内存地址时,将该第二内存地址移出该内存复用队列,并将该第二内存地址作为为视频帧数据分配的第一内存地址,以存储该视频帧数据。其中,从内存复用队列中移出一个内存地址是指从内存复用队列中删除该内存地址。
2015、如果未从内存复用队列中获取到该第二内存地址,浏览器从内存复用队列以外内存地址中获取第三内存地址,将该第三内存地址作为分配的第一内存地址。
浏览器还有可能从内存复用队列中获取不到该第二内存地址,比如内存复用队列中不存在内存空间不小于视频帧数据的数据量的内存地址。此时,浏览器可以为该视频帧数据重新分配一个内存地址,也即是,浏览器在该内存复用队列以外的未分配的内存地址中获取第三内存地址,将该第三内存地址作为为该视频帧数据分配的第一内存地址。例如,浏览器可以采用new ArrayBuffer() 语句创建一个满足视频帧数据大小的数组,将该数组所指示的内存地址即为第三内存地址。当然,该第三内存地址所指示内存空间不小于该视频帧数据的数据量。
2016、如果内存复用队列中未包含有内存地址,浏览器从内存复用队列以外的内存地址中获取第四内存地址,将该第四内存地址作为分配的第一内存地址。
当浏览器检测到内存复用队列未包含有内存地址时,会为该视频帧数据重新分配一个内存地址,也即是,从复用队列以外的未分配的地址中获取第四内存地址。该分配第四内存地址的过程与步骤2014中分配第三内存地址的过程同理,在此不做赘述。
2017、浏览器将视频帧数据存储至第一内存地址所指示的内存空间。
参见图2B,本实施例中对视频流进行解码的过程,解码后分配内存的过程以及存储解码得到的视频帧数据的过程均可以在子线程中处理。浏览器在将视频帧数据存储到分配的内存空间之后,浏览器可以在主线程对该视频帧数据进行渲染,以显示该视频帧数据所指示的视频画面。
其中,浏览器通过主线程对视频帧数据进行渲染,该过程可以为:浏览器在主线程维护一个渲染队列,浏览器存储视频帧数据之后,通过地址推送消息将该视频帧数据所在的第一内存地址发送至主线程,以在主线程将该第一内存地址添加到该渲染队列。其中,地址推送消息携带该第一内存地址。
在渲染过程中,浏览器会定时扫描该渲染队列,如图2B所示,浏览器向渲染队列请求视频帧数据(requestAnimationFrame),按照该渲染队列中内存地址的排列顺序,依次获取内存地址所指示的视频帧数据,并对获取的视频帧数据进行渲染。其中,由于浏览器对视频流解码的速度和渲染的速度之间存在差异,浏览器到达扫描渲染队列的周期时,该渲染队列可能为空,此时,浏览器便不执行渲染过程,待到下一个扫描周期继续进行扫描,待扫描到渲染队列不为空时,根据渲染队列中内存地址所指示的视频帧数据进行渲染。例如,浏览器可以采用预设绘图标准进行渲染,并以画布(canvas)为容器显示渲染后的图像。该预设绘图标准可以为WebGL绘图标准,本实施例对此不作限定。
2018、基于视频帧数据进行渲染后,浏览器将第一内存地址添加到内存复用队列中。
为了避免不断分配新的内存造成内存占用量迅速上升,本发明实施例中,浏览器可以将已经渲染过的视频帧数据所占用的内存空间进行重复利用,也即是,浏览器将已经渲染过的视频帧数据所在的内存地址回收到内存复用队列中,以便后续将该内存地址再次分配给其他未渲染的视频帧数据。
浏览器可以通过两种方式将第一内存地址添加到该内存复用队列中:在一种实施方式中,浏览器可以通过主线程将第一内存地址传递给该多媒体浏览应用的子线程,并通过该子线程将该第一内存地址添加到该内存复用队列中;在另一种实施方式中,浏览器直接通过主线程将该第一内存地址添加到该内存复用队列中。在实施过程中,浏览器在主线程对视频帧数据进行渲染后,可以通过调用线程交互接口(postMessage)将该第一内存地址发送给子线程,通过子线程执行将第一内存地址添加到内存复用队列的步骤。
需要说明的是,由于对视频流进行解码的速度和渲染的速度在一段时间内是相对稳定的,浏览器一直处于占用状态的内存地址的数目可以达到一个稳定的状态,也即是,当浏览器一直处于占用状态的内存地址的数目达到一定数目时,便能够满足已经解码但是还未进行渲染的视频帧数据的存储需求。此时,内存复用队列中所包含的内存地址的数目也处于相对稳定的状态,也即是,在从内存复用队列中移出一个内存地址时,也会向内存复用队列中添加一个内存地址。通过对播放高清监控视频的测试,在对视频播放过程中,内存复用队列中包含5个内存地址时便可以满足播放需求。由于在播放视频的过程中,浏览器仅需开辟少量的内存地址,通过对该少量的内存地址的重复利用便可实现在网页中播放视频,大大降低了内存占用量,提高了内存利用率。
其中,内存复用队列的原理与步骤207所述内存复用队列的原理相同,在此不做赘述。
本发明实施例提供的方法,浏览器通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在浏览器播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了浏览器的内存占用率,提高了浏览器的内存利用率。
上图2A所提供的实施例是在对视频流进行解码后在进行内存分配,此外,终端还可以在接收到视频流后,进行内存预分配,详细过程参见图3A所提供的实施例。
图3是本发明实施例提供的一种内存管理方法的流程图,参见图3,本发明实施例提供的方法流程包括:
301、当接收到视频流时,获取视频流的分辨率。
在该实施例中,视频流的分辨率可以由服务器预先配置到终端,也可以由终端主动从服务器获取,本实施例对此不作限定。终端在接收到视频流之后,可以根据视频流所包含的数据包的帧标识,来确定一帧视频数据,并在解码前为该一帧视频数据进行内存的预分配。
302、检测内存复用队列中是否包含有内存地址,如果包含有,执行步骤303,否则执行步骤305。
该步骤与步骤201中检测内存复用队列中是否包含有内存地址的过程同理,在此不做赘述。
303、如果内存复用队列中包含有内存地址,根据分辨率所指示的视频帧数据的数据量,从内存复用队列中获取第二内存地址。
终端可以根据视频流的分辨率,计算视频帧数据的数据量。例如,终端根据该分辨率确定视频帧数据的帧长度和帧宽度,例如,当分辨率为1080×720时,对应的视频帧数据的帧长度为1080,帧宽度为720。根据确定的视频帧数据的帧长度和帧宽度,以及视频帧数据的图像格式,确定视频帧数据的数据量。该过程与上述步骤202中确定视频帧数据的数据量的方式相同,在此不做赘述。
304、如果从内存复用队列中获取到该第二内存地址,将第二内存地址移出内存复用队列,并将第二内存地址作为为该视频帧数据分配的第一内存地址。
该步骤与上述步骤203同理,在此不做赘述。
305、如果未从内存复用队列中获取到该第二内存地址,从内存复用队列以外内存地址中获取第三内存地址,将该第三内存地址作为分配的第一内存地址。
该步骤与上述步骤204同理,在此不做赘述。
306、如果内存复用队列中未包含有内存地址,根据该分辨率所指示的视频帧数据的数据量,从内存复用队列以外的内存地址中获取第四内存地址,将第四内存地址作为分配的第一内存地址。
该步骤与上述步骤205同理,在此不做赘述。
307、将视频帧数据存储至第一内存地址所指示的内存空间。
需要说明的是,参见图3B,其示出了一种内存管理的流程示意图,上述步骤301至步骤306在终端的主线程执行,终端在为视频帧数据进行内存的预分配之后,可以将该预分配的第一内存地址通过地址传递消息(postMessage)传递给子线程,在子线程将该视频帧数据存储至该第一内存地址所指示的内存空间。
另外,本实施例中,终端也会对解码得到的视频帧数据进行渲染,该渲染的过程与上述步骤206中所述的过程同理,在此不做赘述。
308、基于所述视频帧数据进行渲染后,将第一内存地址添加到内存复用队列中。
该步骤与上述步骤207同理,在此不做赘述。
需要说明的是,由于在视频播放的过程中,视频流的分辨率还有可能发生变化,比如,用户通过终端对视频流的分辨率进行了修改,当修改后的分辨率高于修改前的分辨率时,终端为解码得到的视频帧数据分配的第一内存地址可能不足以存储该视频帧数据,此时,当终端解码得到的视频帧数据的数据量大于该第一内存地址所指示的内存空间时,终端会在子线程根据该视频帧数据的实际数据量,为该视频帧数据重新分配一块内存,也即是,从内存复用队列和第一内存地址以外的内存地址中,获取一个内存地址分配给该视频帧数据。另外,终端将该视频帧数据所对应的实际分辨率通过子线程发送至主线程,在主线程对视频流的分辨率进行修改,后续基于修改后的分辨率进行内存分配。其中,在向主线程发送实际分辨率的同时,还可以将分配的内存地址发送到主线程,以通过主线程将该分配的内存地址添加到渲染队列中。
本发明实施例提供的方法,通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。
由于本发明实施例中承载内存管理的主体是多媒体浏览应用,为了更加清楚的对内存管理方法流程进行解释说明,下面以多媒体浏览应用是浏览器为例,对上述图3A所述的内存管理方法进行介绍,详细流程参见图3C:
3011、当接收到视频流时,浏览器获取视频流的分辨率。
在该实施例中,视频流的分辨率可以由服务器预先配置到浏览器,也可以由浏览器主动从服务器获取,本实施例对此不作限定。浏览器在接收到视频流之后,可以根据视频流所包含的数据包的帧标识,来确定一帧视频数据,并在解码前为该一帧视频数据进行内存的预分配。
3012、浏览器检测内存复用队列中是否包含有内存地址,如果包含有,执行步骤3013,否则执行步骤3015。
该步骤与步骤2012中浏览器检测内存复用队列中是否包含有内存地址的过程同理,在此不做赘述。
3013、如果内存复用队列中包含有内存地址,浏览器根据分辨率所指示的视频帧数据的数据量,从内存复用队列中获取第二内存地址。
浏览器可以根据视频流的分辨率,计算视频帧数据的数据量。例如,浏览器根据该分辨率确定视频帧数据的帧长度和帧宽度,例如,当分辨率为1080×720 时,对应的视频帧数据的帧长度为1080,帧宽度为720。根据确定的视频帧数据的帧长度和帧宽度,以及视频帧数据的图像格式,确定视频帧数据的数据量。该过程与上述步骤2013中确定视频帧数据的数据量的方式相同,在此不做赘述。
3014、如果从内存复用队列中获取到该第二内存地址,浏览器将第二内存地址移出内存复用队列,并将第二内存地址作为为该视频帧数据分配的第一内存地址。
该步骤与上述步骤2014同理,在此不做赘述。
3015、如果未从内存复用队列中获取到该第二内存地址,浏览器从内存复用队列以外内存地址中获取第三内存地址,将该第三内存地址作为分配的第一内存地址。
该步骤与上述步骤2015同理,在此不做赘述。
3016、如果内存复用队列中未包含有内存地址,浏览器根据该分辨率所指示的视频帧数据的数据量,从内存复用队列以外的内存地址中获取第四内存地址,将第四内存地址作为分配的第一内存地址。
该步骤与上述步骤2016同理,在此不做赘述。
3017、浏览器将视频帧数据存储至第一内存地址所指示的内存空间。
本实施例中,浏览器也会对解码得到的视频帧数据进行渲染,该渲染的过程与上述步骤2017中所述的过程同理,在此不做赘述。
需要说明的是,参见图3B,其示出了一种内存管理的流程示意图,上述步骤3011至步骤3016在浏览器的主线程执行,浏览器在为视频帧数据进行内存的预分配之后,可以将该预分配的第一内存地址通过地址传递消息 (postMessage)传递给子线程,在子线程将该视频帧数据存储至该第一内存地址所指示的内存空间。
3018、基于所述视频帧数据进行渲染后,浏览器将第一内存地址添加到内存复用队列中。
该步骤与上述步骤2018同理,在此不做赘述。
需要说明的是,由于在视频播放的过程中,视频流的分辨率还有可能发生变化,比如,用户通过浏览器对视频流的分辨率进行了修改,当修改后的分辨率高于修改前的分辨率时,浏览器为解码得到的视频帧数据分配的第一内存地址可能不足以存储该视频帧数据,此时,当浏览器解码得到的视频帧数据的数据量大于该第一内存地址所指示的内存空间时,浏览器会在子线程根据该视频帧数据的实际数据量,为该视频帧数据重新分配一块内存,也即是,从内存复用队列和第一内存地址以外的内存地址中,获取一个内存地址分配给该视频帧数据。另外,浏览器将该视频帧数据所对应的实际分辨率通过子线程发送至主线程,在主线程对视频流的分辨率进行修改,后续基于修改后的分辨率进行内存分配。其中,在向主线程发送实际分辨率的同时,还可以将分配的内存地址发送到主线程,以通过主线程将该分配的内存地址添加到渲染队列中。
本发明实施例提供的方法,浏览器通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了浏览器的内存占用率,提高了浏览器内存利用率。
图4是本发明实施例提供的一种内存管理装置的框图。参照图4,该装置包括分配模块401,存储模块402和添加模块403。
其中,分配模块,用于基于内存复用队列,为视频帧数据分配第一内存地址,该内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址;存储模块,用于将该视频帧数据存储至该第一内存地址所指示的内存空间;添加模块,用于在基于该视频帧数据进行渲染后,将该第一内存地址添加到该内存复用队列中。
在一种可能的实现方式中,该分配模块包括:
第一获取单元,用于如果该内存复用队列中包含有内存地址,根据该视频帧数据的数据量,从该内存复用队列中获取第二内存地址,该第二内存地址所指示的内存空间不小于该视频帧数据的数据量;
第一分配单元,用于如果从该内存复用队列中获取到该第二内存地址,将该第二内存地址移出该内存复用队列,并将该第二内存地址作为该第一内存地址。
在一种可能的实现方式中,该分配模块还包括:
第二获取单元,用于如果未从该内存复用队列中获取到该第二内存地址,从该内存复用队列以外内存地址中获取第三内存地址,该第三内存地址所指示的内存空间不小于该视频帧数据的数据量;
第二分配单元,用于将该第三内存地址作为该第一内存地址。
在一种可能的实现方式中,该分配模块还包括:
第三获取单元,用于如果该内存复用队列中未包含有内存地址,获取该内存复用队列所包含内存地址以外的第四内存地址;
第三分配单元,用于将该第四内存地址作为该第一内存地址。
在一种可能的实现方式中,该分配模块,用于当接收到视频流时,获取该视频流的分辨率;根据该分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
该分配模块,用于在对接收到的视频流进行解码的过程中,当获取到该视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
在一种可能的实现方式中,该装置还包括:
启动模块,用于通过多媒体浏览应用的指定接口启动子线程;
解码模块,用于通过该子线程对该视频帧数据进行解码。
在一种可能的实现方式中,该装置还包括:
渲染模块,用于通过多媒体浏览应用的主线程对该视频帧数据进行渲染;
相应地,该添加模块用于:通过该主线程将该第一内存地址传递给该多媒体浏览应用的子线程;通过该子线程将该第一内存地址添加到该内存复用队列中;或,通过该主线程将该第一内存地址添加到该内存复用队列中。
本公开实施例提供的装置,通过将已经进行了渲染的视频帧数据所在的内存地址添加到内存复用队列,后续可以根据该内存复用队列进行内存分配,使得已经分配的内存地址能够得到重复利用,在播放视频的过程中,无需针对每一个视频帧数据均开辟一块内存空间,降低了内存占用率,提高了内存利用率。
需要说明的是:上述实施例提供的内存管理装置在管理内存时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的内存管理装置与触内存管理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图5是本发明实施例提供的一种终端的结构示意图,该终端可以用于执行上述各个实施例中提供的内存管理方法。参见图5,该终端500包括:
终端500可以包括RF(Radio Frequency,射频)电路110、包括有一个或一个以上计算机可读存储介质的存储器120、输入单元130、显示单元140、传感器150、音频电路160、WiFi(Wireless Fidelity,无线保真)模块170、包括有一个或者一个以上处理核心的处理器180、以及电源190等部件。本领域技术人员可以理解,图5中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路110可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器180处理;另外,将涉及上行的数据发送给基站。通常,RF电路110包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路 110还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、 CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband Code DivisionMultiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器120可用于存储软件程序以及模块,处理器180通过运行存储在存储器120的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器 120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端500的使用所创建的数据(比如音频数据、电话本等) 等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器120还可以包括存储器控制器,以提供处理器180和输入单元 130对存储器120的访问。
输入单元130可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元130可包括触敏表面131以及其他输入设备132。触敏表面131,也称为触摸显示屏或者触控板,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触敏表面131上或在触敏表面131附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触敏表面131 可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器180,并能接收处理器180发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触敏表面131。除了触敏表面131,输入单元130还可以包括其他输入设备132。具体地,其他输入设备132可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元140可用于显示由用户输入的信息或提供给用户的信息以及终端 500的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元140可包括显示面板141,可选的,可以采用 LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode, 有机发光二极管)等形式来配置显示面板141。进一步的,触敏表面131可覆盖显示面板141,当触敏表面131检测到在其上或附近的触摸操作后,传送给处理器180以确定触摸事件的类型,随后处理器180根据触摸事件的类型在显示面板141上提供相应的视觉输出。虽然在图5中,触敏表面131与显示面板141 是作为两个独立的部件来实现输入和输入功能,但是在某些实施例中,可以将触敏表面131与显示面板141集成而实现输入和输出功能。
终端500还可包括至少一种传感器150,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板141的亮度,接近传感器可在终端500移动到耳边时,关闭显示面板141和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端500还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路160、扬声器161,传声器162可提供用户与终端500之间的音频接口。音频电路160可将接收到的音频数据转换后的电信号,传输到扬声器161,由扬声器161转换为声音信号输出;另一方面,传声器162将收集的声音信号转换为电信号,由音频电路160接收后转换为音频数据,再将音频数据输出处理器180处理后,经RF电路110以发送给比如另一终端,或者将音频数据输出至存储器120以便进一步处理。音频电路160还可能包括耳塞插孔,以提供外设耳机与终端500的通信。
WiFi属于短距离无线传输技术,终端500通过WiFi模块170可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图5示出了WiFi模块170,但是可以理解的是,其并不属于终端 500的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器180是终端500的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模块,以及调用存储在存储器120内的数据,执行终端500的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器180可包括一个或多个处理核心;优选的,处理器180可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器180中。
终端500还包括给各个部件供电的电源190(比如电池),优选的,电源可以通过电源管理系统与处理器180逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源190还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端500还可以包括摄像头、蓝牙模块等,在此不再赘述。具体在本实施例中,终端的显示单元是触摸屏显示器,终端还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。所述一个或者一个以上程序包含可执行指令,终端500被配置为执行指令,以执行上述内存管理方法实施例中终端所执行的方法。
图6是本发明实施例提供的一种电子设备600的结构示意图。参见图6,该电子设备600包括处理器和存储器,还可以包括通信接口、通信总线、输入输出接口和显示设备,其中,处理器、存储器、输入输出接口、显示设备和通信接口通过通信总线完成相互间的通信。该存储器存储有计算机程序,该处理器用于执行存储器上所存放的计算机程序,实现上述实施例中的内存管理方法。
通信总线是连接所描述的元素的电路并且在这些元素之间实现传输。例如,处理器通过通信总线从其它元素接收到命令,解密接收到的命令,根据解密的命令执行计算或数据处理。存储器可以包括程序模块,例如内核(kernel),中间件(middleware),应用程序编程接口(Application Programming Interface,API) 和应用。该程序模块可以是有软件、固件或硬件、或其中的至少两种组成。输入输出接口转发用户通过输入输出设备(例如感应器、键盘、触摸屏)输入的命令或数据。显示设备显示各种信息给用户。通信接口将该电子设备600与其它网络设备、用户设备、网络进行连接。例如,通信接口可以通过有线或无线连接到网络以连接到外部其它的网络设备或用户设备。无线通信可以包括以下至少一种:无线保真(Wireless Fidelity,WiFi),蓝牙(Bluetooth,BT),近距离无线通信技术(NearField Communication,NFC),全球卫星定位系统(Global Positioning System,GPS)和蜂窝通信(cellular communication)(例如,长期演进技术(Long Term Evolution,LTE),长期演进技术的后续演进(Long Term Evolution–Advanced,LTE-A),码分多址(CodeDivision Multiple Access, CDMA),宽带码分多址(Wideband CDMA,WCDMA),通用移动通信系统 (Universal Mobile Telecommunication System,UMTS),无线宽带接入(WirelessBroadband,WiBro)和全球移动通讯系统(Global System for Mobile communication,GSM)。有线通信可以包括以下至少一种:通用串行总线 (Universal Serial Bus,USB),高清晰度多媒体接口(High Definition Multimedia Interface,HDMI),异步传输标准接口(Recommended Standard 232,RS-232),和普通老式电话业务(Plain Old TelephoneService,POTS)。网络可以是电信网络和通信网络。通信网络可以为计算机网络、因特网、物联网、电话网络。电子设备600可以通过通信接口连接网络,电子设备600和其它网络设备通信所用的协议可以被应用、应用程序编程接口(Application Programming Interface,API)、中间件、内核和通信接口至少一个支持。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括指令的存储器,上述指令可由终端中的处理器执行以完成上述实施例中内存管理方法。例如,所述计算机可读存储介质可以是只读内存(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、磁带、软盘和光数据存储设备等。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种内存管理方法,其特征在于,所述方法包括:
基于内存复用队列,为视频帧数据分配第一内存地址,所述内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址,所述视频帧数据为解码后的数据;
将所述视频帧数据存储至所述第一内存地址所指示的内存空间;
在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中。
2.根据权利要求1所述的方法,其特征在于,所述基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果所述内存复用队列中包含有内存地址,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址,所述第二内存地址所指示的内存空间不小于所述视频帧数据的数据量;
如果从所述内存复用队列中获取到所述第二内存地址,将所述第二内存地址移出所述内存复用队列,并将所述第二内存地址作为所述第一内存地址。
3.根据权利要求2所述的方法,其特征在于,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址之后,所述方法还包括:
如果未从所述内存复用队列中获取到所述第二内存地址,从所述内存复用队列以外内存地址中获取第三内存地址,所述第三内存地址所指示的内存空间不小于所述视频帧数据的数据量;
将所述第三内存地址作为所述第一内存地址。
4.根据权利要求1所述的方法,其特征在于,所述基于内存复用队列,为视频帧数据分配第一内存地址,包括:
如果所述内存复用队列中未包含有内存地址,获取所述内存复用队列所包含内存地址以外的第四内存地址;
将所述第四内存地址作为所述第一内存地址。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到视频流时,获取所述视频流的分辨率;根据所述分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
在对接收到的视频流进行解码的过程中,当获取到所述视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过多媒体浏览应用的指定接口启动子线程;
通过所述子线程对所述视频帧数据进行解码。
7.根据权利要求1或6所述的方法,其特征在于,所述方法还包括:
通过多媒体浏览应用的主线程对所述视频帧数据进行渲染;
相应地,所述在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中,包括:
通过所述主线程将所述第一内存地址传递给所述多媒体浏览应用的子线程;通过所述子线程将所述第一内存地址添加到所述内存复用队列中;或,
通过所述主线程将所述第一内存地址添加到所述内存复用队列中。
8.一种内存管理装置,其特征在于,所述装置包括:
分配模块,用于基于内存复用队列,为视频帧数据分配第一内存地址,所述内存复用队列用于记录已进行了渲染的视频帧数据所在的内存地址,所述视频帧数据为解码后的数据;
存储模块,用于将所述视频帧数据存储至所述第一内存地址所指示的内存空间;
添加模块,用于在基于所述视频帧数据进行渲染后,将所述第一内存地址添加到所述内存复用队列中。
9.根据权利要求8所述的装置,其特征在于,所述分配模块包括:
第一获取单元,用于如果所述内存复用队列中包含有内存地址,根据所述视频帧数据的数据量,从所述内存复用队列中获取第二内存地址,所述第二内存地址所指示的内存空间不小于所述视频帧数据的数据量;
第一分配单元,用于如果从所述内存复用队列中获取到所述第二内存地址,将所述第二内存地址移出所述内存复用队列,并将所述第二内存地址作为所述第一内存地址。
10.根据权利要求9所述的装置,其特征在于,所述分配模块还包括:
第二获取单元,用于如果未从所述内存复用队列中获取到所述第二内存地址,从所述内存复用队列以外内存地址中获取第三内存地址,所述第三内存地址所指示的内存空间不小于所述视频帧数据的数据量;
第二分配单元,用于将所述第三内存地址作为所述第一内存地址。
11.根据权利要求8所述的装置,其特征在于,所述分配模块还包括:
第三获取单元,用于如果所述内存复用队列中未包含有内存地址,获取所述内存复用队列所包含内存地址以外的第四内存地址;
第三分配单元,用于将所述第四内存地址作为所述第一内存地址。
12.根据权利要求8所述的装置,其特征在于,所述分配模块,用于当接收到视频流时,获取所述视频流的分辨率;根据所述分辨率所指示的视频帧数据的数据量,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤;或,
所述分配模块,用于在对接收到的视频流进行解码的过程中,当获取到所述视频帧数据时,执行基于内存复用队列,为视频帧数据分配第一内存地址的步骤。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括:
启动模块,用于通过多媒体浏览应用的指定接口启动子线程;
解码模块,用于通过所述子线程对所述视频帧数据进行解码。
14.根据权利要求8或13所述的装置,其特征在于,所述装置还包括:
渲染模块,用于通过多媒体浏览应用的主线程对所述视频帧数据进行渲染;
相应地,所述添加模块用于:通过所述主线程将所述第一内存地址传递给所述多媒体浏览应用的子线程;通过所述子线程将所述第一内存地址添加到所述内存复用队列中;或,通过所述主线程将所述第一内存地址添加到所述内存复用队列中。
15.一种电子设备,其特征在于,所述电子设备包括处理器和存储器;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的计算机程序,实现权利要求1-7任一项所述的方法步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一项所述的方法步骤。
CN201710587746.0A 2017-07-18 2017-07-18 内存管理方法及装置 Active CN109271327B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN201710587746.0A CN109271327B (zh) 2017-07-18 2017-07-18 内存管理方法及装置
PCT/CN2018/088395 WO2019015395A1 (zh) 2017-07-18 2018-05-25 内存管理方法、装置、电子设备及存储介质
EP22164063.4A EP4040299B1 (en) 2017-07-18 2018-05-25 Memory management method and apparatus, electronic device and storage medium
EP18834482.4A EP3640807B1 (en) 2017-07-18 2018-05-25 Memory management method and apparatus, and electronic device and storage medium
US16/631,304 US11604726B2 (en) 2017-07-18 2018-05-25 Memory management method, electronic device and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710587746.0A CN109271327B (zh) 2017-07-18 2017-07-18 内存管理方法及装置

Publications (2)

Publication Number Publication Date
CN109271327A CN109271327A (zh) 2019-01-25
CN109271327B true CN109271327B (zh) 2020-11-27

Family

ID=65015043

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710587746.0A Active CN109271327B (zh) 2017-07-18 2017-07-18 内存管理方法及装置

Country Status (4)

Country Link
US (1) US11604726B2 (zh)
EP (2) EP4040299B1 (zh)
CN (1) CN109271327B (zh)
WO (1) WO2019015395A1 (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11025982B2 (en) * 2019-03-29 2021-06-01 Twizted Design, Inc. System and method for synchronizing content and data for customized display
CN110708609A (zh) * 2019-08-05 2020-01-17 青岛海信传媒网络技术有限公司 一种视频播放方法及装置
CN110730364B (zh) * 2019-10-14 2021-08-31 广州微算互联信息技术有限公司 一种云手机数据传输方法、装置及存储介质
CN110727520B (zh) * 2019-10-23 2022-05-03 四川长虹电器股份有限公司 一种优化Android帧动画的实现方法
CN111736998A (zh) * 2020-06-18 2020-10-02 上海商汤智能科技有限公司 内存管理方法和相关产品
CN114071224B (zh) * 2020-07-31 2023-08-25 腾讯科技(深圳)有限公司 视频数据处理方法、装置、计算机设备及存储介质
US11645107B2 (en) * 2021-01-13 2023-05-09 Adobe Inc. Processing multi-frame tasks in a multi-threaded digital design system
CN112882682A (zh) * 2021-02-25 2021-06-01 广州趣丸网络科技有限公司 一种音频录制设备中的内存复用方法、装置、设备及介质
CN114820272B (zh) * 2022-03-18 2024-06-14 北京趋动智能科技有限公司 数据交互的方法、装置、存储介质及电子设备
CN115134661A (zh) * 2022-06-28 2022-09-30 龙芯中科(合肥)技术有限公司 视频处理方法及视频处理应用
CN115484403B (zh) * 2022-08-08 2023-10-24 荣耀终端有限公司 录像方法和相关装置
CN117251292B (zh) * 2023-11-13 2024-03-29 山东泽赢信息科技服务有限公司 内存管理方法、系统、终端及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205319A1 (en) * 2000-06-09 2004-10-14 Pickreign Heidi R. Host computer virtual memory within a network interface adapter
CN105245912A (zh) * 2015-10-21 2016-01-13 东方网力科技股份有限公司 一种缓存视频数据及读取视频数据的方法及装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090257508A1 (en) 2008-04-10 2009-10-15 Gaurav Aggarwal Method and system for enabling video trick modes
CN101320351A (zh) * 2008-06-27 2008-12-10 华中科技大学 内存的分配、清理和释放方法及内存管理的装置
CN101984417A (zh) 2010-11-01 2011-03-09 中兴通讯股份有限公司 内存管理方法及装置
CN103891303B (zh) 2011-08-16 2018-03-09 黛斯悌尼软件产品有限公司 基于脚本的视频呈现
US8627036B2 (en) * 2011-09-12 2014-01-07 Microsoft Corporation Memory management techniques
CN103246567A (zh) 2013-03-26 2013-08-14 中国科学院电子学研究所 用于目标跟踪内存管理的队列方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205319A1 (en) * 2000-06-09 2004-10-14 Pickreign Heidi R. Host computer virtual memory within a network interface adapter
CN105245912A (zh) * 2015-10-21 2016-01-13 东方网力科技股份有限公司 一种缓存视频数据及读取视频数据的方法及装置

Also Published As

Publication number Publication date
EP4040299A1 (en) 2022-08-10
EP3640807B1 (en) 2023-03-29
EP3640807A1 (en) 2020-04-22
US11604726B2 (en) 2023-03-14
CN109271327A (zh) 2019-01-25
EP3640807A4 (en) 2020-07-15
WO2019015395A1 (zh) 2019-01-24
US20200210329A1 (en) 2020-07-02
EP4040299B1 (en) 2024-03-06

Similar Documents

Publication Publication Date Title
CN109271327B (zh) 内存管理方法及装置
CN106792120B (zh) 视频画面的显示方法、装置和终端
JP6511541B2 (ja) メッセージ更新方法、装置、および端末
WO2017202348A1 (zh) 一种视频播放方法、装置及计算机存储介质
CN107911708B (zh) 弹幕显示方法、直播方法、及相关装置
WO2018161534A1 (zh) 一种显示图像的方法、双屏终端和计算机可读的非易失性存储介质
CN106658064B (zh) 虚拟礼物展示方法及装置
US20190109767A1 (en) Network bandwidth management method, terminal and computer storage medium
WO2018006841A1 (zh) 二维码信息传输方法、装置以及设备
CN109144723B (zh) 一种分配存储空间的方法和终端
CN105338403B (zh) 滤镜处理方法、装置及电子设备
CN109495769B (zh) 视频通信方法、终端、智能电视、服务器及存储介质
CN106708390B (zh) 一种截屏的方法、装置和系统
CN109725819B (zh) 界面显示方法、装置、双屏双系统终端及可读存储介质
US20160330423A1 (en) Video shooting method and apparatus
CN110209434B (zh) 一种内存管理方法、装置及计算机可读存储介质
CN111385513B (zh) 通话方法以及相关设备
CN105282628B (zh) 一种视频播放的方法和装置
CN106330875B (zh) 消息显示方法及装置
US11327845B2 (en) Image synchronization method and device, and server
CN110096190B (zh) 一种显示二维码的方法和终端
CN109710576B (zh) 文件展示的方法、终端及存储介质
CN112887776A (zh) 一种降低音频延时的方法、设备及计算机可读存储介质
CN110658948A (zh) 用于触控操作的方法、装置和介质
CN108111553B (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