CN105245912B - 一种缓存视频数据及读取视频数据的方法及装置 - Google Patents

一种缓存视频数据及读取视频数据的方法及装置 Download PDF

Info

Publication number
CN105245912B
CN105245912B CN201510689467.6A CN201510689467A CN105245912B CN 105245912 B CN105245912 B CN 105245912B CN 201510689467 A CN201510689467 A CN 201510689467A CN 105245912 B CN105245912 B CN 105245912B
Authority
CN
China
Prior art keywords
frame
storage
video
memory
pointer
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
CN201510689467.6A
Other languages
English (en)
Other versions
CN105245912A (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.)
Netposa Technologies Ltd
Original Assignee
Netposa Technologies 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 Netposa Technologies Ltd filed Critical Netposa Technologies Ltd
Priority to CN201510689467.6A priority Critical patent/CN105245912B/zh
Publication of CN105245912A publication Critical patent/CN105245912A/zh
Application granted granted Critical
Publication of CN105245912B publication Critical patent/CN105245912B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • H04N21/23103Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion using load balancing strategies, e.g. by placing or distributing content on different disks, different memories or different servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • H04N21/23106Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion involving caching operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • H04N21/23113Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion involving housekeeping operations for stored content, e.g. prioritizing content for deletion because of storage space restrictions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording

Landscapes

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

Abstract

本发明提供了一种缓存视频数据及读取视频数据的方法及装置。其中,缓存视频数据的方法包括:接收待存储视频帧;在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;将待存储视频帧缓存在存储节点中。本发明中创建了静态内存的流式环形队列,在流式环形队列中动态地为待存储视频帧分配存储节点,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,在静态内存中按需动态分配内存,融合了静态内存与动态内存两者的优势,提高了缓存视频数据的系统性能。

Description

一种缓存视频数据及读取视频数据的方法及装置
技术领域
本发明涉及视频缓存技术领域,具体而言,涉及一种缓存视频数据及读取视频数据的方法及装置。
背景技术
目前,视频监控对视频流的实时性要求很高,为了提高视频监控的服务质量,需要对视频监控产生的视频数据进行缓存,以便在网络不稳定时通过缓存的视频数据来支持用户浏览监控视频的需求。
当前,相关技术中通过缓冲池来缓存视频数据,缓冲池中事先划分了多个缓冲区。在缓存视频数据时,接收监控设备传输的视频帧,根据该视频帧的大小,从缓冲池中的空闲缓冲区中选择存储空间大于或等于该视频帧的大小的空闲缓冲区,将该视频帧缓存到选择的空闲缓冲区中。
但是由于不同类型的视频帧的大小不固定,I(I frame,内部画面)帧的大小大于P(P frame)帧和B(B frame)帧的大小,缓冲池的空闲缓冲区中并不一定有适合存储当前视频帧的空闲缓冲区,且需要耗时耗资源的去选择适合的空闲缓冲区,导致缓存视频数据的系统性能很低。
发明内容
有鉴于此,本发明实施例的目的在于提供一种缓存视频数据及读取视频数据的方法及装置,实现在静态内存的流式环形队列中动态地为待存储视频帧分配存储节点,在静态内存中按需动态分配内存,提高了缓存视频数据的系统性能。
第一方面,本发明实施例提供了一种缓存视频数据的方法,所述方法包括:
接收待存储视频帧;
在预先创建的流式环形队列中动态地为所述待存储视频帧分配存储节点;
将所述待存储视频帧缓存在所述存储节点中。
结合第一方面,本发明实施例提供了上述第一方面的第一种可能的实现方式,其中,所述在预先创建的流式环形队列中动态地为所述待存储视频帧分配存储节点之前,还包括:
根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的所述大小的流式环形队列;或者,
获取预设的内存地址和内存值,将内存中所述内存地址对应的大小为所述内存值的存储空间创建为流式环形队列。
结合第一方面,本发明实施例提供了上述第一方面的第二种可能的实现方式,其中,所述在预先创建的流式环形队列中动态地为所述待存储视频帧分配存储节点,包括:
根据预设的数据头长度和所述待存储视频帧,确定存储所述待存储视频帧所需的内存大小;
获取预先创建的流式环形队列的内存状态;
根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置;
将从所述起始位置开始且大小为所述内存大小的内存空间确定为所述待存储视频帧对应的存储节点。
结合第一方面的第二种可能的实现方式,本发明实施例提供了上述第一方面的第三种可能的实现方式,其中,所述根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置,包括:
当所述内存状态指示所述流式环形队列的头尾指针均为空时,将所述流式环形队列的头部位置确定为所述待存储视频帧对应的起始位置;
当所述内存状态指示所述流式环形队列的头指针和/或尾指针不为空时,获取所述流式环形队列中空闲缓冲区的长度,根据所述内存大小和所述空闲缓冲区的长度,确定所述待存储视频帧对应的起始位置。
结合第一方面,本发明实施例提供了上述第一方面的第四种可能的实现方式,其中,所述将所述待存储视频帧缓存在所述存储节点中,包括:
从所述待存储视频帧的帧头信息中获取所述待存储视频帧的帧数据长度;
获取所述待存储视频帧的上一帧指针和下一帧指针;
将所述帧数据长度、所述上一帧指针、所述下一帧指针及写标志组成所述待存储视频帧的数据头;
将所述数据头和所述待存储视频帧存储在所述存储节点中。
结合第一方面的第四种可能的实现方式,本发明实施例提供了上述第一方面的第五种可能的实现方式,其中,所述方法还包括:
根据所述流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定所述流式环形队列中存储的视频帧的先后顺序;
根据所述流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;
将所述每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
结合第一方面的第四种可能的实现方式,本发明实施例提供了上述第一方面的第六种可能的实现方式,其中,所述方法还包括:
根据所述流式环形队列中存储的每个视频帧的帧数据长度和存储所述每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;
将所述每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。
第二方面,本发明实施例提供了一种读取视频数据的方法,所述方法包括:
接收用户的终端发送的读取视频数据的请求;
从流式环形队列中读取视频数据包括的视频帧;
将读取的所述视频帧发送给所述用户的终端。
结合第二方面,本发明实施例提供了上述第二方面的第一种可能的实现方式,其中,所述从流式环形队列中读取视频数据包括的视频帧,包括:
按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
结合第二方面,本发明实施例提供了上述第二方面的第二种可能的实现方式,其中,所述从流式环形队列中读取视频数据包括的视频帧,包括:
按照帧索引随机读取方式,根据所述读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取所述帧索引标识对应的第一存储指针;
从所述帧索引指针队列中获取位于所述帧索引标识之后的帧索引标识对应第二存储指针;
从流式环形队列中读取所述第一存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第二存储指针对应的每个视频帧。
结合第二方面,本发明实施例提供了上述第二方面的第三种可能的实现方式,其中,所述从流式环形队列中读取视频数据包括的视频帧,包括:
按照字节流随机读取方式,根据所述读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取所述首字节索引对应的第三存储指针;
从所述字节索引指针队列中获取位于所述首字节索引之后的首字节索引标识对应第四存储指针;
从流式环形队列中读取所述第三存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第四存储指针对应的每个视频帧。
结合第二方面,本发明实施例提供了上述第二方面的第四种可能的实现方式,其中,所述方法还包括:
在接收到用户的终端发送的读取视频数据的请求时,在流式环形队列存储的每个视频帧的数据头中添加所述用户对应的用户读操作信息;
当监测到所述流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的所述用户读操作信息,通过回调函数向所述用户的终端发送回调通知消息。
第三方面,本发明实施例提供了一种缓存视频数据的装置,所述装置包括:
接收模块,用于接收待存储视频帧;
分配模块,用于在预先创建的流式环形队列中动态地为所述待存储视频帧分配存储节点;
缓存模块,用于将所述待存储视频帧缓存在所述存储节点中。
结合第三方面,本发明实施例提供了上述第三方面的第一种可能的实现方式,其中,所述装置还包括:
创建模块,用于根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的所述大小的流式环形队列;或者,
所述创建模块,用于获取预设的内存地址和内存值,将内存中所述内存地址对应的大小为所述内存值的存储空间创建为流式环形队列。
结合第三方面,本发明实施例提供了上述第三方面的第二种可能的实现方式,其中,所述分配模块包括:
第一确定单元,用于根据预设的数据头长度和所述待存储视频帧,确定存储所述待存储视频帧所需的内存大小;
第一获取单元,用于获取预先创建的流式环形队列的内存状态;
第二确定单元,用于根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置;
第三确定单元,用于将从所述起始位置开始且大小为所述内存大小的内存空间确定为所述待存储视频帧对应的存储节点。
结合第三方面的第二种可能的实现方式,本发明实施例提供了上述第三方面的第三种可能的实现方式,其中,所述第二确定单元包括:
第一确定子单元,用于当所述内存状态指示所述流式环形队列的头尾指针均为空时,将所述流式环形队列的头部位置确定为所述待存储视频帧对应的起始位置;
第二确定子单元,用于当所述内存状态指示所述流式环形队列的头指针和/或尾指针不为空时,获取所述流式环形队列中空闲缓冲区的长度,根据所述内存大小和所述空闲缓冲区的长度,确定所述待存储视频帧对应的起始位置。
结合第三方面,本发明实施例提供了上述第三方面的第四种可能的实现方式,其中,所述缓存模块包括:
第二获取单元,用于从所述待存储视频帧的帧头信息中获取所述待存储视频帧的帧数据长度;
第三获取单元,用于获取所述待存储视频帧的上一帧指针和下一帧指针;
组成单元,用于将所述帧数据长度、所述上一帧指针、所述下一帧指针及写标志组成所述待存储视频帧的数据头;
存储单元,用于将所述数据头和所述待存储视频帧存储在所述存储节点中。
结合第三方面的第四种可能的实现方式,本发明实施例提供了上述第三方面的第五种可能的实现方式,其中,所述装置还包括:
帧索引创建模块,用于根据所述流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定所述流式环形队列中存储的视频帧的先后顺序;根据所述流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;将所述每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
结合第三方面的第四种可能的实现方式,本发明实施例提供了上述第三方面的第六种可能的实现方式,其中,所述装置还包括:
字节索引创建模块,用于根据所述流式环形队列中存储的每个视频帧的帧数据长度和存储所述每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;将所述每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。
第四方面,本发明实施例提供了一种读取视频数据的装置,所述装置包括:
接收模块,用于接收用户的终端发送的读取视频数据的请求;
读取模块,用于从流式环形队列中读取视频数据包括的视频帧;
发送模块,用于将读取的所述视频帧发送给所述用户的终端。
结合第四方面,本发明实施例提供了上述第四方面的第一种可能的实现方式,其中,所述读取模块,用于按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
结合第四方面,本发明实施例提供了上述第四方面的第二种可能的实现方式,其中,所述读取模块包括:
第一获取单元,用于按照帧索引随机读取方式,根据所述读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取所述帧索引标识对应的第一存储指针;从所述帧索引指针队列中获取位于所述帧索引标识之后的帧索引标识对应第二存储指针;
第一读取单元,用于从流式环形队列中读取所述第一存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第二存储指针对应的每个视频帧。
结合第四方面,本发明实施例提供了上述第四方面的第三种可能的实现方式,其中,所述读取模块包括:
第二获取单元,用于按照字节流随机读取方式,根据所述读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取所述首字节索引对应的第三存储指针;从所述字节索引指针队列中获取位于所述首字节索引之后的首字节索引标识对应第四存储指针;
第二读取单元,用于从流式环形队列中读取所述第三存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第四存储指针对应的每个视频帧。
结合第四方面,本发明实施例提供了上述第四方面的第四种可能的实现方式,其中,所述装置还包括:
添加模块,用于在接收到用户的终端发送的读取视频数据的请求时,在流式环形队列存储的每个视频帧的数据头中添加所述用户对应的用户读操作信息;
回调通知模块,用于当监测到所述流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的所述用户读操作信息,通过回调函数向所述用户的终端发送回调通知消息。
在本发明实施例提供的方法及装置中,接收待存储视频帧;在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;将待存储视频帧缓存在存储节点中。本发明中创建了静态内存的流式环形队列,在流式环形队列中动态地为待存储视频帧分配存储节点,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,在静态内存中按需动态分配内存,融合了静态内存与动态内存两者的优势,提高了缓存视频数据的系统性能。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1A示出了本发明实施例1所提供的一种缓存视频数据的方法流程图;
图1B示出了本发明实施例1所提供的一种流式环形队列的示意图;
图1C示出了本发明实施例1所提供的流式环形队列的一种内存状态示意图;
图1D示出了本发明实施例1所提供的流式环形队列的另一种内存状态示意图;
图1E示出了本发明实施例1所提供的另一种流式环形队列的示意图;
图2示出了本发明实施例2所提供的一种读取视频数据的方法流程图;
图3示出了本发明实施例3所提供的一种缓存视频数据的装置结构示意图;
图4示出了本发明实施例4所提供的一种读取视频数据的装置结构示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
考虑到相关技术中通过缓冲池来缓存视频数据,缓冲池的空闲缓冲区中并不一定有适合存储当前视频帧的空闲缓冲区,且需要耗时耗资源的去选择适合的空闲缓冲区,导致缓存视频数据的系统性能很低。基于此,本发明实施例提供了一种缓存视频数据及读取视频数据的方法及装置。下面通过实施例进行描述。
实施例1
本发明实施例提供了一种缓存视频数据的方法。本发明实施例的执行主体为服务器,该服务器可以为视频服务器或代理服务器等。
本方法缓存视频数据之前,首先需要通过如下方式来创建静态内存的流式环形队列,然后才通过创建的流式环形队列来缓存视频数据。
在本发明实施例中,可以通过如下两种方式来创建流式环形队列,具体包括,
第一种方式,根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的该大小的流式环形队列。
第一种方式的具体过程为,计算预设的视频分辨率与每秒帧数的乘积,得到每秒传输的视频帧的大小。预设的视频延迟时间为预设的用户可接受的视频延迟时间。计算每秒传输的视频帧的大小与预设的视频延迟时间的乘积,得到该预设的视频延迟时间内的所有视频帧的总大小。该总大小即为缓存该预设的视频延迟时间内的所有视频帧所需的存储空间的大小。在内存中创建一个大小为该总大小的静态内存空间,在该静态内存空间中设置头指针和尾指针,并设置该尾指针指向头指针,使该静态内存空间形成一个环形内存空间,该环形内存空间即为流式环形队列。通过上述第一种方式创建流式环形队列之后,由流式环形队列内部申请存储节点及释放内存。
创建上述静态内存空间的创建函数如下所示:
BOOL Open(int total_buf_size,LPCTSTR name=NULL,void*external_buf=NULL,int align=sizeof(int));
其中,BOOL Open()为创建函数;align为地址对齐单位,buf(buffer,尺寸)地址对齐到align的整数倍;external_buf为外部提供的buf,默认内部分配;total_buf_size表示如果external_buf不为空,则需保证external_buf有total_buf_size字节大小;name为buffer的名字;创建函数的返回值表示是否创建成功。
第二种方式,获取预设的内存地址和内存值,将内存中内存地址对应的大小为内存值的存储空间创建为流式环形队列。
由技术人员在服务器中预先设置内存地址和内存值,服务器获取预设的内存地址和内存值,在内存中锁定该内存地址对应的位置,从该内存地址对应的位置处开始划分大小为上述内存值的存储空间,在划分的存储空间中设置头指针和尾指针,并设置该尾指针指向头指针,使该存储空间形成一个环形内存空间,该环形内存空间即为流式环形队列。通过第二种方式创建流式环形队列之后,流式环形队列只使用该存储空间,并不释放内存。
通过上述第一种方式或第二种方式在内存中创建出流式环形队列之后,参见图1A,通过下述步骤101-103的操作,将视频数据缓存到创建的流式环形队列中。
步骤101:接收待存储视频帧;
接收视频源传输的待存储视频帧。在本发明实施例中,待存储视频帧可以为监控系统实时监控拍摄得到的实时视频流,也可以为视频服务器等其它视频源传输的已拍摄完的视频数据的视频帧。待存储视频帧一般为压缩后的视频帧,不同帧类型的待存储视频帧的大小不同,I帧比P帧和B帧的数据量大。
步骤102:在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;
本发明实施例定义了视频帧在流式环形队列中缓存的数据结构,如图1B所示,流式环形队列中缓存了多个视频帧,图1B中仅示意性地画出了第n帧、第n+1帧和第m帧,流式环形队列通过存储节点来存储视频帧,一个存储节点只存储一个视频帧,视频帧在存储节点中的数据结构包括数据头和数据流。数据流即为缓存的视频帧的帧数据,数据流的大小有视频帧的帧数据长度决定。数据头区域存储长度固定的结构体,数据头的结构体中包括视频帧的帧数据长度等信息。在流式环形队列中,视频帧的数据流的指针可以通过数据头的指针及数据头的长度来计算,假设指针p指向当前结点,则此节点中,数据头区域指针为p,数据流区域指针为数据头区域指针p加上数据头的长度。
如图1B所示,流式环形队列中缓存的相邻视频帧之间可以存在空闲字节。该空闲字节可以是预先设置的,也可以是在缓冲视频帧的过程中进行字节对齐时产生的。本发明实施例中为节点动态分配存储节点遵循了字节对齐的原则,地址对齐单位以变量的形式保存,方便流式环形队列的使用者自动调整。假设地址对齐单位为4,当前存储节点的结束位置为0x02196e01,则下一存储节点的起始位置理论上为0x02196e02,但字节对齐后实际上下一存储节点的起始位置为0x02196e04。
在本发明实施例中,预先设置了数据头的长度,数据流的长度即为视频帧的帧数据长度。因此缓存待存储节点所需的内存大小即为预设的数据头长度与待存储视频帧的帧数据长度之和。
本发明实施例中根据缓存该待存储视频帧所需的空间大小来分配该待存储视频帧的存储节点,具体分配过程如下所示:
根据预设的数据头长度和待存储视频帧,确定存储待存储视频帧所需的内存大小;获取预先创建的流式环形队列的内存状态;根据内存状态和确定的内存大小,确定流式环形队列中待存储视频帧对应的起始位置;将从该起始位置开始且大小为上述内存大小的内存空间确定为待存储视频帧对应的存储节点。
流式环形队列的内存状态表示流式环形队列中未占用的内存空间的大小及位置。在本发明实施例中,从流式环形队列的头节点或尾节点开始检测流式环形队列,检测出流式环形队列中未被占用的内存空间的起始位置和结束位置以及未被占用的内存空间的大小。当内存状态指示流式环形队列的头尾指针均为空时,表示流式环形队列中没有缓存任何视频帧。当内存状态指示流式环形队列的头指针为空而尾指针不为空,或者指示头指针不为空而尾指针为空,或者指示头指针和尾指针均不为空,则表示流式环形队列中缓存有视频帧,此时流式环形队列的内存状态可能存在如图1C和1D所示的两种状态。
当获取的内存状态指示流式环形队列的头尾指针均为空时,将流式环形队列的头部位置确定为待存储视频帧对应的起始位置。当内存状态指示流式环形队列的头指针和/或尾指针不为空时,获取流式环形队列中空闲缓冲区的长度,根据内存大小和空闲缓冲区的长度,确定待存储视频帧对应的起始位置。
为了便于理解,下面结合附图1C和1D来说明根据内存大小和空闲缓冲区的长度确定待存储视频帧对应的起始位置的过程。当内存状态为图1C所示时,将紧邻头节点的空闲缓冲区称为空闲区1,将紧邻尾节点的空闲缓冲区称为空闲区2。若待储存视频帧对应的内存大小小于或等于空闲区2的长度,则将尾节点之后紧邻尾节点的位置确定为待储存视频帧对应的起始位置,该起始位置与尾节点之间可以存在因字节对齐产生的几个空闲字节。
若待储存视频帧对应的内存大小大于空闲区2的长度,则比较待储存视频帧对应的内存大小与空闲区1的长度之间的大小关系,若待储存视频帧对应的内存大小小于或等于空闲区1的长度,则将头节点之前紧邻头节点的位置确定为待储存视频帧对应的起始位置。
若待储存视频帧对应的内存大小均大于空闲区1和2的长度,则确定待存储视频帧的起始位置的操作失败,停止待存储视频帧的插入,或者先释放头节点直到有足够的空间插入待存储视频帧。
同样地,当流式环形队列的内存为状态如图1D所示时,若待储存视频帧对应的内存大小小于或等于空闲区的长度,则将尾节点后紧邻尾节点的位置确定为待存储视频帧的起始位置,该起始位置与尾节点之间可以存在因字节对齐产生的几个空闲字节。若待储存视频帧对应的内存大小大于空闲区的长度,则确定待存储视频帧的起始位置的操作失败,停止待存储视频帧的插入,或者先释放头节点直到有足够的空间插入待存储视频帧。
另外,图1C和图1D所示的两种内存状态,在插入待存储视频帧之后,这两种内存状态可能会相互转换,即在图1C所示的内存状态时插入待存储视频帧之后图1C所示的内存状态可能变为图1D所示的内存状态。同样地,在图1D所示的内存状态时插入待存储视频帧之后图1D所示的内存状态也可能变为图1C所示的内存状态。
在本发明实施例中,通过上述方式确定待存储视频帧对应的起始位置后,将从该起始位置开始且大小为待存储视频帧所需的内存大小的内存空间确定为待存储视频帧对应的存储节点。
在流式环形队列中动态地为待存储视频帧分配存储节点,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,在静态内存中按需动态分配内存,融合了静态内存与动态内存两者的优势,提高了缓存视频数据的系统性能。
步骤103:将待存储视频帧缓存在分配的存储节点中。
在本发明实施例中,缓存视频帧时视频帧对应的数据头中还包括视频帧的上一帧指针、下一帧指针和写标志。其中,记录上一帧指针和下一帧指针是为了后续从流式环形队列中读取视频帧时能够顺序读取视频数据包括的每一视频帧,尤其是实时视频数据对顺序读取视频帧的要求更高。写标志用于标识该视频帧是否正在写入流式环形队列的缓冲区中。
视频帧的帧头信息中都包括视频帧的帧数长度。从待存储视频帧的帧头信息中获取待存储视频帧的帧数据长度;获取待存储视频帧的上一帧指针和下一帧指针;将帧数据长度、上一帧指针、下一帧指针及写标志组成待存储视频帧的数据头;将数据头和待存储视频帧存储在分配的存储节点中。
当正将待存储视频帧缓存到上述存储节点时,待存储视频帧对应的数据头中的写标志置为真,标识待存储视频帧尚未缓存完毕,以避免用户在此时读取待存储视频帧。当将待存储视频帧缓存完毕之后,将写标志置为假,标识待存储视频帧已经缓存结束,此时用户可以读取待存储视频帧。
通过上述步骤101-103的步骤将待存储视频帧存储在流式环形队列中之后,本发明实施例还创建了帧索引指针队列和字节索引指针队列,以方便后续从流式环形队列中读取该待存储视频帧,提高读取视频帧的效率。
上述建立帧索引指针队列的过程如下所示:
根据流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定流式环形队列中存储的视频帧的先后顺序;根据流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;将每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
为每个视频帧生成帧索引标识时,根据每个视频帧的先后顺序,从0开始为每个视频帧顺序生成帧索引标识。帧索引标识从0开始累加,即便流式环形队列清空,帧索引标识也是从上一次的基础上继续累加的,如此保证一个时间段内帧索引标识是不重复的。例如,第一帧的帧索引标识为0,第二帧的帧索引标识为1,以此类推,帧索引标识逐渐加1,当帧索引标识达到最大0xffffffffffffffff时,下一帧的帧索引标识再回归到0,开始下一轮的累加。
按照上述方式来生成视频帧的帧索引标识,会出现下一帧的帧索引标识小于上一帧的帧索引标识的情况,本发明实施例中采用两个视频帧的帧索引标识相减的方式判断视频帧的先后顺序。例如,第m帧和第n帧的先后顺序判断,若第m帧的帧索引标识与第n帧的帧索引标识的差小于0,则第m帧在第n帧之前,若第m帧的帧索引标识与第n帧的帧索引标识的差大于0,则第m帧在第n帧之后。这种根据两帧索引标识之差来判断视频帧的先后顺的方式,对帧索引标识为0和0xffffffffffffffff的视频帧也适用,因为在服务器等设备中,0为0x00000000000000000,因此0和0xffffffffffffffff的差即为0x00000000000000000–0xffffffffffffffff=0x0000000000000001,由于0x0000000000000001大于0,所以帧索引标识为0的视频帧在帧索引标识为0xffffffffffffffff的视频帧之后。
在本发明实施例中,建立字节索引指针队列的过程如下所示:
根据流式环形队列中存储的每个视频帧的帧数据长度和存储每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;将每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。上述每个视频帧的先后顺序也是根据数据头中包括的上一帧指针和下一帧指针来确定的。
字节索引也是从0开始累加,每增加一个字节加1。如此即便流式环形队列清空,字节索引也是从上一次的基础上累加的,确保一个时间段内字节索引是不重复的。例如,第一帧数据长度为38016,则第一帧的首字节索引为0,最后一个字节的索引为38015;第二帧的数据长度为256,则第二帧的首字节索引为38015+1,即为38016,最后一个字节索引为38271;依次类推,当字节索引达到最大值0xffffffffffffffff时,下一个字节索引也是回归到0,开始下一轮的累加。同样,根据字节索引来判断字节的先后顺序,也不能单纯的比较字节索引的大小,而是采用两字节索引之差与0的大小关系来进行判断。
通过上述方式建立帧索引指针队列和字节索引指针队列之后,后续从流式环形队列中读取视频帧时可以按照帧索引的方式来读取或者按照字节索引的方式来读取,提高读取视频帧的效率。
在本发明实施例中,还需要对流式环形队列进行缓冲区管理,缓冲区管理主要分为缓冲区的输入、输出、缓冲区空处理以及缓冲区满处理。流式环形队列的静态缓冲区的大小是固定的,缓冲区顺序使用,避免产生内存碎片,且支持在头部和尾部插入和删除存储节点,支持顺序锁定读区视频帧,也支持随机锁定读取视频帧。流式环形队列的数据输入和数据读取可同时进行,除了正在输入的存储节点,其它存储节点都能读取。当读到队尾后,若在队尾提交了新的存储节点,此时能保证能够正确地从上一个读取位置继续向后读取存储节点的内容。
另外,缓冲区空处理时,只清除所有存储节点,使存储节点的个数为0,帧索引标识不清0,而是置为最后一个帧索引标识加1。同样,字节索引也不清0,也是置为最后一个字节索引加1。清空缓冲区时不释放流式环形队列的缓冲区空间,关闭流式环形队列时才会释放缓冲区空间。
流式环形队列的缓冲区的大小是有上限的,当缓冲区的剩余空间不足以存放一个视频帧时,表示缓冲区满。当流式环形队列用于缓存视频监控的实时视频数据时,要保证视频数据的实时性,不能让视频帧的输入处于等待状态,这时缓冲区管理就需要有丢包策略。缓冲区中是按顺序存储视频帧的,即头部存储的是老的视频帧,尾部存储的是最新的视频帧,所以丢包是从头部开始丢,直到剩余空间能存放当前的待存储视频帧才停止丢包。当然,丢包时需要检查是否有用户正在使用等情况。
插入新视频帧时是否自动丢包可由流式环形队列的使用者指定,默认是自动丢包方式。如果流式环形队列用于文件传输,则使用者可指定不自动丢包。
另外,在本发明实施例中,如图1E所示,还可以将一个流式环形队列的缓冲区拆成两个缓冲区,分别存放数据头和数据流。每个数据头都是相同的结构,相同的大小,所以存放数据头的缓冲区可以是传统的循环队列。而数据流缓存在另一个流式环形队列的缓冲区中,只需在数据头中增加一个数据流指针即可保持数据流地址。但是此时通过数据流地址获取数据头信息很不方便,需要逐个查找,降低了系统的性能。为了解决这一问题可在数据流的缓冲区中再增加一个指针指向数据头,这样就能通过数据流方便地获取数据头的信息。
本发明实施例通过流式环形队列来缓存视频数据,能协调写入速度与读取速度之间的差异,从而有效解决视频监控中的延时问题,能差别对待不同用户的浏览速度。另外,本方案也可用于各种多线程通信的数据中间缓冲、接收网络数据和网络文件映射等。
在本发明实施例中,接收待存储视频帧;在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;将待存储视频帧缓存在存储节点中。本发明中创建了静态内存的流式环形队列,在流式环形队列中动态地为待存储视频帧分配存储节点,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,在静态内存中按需动态分配内存,融合了静态内存与动态内存两者的优势,提高了缓存视频数据的系统性能。
实施例2
参见图2,本发明实施例提供了一种读取视频数据的方法,该方法具体包括以下步骤:
步骤201:接收用户的终端发送的读取视频数据的请求;
用户的终端发送的读取视频数据的请求中携带视频数据的标识、视频帧的帧数据长度、视频帧的时间戳以及用户的终端标识等信息。
步骤202:从流式环形队列中读取视频数据包括的视频帧;
本发明实施例中可以通过顺序读取方式、帧索引随机读取方式和字节流随机读取方式三种方式来从流式环形队列中读取视频帧。
按照顺序读取方式进行读取的具体过程如下所示:按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
若流式环形队列中存储的是实时视频数据,则当接收到用户的终端发送的读取视频数据的请求时,可以按照上述顺序读取方式从流式环形队列中读取出缓存的所有视频帧。
若流式环形队列中存储的不是实时视频数据,则根据接收的读取视频数据的请求中携带的视频帧的时间戳,从流式环形队列中定位出该时间戳对应的视频帧,然后根据每个视频帧对应的数据头包括的上一帧指针和下一帧指针,从流式环形队列中依次读取出该时间戳对应的视频帧以及位于该视频帧之后的各个视频帧。
另外,由于视频帧的帧索引标识是按照视频帧在视频数据中的先后顺序依次生成的,所以在用户想要从视频数据的某一视频帧开始观看视频数据时,用户的终端也可以按照帧索引标识的生成方式,确定用户请求的第一个视频帧的帧索引标识,并在发送的读取视频数据的请求中携带该视频帧的帧索引标识。此时从流式环形队列中读取视频帧的具体操作包括:
按照帧索引随机读取方式,根据读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取帧索引标识对应的第一存储指针;从帧索引指针队列中获取位于帧索引标识之后的帧索引标识对应第二存储指针;从流式环形队列中读取第一存储指针对应的视频帧,以及从流式环形队列中依次读取第二存储指针对应的每个视频帧。
同样地,由于视频帧的字节索引是按照视频帧的字节在视频数据中的先后顺序依次生成的,所以在用户想要从视频数据的某一视频帧开始观看视频数据时,用户的终端也可以根据视频帧的帧数据长度按照字节索引的生成方式,确定用户请求的第一个视频帧的首字节索引,并在发送的读取视频数据的请求中携带该视频帧的首字节索引。此时从流式环形队列中读取视频帧的具体操作包括:
按照字节流随机读取方式,根据读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取首字节索引对应的第三存储指针;从字节索引指针队列中获取位于首字节索引之后的首字节索引标识对应第四存储指针;从流式环形队列中读取第三存储指针对应的视频帧,以及从流式环形队列中依次读取第四存储指针对应的每个视频帧。
按照上述帧索引随机读取方式或按照字节流随机读取方式来读取流式环形队列中的视频帧,可以快速定位需要读取的视频帧,提高读取视频帧的效率。
步骤203:将读取的视频帧发送给用户的终端。
在本发明实施例中,可能会存在多个用户同时请求读取流式环形队列中的视频帧,而由于各个用户的网络环境不同,导致各个用户读取视频帧的速度存在差异,尤其读取实时视频数据时,读取速度快的用户可能已经读到队尾,而读取速度慢的用户可能才读到队首。但是当流式环形队列中缓冲区存满时,需丢包来保证视频帧的实时性,丢掉一些视频帧后,读取速度慢的用户再来读取丢掉的这些视频帧时就会读取失败。
为了兼顾网络环境不同的用户,本发明实施例提供了回调通知的功能,在接收到用户的终端发送的读取视频数据的请求时,从读取视频数据的请求中获取用户的终端标识,在流式环形队列存储的每个视频帧的数据头中添加用户对应的用户读操作信息,该用户读操作信息几百块用户的终端标识,用于表示该用户的终端正在读取视频帧。
对流式环形队列进行实时监控,当监测到流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的用户读操作信息,通过回调函数向用户的终端发送回调通知消息。用户的终端收到该回调通知消息后,可快速处理或跳过非关键帧,继续向后读取视频帧,如此既保证了速度快的用户能读取实时视频数据,也保证了速度慢的用户延时时间不会太长。实现了对高配用户和低配用户的差别对待,不会因一个用户配置低而影响其他用户浏览视频的速度和质量。
在本发明实施例中,接收用户的终端发送的读取视频数据的请求;从流式环形队列中读取视频数据包括的视频帧;将读取的视频帧发送给用户的终端。通过流式环形队列来存储视频帧,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,提高了缓存视频数据的系统性能。且本发明通过顺序读取方式、帧索引随机读取方式和字节流随机读取方式三种方式来从流式环形队列中读取视频帧,可以快速定位需要读取的视频帧,提高读取视频帧的效率。并且本发明提供了回调通知功能,支持多用户的不同读取速度和不同读取进度,既保证了速度快的用户能读取实时视频数据,也保证了速度慢的用户延时时间不会太长。
实施例3
参见图3,本发明实施例提供了一种缓存视频数据的装置,该装置用于执行上述实施例1的缓存视频数据的方法。该装置具体包括:
接收模块301,用于接收待存储视频帧;
分配模块302,用于在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;
缓存模块303,用于将待存储视频帧缓存在存储节点中。
在接收模块301之前,该装置还包括:创建模块,用于根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的大小的流式环形队列;或者,
该创建模块,用于获取预设的内存地址和内存值,将内存中内存地址对应的大小为内存值的存储空间创建为流式环形队列。
上述分配模块302通过第一确定单元、第一获取单元、第二确定单元和第三确定单元来分配为待存储视频帧对应的存储节点。
第一确定单元,用于根据预设的数据头长度和待存储视频帧,确定存储待存储视频帧所需的内存大小;
第一获取单元,用于获取预先创建的流式环形队列的内存状态;
第二确定单元,用于根据内存状态和确定的内存大小,确定流式环形队列中待存储视频帧对应的起始位置;
第三确定单元,用于将从起始位置开始且大小为内存大小的内存空间确定为待存储视频帧对应的存储节点。
上述第二确定单元包括:
第一确定子单元,用于当内存状态指示流式环形队列的头尾指针均为空时,将流式环形队列的头部位置确定为待存储视频帧对应的起始位置;
第二确定子单元,用于当内存状态指示流式环形队列的头指针和/或尾指针不为空时,获取流式环形队列中空闲缓冲区的长度,根据内存大小和空闲缓冲区的长度,确定待存储视频帧对应的起始位置。
在本发明实施例中,缓存模块303通过第二获取单元、第三获取单元、组成单元和存储单元来缓存待存储视频帧。
第二获取单元,用于从待存储视频帧的帧头信息中获取待存储视频帧的帧数据长度;
第三获取单元,用于获取待存储视频帧的上一帧指针和下一帧指针;
组成单元,用于将帧数据长度、上一帧指针、下一帧指针及写标志组成待存储视频帧的数据头;
存储单元,用于将数据头和待存储视频帧存储在存储节点中。
在本发明实施例中,通过上述接收模块301、分配模块302和缓存模块303将待存储视频帧存储在流式环形队列中之后,还通过帧索引创建模块创建了帧索引指针队列,以及通过字节索引创建模块创建了字节索引指针队列,以方便后续从流式环形队列中读取该待存储视频帧,提高读取视频帧的效率。
帧索引创建模块,用于根据流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定流式环形队列中存储的视频帧的先后顺序;根据流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;将每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
字节索引创建模块,用于根据流式环形队列中存储的每个视频帧的帧数据长度和存储每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;将每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。
在本发明实施例中,接收待存储视频帧;在预先创建的流式环形队列中动态地为待存储视频帧分配存储节点;将待存储视频帧缓存在存储节点中。本发明中创建了静态内存的流式环形队列,在流式环形队列中动态地为待存储视频帧分配存储节点,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,在静态内存中按需动态分配内存,融合了静态内存与动态内存两者的优势,提高了缓存视频数据的系统性能。
实施例4
参见图4,本发明实施例提供了一种读取视频数据的装置,该装置用于执行上述实施例2提供的读取视频数据的方法。该装置具体包括:
接收模块401,用于接收用户的终端发送的读取视频数据的请求;
用户的终端发送的读取视频数据的请求中携带视频数据的标识、视频帧的帧数据长度、视频帧的时间戳以及用户的终端标识等信息。
读取模块402,用于从流式环形队列中读取视频数据包括的视频帧;
本发明实施例中可以通过顺序读取方式、帧索引随机读取方式和字节流随机读取方式三种方式来从流式环形队列中读取视频帧。
发送模块403,用于将读取的视频帧发送给用户的终端。
上述读取模块402,用于按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
在本发明实施例中,由于视频帧的帧索引标识是按照视频帧在视频数据中的先后顺序依次生成的,所以在用户想要从视频数据的某一视频帧开始观看视频数据时,用户的终端也可以按照帧索引标识的生成方式,确定用户请求的第一个视频帧的帧索引标识,并在发送的读取视频数据的请求中携带该视频帧的帧索引标识。此时读取模块402通过第一获取单元和第一读取单元来读取视频帧。
第一获取单元,用于按照帧索引随机读取方式,根据读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取帧索引标识对应的第一存储指针;从帧索引指针队列中获取位于帧索引标识之后的帧索引标识对应第二存储指针;
第一读取单元,用于从流式环形队列中读取第一存储指针对应的视频帧,以及从流式环形队列中依次读取第二存储指针对应的每个视频帧。
同样地,由于视频帧的字节索引是按照视频帧的字节在视频数据中的先后顺序依次生成的,所以在用户想要从视频数据的某一视频帧开始观看视频数据时,用户的终端也可以根据视频帧的帧数据长度按照字节索引的生成方式,确定用户请求的第一个视频帧的首字节索引,并在发送的读取视频数据的请求中携带该视频帧的首字节索引。此时读取模块通过第二获取单元和第二读取单元来读取视频帧。
第二获取单元,用于按照字节流随机读取方式,根据读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取首字节索引对应的第三存储指针;从字节索引指针队列中获取位于首字节索引之后的首字节索引标识对应第四存储指针;
第二读取单元,用于从流式环形队列中读取第三存储指针对应的视频帧,以及从流式环形队列中依次读取第四存储指针对应的每个视频帧。
按照上述帧索引随机读取方式或按照字节流随机读取方式来读取流式环形队列中的视频帧,可以快速定位需要读取的视频帧,提高读取视频帧的效率。
在本发明实施例中,可能会存在多个用户同时请求读取流式环形队列中的视频帧,而由于各个用户的网络环境不同,导致各个用户读取视频帧的速度存在差异,尤其读取实时视频数据时,读取速度快的用户可能已经读到队尾,而读取速度慢的用户可能才读到队首。但是当流式环形队列中缓冲区存满时,需丢包来保证视频帧的实时性,丢掉一些视频帧后,读取速度慢的用户再来读取丢掉的这些视频帧时就会读取失败。
为了兼顾网络环境不同的用户,该装置还通过添加模块在视频帧的数据头中添加用户读操作信息,并通过回调通知模块向用户的终端发送回调通知消息,以通知用户的终端流式环形队列进行了创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点等操作。
添加模块,用于在接收到用户的终端发送的读取视频数据的请求时,在流式环形队列存储的每个视频帧的数据头中添加用户对应的用户读操作信息;
回调通知模块,用于当监测到流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的用户读操作信息,通过回调函数向用户的终端发送回调通知消息。
在本发明实施例中,接收用户的终端发送的读取视频数据的请求;从流式环形队列中读取视频数据包括的视频帧;将读取的视频帧发送给用户的终端。通过流式环形队列来存储视频帧,既避免产生内存碎片,又根据待存储视频帧的大小来按需分配内存,提高了缓存视频数据的系统性能。且本发明通过顺序读取方式、帧索引随机读取方式和字节流随机读取方式三种方式来从流式环形队列中读取视频帧,可以快速定位需要读取的视频帧,提高读取视频帧的效率。并且本发明提供了回调通知功能,支持多用户的不同读取速度和不同读取进度,既保证了速度快的用户能读取实时视频数据,也保证了速度慢的用户延时时间不会太长。
本发明实施例所提供的缓存视频数据的装置及读取视频数据的装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的模块、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程。
在本申请所提供的几个实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (22)

1.一种缓存视频数据的方法,其特征在于,所述方法包括:
接收待存储视频帧;
根据预设的数据头长度和所述待存储视频帧,确定存储所述待存储视频帧所需的内存大小;
获取预先创建的静态内存的流式环形队列的内存状态;
根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置;
将从所述起始位置开始且大小为所述内存大小的内存空间确定为所述待存储视频帧对应的存储节点;
将所述待存储视频帧缓存在所述存储节点中;
若所述待存储视频帧对应的内存大小均大于所述流式环形对列中与头节点相邻的空闲区的长度及与尾节点相邻的空闲区的长度,则为所述待存储视频帧分配存储节点失败,释放所述头节点直到分配到满足所述待存储视频帧空间需求的存储节点,再将所述待存储视频帧插入所述存储节点中。
2.根据权利要求1所述的方法,其特征在于,根据预设的数据头长度和所述待存储视频帧,确定存储所述待存储视频帧所需的内存大小之前,还包括:
根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的所述大小的流式环形队列;或者,获取预设的内存地址和内存值,将内存中所述内存地址对应的大小为所述内存值的存储空间创建为流式环形队列。
3.根据权利要求1所述的方法,其特征在于,所述根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置,包括:
当所述内存状态指示所述流式环形队列的头尾指针均为空时,将所述流式环形队列的头部位置确定为所述待存储视频帧对应的起始位置;
当所述内存状态指示所述流式环形队列的头指针和/或尾指针不为空时,获取所述流式环形队列中空闲缓冲区的长度,根据所述内存大小和所述空闲缓冲区的长度,确定所述待存储视频帧对应的起始位置。
4.根据权利要求1所述的方法,其特征在于,所述将所述待存储视频帧缓存在所述存储节点中,包括:
从所述待存储视频帧的帧头信息中获取所述待存储视频帧的帧数据长度;
获取所述待存储视频帧的上一帧指针和下一帧指针;
将所述帧数据长度、所述上一帧指针、所述下一帧指针及写标志组成所述待存储视频帧的数据头;
将所述数据头和所述待存储视频帧存储在所述存储节点中。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
根据所述流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定所述流式环形队列中存储的视频帧的先后顺序;
根据所述流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;
将所述每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
根据所述流式环形队列中存储的每个视频帧的帧数据长度和存储所述每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;
将所述每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。
7.一种读取如权利要求1-6任一项所述的视频数据的方法,其特征在于,所述方法包括:
接收用户的终端发送的读取视频数据的请求;
从静态内存的流式环形队列中读取视频数据包括的视频帧;
将读取的所述视频帧发送给所述用户的终端。
8.根据权利要求7所述的方法,其特征在于,所述从静态内存的流式环形队列中读取视频数据包括的视频帧,包括:
按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
9.根据权利要求7所述的方法,其特征在于,所述从静态内存的流式环形队列中读取视频数据包括的视频帧,包括:
按照帧索引随机读取方式,根据所述读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取所述帧索引标识对应的第一存储指针;
从所述帧索引指针队列中获取位于所述帧索引标识之后的帧索引标识对应第二存储指针;
从流式环形队列中读取所述第一存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第二存储指针对应的每个视频帧。
10.根据权利要求7所述的方法,其特征在于,所述从静态内存的流式环形队列中读取视频数据包括的视频帧,包括:
按照字节流随机读取方式,根据所述读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取所述首字节索引对应的第三存储指针;
从所述字节索引指针队列中获取位于所述首字节索引之后的首字节索引标识对应第四存储指针;
从流式环形队列中读取所述第三存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第四存储指针对应的每个视频帧。
11.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在接收到用户的终端发送的读取视频数据的请求时,在流式环形队列存储的每个视频帧的数据头中添加所述用户对应的用户读操作信息;
当监测到所述流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的所述用户读操作信息,通过回调函数向所述用户的终端发送回调通知消息。
12.一种缓存视频数据的装置,其特征在于,所述装置包括:
接收模块,用于接收待存储视频帧;
分配模块,用于在预先创建的静态内存的流式环形队列中动态地为所述待存储视频帧分配存储节点;
缓存模块,用于将所述待存储视频帧缓存在所述存储节点中;若所述待存储视频帧对应的内存大小均大于所述流式环形对列中与头节点相邻的空闲区的长度及与尾节点相邻的空闲区的长度,则为所述待存储视频帧分配存储节点失败,释放所述头节点直到分配到满足所述待存储视频帧空间需求的存储节点,再将所述待存储视频帧插入所述存储节点中;
所述分配模块包括:第一确定单元,用于根据预设的数据头长度和所述待存储视频帧,确定存储所述待存储视频帧所需的内存大小;
第一获取单元,用于获取预先创建的流式环形队列的内存状态;
第二确定单元,用于根据所述内存状态和确定的所述内存大小,确定所述流式环形队列中所述待存储视频帧对应的起始位置;
第三确定单元,用于将从所述起始位置开始且大小为所述内存大小的内存空间确定为所述待存储视频帧对应的存储节点。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
创建模块,用于根据预设的视频分辨率、每秒帧数和预设的视频延迟时间,确定所需的存储空间的大小,创建确定的所述大小的流式环形队列;或者,
所述创建模块,用于获取预设的内存地址和内存值,将内存中所述内存地址对应的大小为所述内存值的存储空间创建为流式环形队列。
14.根据权利要求13所述的装置,其特征在于,所述第二确定单元包括:
第一确定子单元,用于当所述内存状态指示所述流式环形队列的头尾指针均为空时,将所述流式环形队列的头部位置确定为所述待存储视频帧对应的起始位置;
第二确定子单元,用于当所述内存状态指示所述流式环形队列的头指针和/或尾指针不为空时,获取所述流式环形队列中空闲缓冲区的长度,根据所述内存大小和所述空闲缓冲区的长度,确定所述待存储视频帧对应的起始位置。
15.根据权利要求12所述的装置,其特征在于,所述缓存模块包括:
第二获取单元,用于从所述待存储视频帧的帧头信息中获取所述待存储视频帧的帧数据长度;
第三获取单元,用于获取所述待存储视频帧的上一帧指针和下一帧指针;
组成单元,用于将所述帧数据长度、所述上一帧指针、所述下一帧指针及写标志组成所述待存储视频帧的数据头;
存储单元,用于将所述数据头和所述待存储视频帧存储在所述存储节点中。
16.根据权利要求15所述的装置,其特征在于,所述装置还包括:
帧索引创建模块,用于根据所述流式环形队列中存储的每个视频帧的数据头包括的上一帧指针和下一帧指针,确定所述流式环形队列中存储的视频帧的先后顺序;根据所述流式环形队列中存储的视频帧的先后顺序,为每个视频帧生成帧索引标识;将所述每个视频帧对应的帧索引标识及每个视频帧的存储节点对应的存储指针对应存储在帧索引指针队列中。
17.根据权利要求15所述的装置,其特征在于,所述装置还包括:
字节索引创建模块,用于根据所述流式环形队列中存储的每个视频帧的帧数据长度和存储所述每个视频帧的先后顺序,分别生成每个视频帧对应的首字节索引;将所述每个视频帧的首字节索引及每个视频帧的存储节点对应的存储指针对应存储在字节索引指针队列中。
18.一种读取如权利要求12-17任一项所述的视频数据的装置,其特征在于,所述装置包括:
接收模块,用于接收用户的终端发送的读取视频数据的请求;
读取模块,用于从静态内存的流式环形队列中读取视频数据包括的视频帧;
发送模块,用于将读取的所述视频帧发送给所述用户的终端。
19.根据权利要求18所述的装置,其特征在于,所述读取模块,用于按照顺序读取方式,根据每个视频帧的存储节点中数据头包括的上一帧指针和下一帧指针,从流式环形队列的头节点开始顺序读取视频数据包括的每个视频帧。
20.根据权利要求18所述的装置,其特征在于,所述读取模块包括:
第一获取单元,用于按照帧索引随机读取方式,根据所述读取视频数据的请求包括的帧索引标识,从帧索引指针队列中获取所述帧索引标识对应的第一存储指针;从所述帧索引指针队列中获取位于所述帧索引标识之后的帧索引标识对应第二存储指针;
第一读取单元,用于从流式环形队列中读取所述第一存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第二存储指针对应的每个视频帧。
21.根据权利要求18所述的装置,其特征在于,所述读取模块包括:
第二获取单元,用于按照字节流随机读取方式,根据所述读取视频数据的请求包括的首字节索引,从字节索引指针队列中获取所述首字节索引对应的第三存储指针;从所述字节索引指针队列中获取位于所述首字节索引之后的首字节索引标识对应第四存储指针;
第二读取单元,用于从流式环形队列中读取所述第三存储指针对应的视频帧,以及从所述流式环形队列中依次读取所述第四存储指针对应的每个视频帧。
22.根据权利要求18所述的装置,其特征在于,所述装置还包括:
添加模块,用于在接收到用户的终端发送的读取视频数据的请求时,在流式环形队列存储的每个视频帧的数据头中添加所述用户对应的用户读操作信息;
回调通知模块,用于当监测到所述流式环形队列创建缓冲区、销毁缓冲区、清空缓冲区、增加存储节点或删除存储节点时,根据视频帧的数据头中的所述用户读操作信息,通过回调函数向所述用户的终端发送回调通知消息。
CN201510689467.6A 2015-10-21 2015-10-21 一种缓存视频数据及读取视频数据的方法及装置 Active CN105245912B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510689467.6A CN105245912B (zh) 2015-10-21 2015-10-21 一种缓存视频数据及读取视频数据的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510689467.6A CN105245912B (zh) 2015-10-21 2015-10-21 一种缓存视频数据及读取视频数据的方法及装置

Publications (2)

Publication Number Publication Date
CN105245912A CN105245912A (zh) 2016-01-13
CN105245912B true CN105245912B (zh) 2019-05-31

Family

ID=55043355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510689467.6A Active CN105245912B (zh) 2015-10-21 2015-10-21 一种缓存视频数据及读取视频数据的方法及装置

Country Status (1)

Country Link
CN (1) CN105245912B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105657427A (zh) * 2016-01-25 2016-06-08 成都国铁电气设备有限公司 一种适用于接触网的高清图像压缩方法及系统
CN105657311A (zh) * 2016-03-11 2016-06-08 深圳市极酷威视科技有限公司 一种视频录制方法及装置
CN107391388B (zh) * 2016-05-17 2021-06-11 阿里巴巴集团控股有限公司 一种基于即时通信进行数据存储的方法和设备
CN106021026B (zh) * 2016-05-23 2020-02-18 浙江宇视科技有限公司 一种备份方法及装置
CN106802953A (zh) * 2017-01-16 2017-06-06 北京邮电大学 一种用于swf文件的半结构化数据模型构建方法及装置
CN106878683A (zh) * 2017-03-03 2017-06-20 天津天地伟业信息系统集成有限公司 一种图片流文件存储编码方法
CN109271327B (zh) 2017-07-18 2020-11-27 杭州海康威视数字技术股份有限公司 内存管理方法及装置
CN108563704A (zh) * 2018-03-26 2018-09-21 深圳市景阳信息技术有限公司 一种数据写入的方法、装置及设备
CN108628681A (zh) * 2018-04-13 2018-10-09 电信科学技术第五研究所有限公司 多用户环境下流式数据处理方法
CN108650544B (zh) * 2018-05-17 2020-09-29 上海七牛信息技术有限公司 一种媒体播放方法、装置以及媒体播放系统
CN108733344B (zh) * 2018-05-28 2023-07-04 深圳市道通智能航空技术股份有限公司 数据读写方法、装置以及环形队列
CN110555890B (zh) * 2018-05-30 2023-10-20 珠海全志科技股份有限公司 一种内存管理方法及系统
CN110798734A (zh) * 2018-08-02 2020-02-14 广州视源电子科技股份有限公司 视频帧的缓存和转发方法、装置和计算机设备
CN110245135B (zh) * 2019-05-05 2021-05-18 华中科技大学 一种基于numa架构的大规模流式图数据更新方法
CN110730364B (zh) * 2019-10-14 2021-08-31 广州微算互联信息技术有限公司 一种云手机数据传输方法、装置及存储介质
CN110996057B (zh) * 2019-12-02 2021-11-16 腾讯云计算(北京)有限责任公司 媒体数据处理方法、装置、计算机设备和存储介质
CN111586436A (zh) * 2020-04-03 2020-08-25 开放智能机器(上海)有限公司 一种流媒体转发服务器的数据转发系统及方法
CN111741246B (zh) * 2020-06-12 2022-07-05 浪潮(北京)电子信息产业有限公司 一种视频存储方法、装置、soc系统、介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101013400A (zh) * 2007-01-30 2007-08-08 金蝶软件(中国)有限公司 一种在内存中缓存数据的方法及装置
CN102595192A (zh) * 2012-03-07 2012-07-18 深圳市信义科技有限公司 一种视频流媒体无互斥缓冲方法
CN102630007A (zh) * 2012-03-31 2012-08-08 中船重工(武汉)凌久高科有限公司 一种处理tcp视频数据流的方法
CN103744621A (zh) * 2013-12-31 2014-04-23 深圳英飞拓科技股份有限公司 缓冲区循环读写的方法及装置
CN104461933A (zh) * 2014-11-07 2015-03-25 珠海全志科技股份有限公司 内存管理方法及其装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101013400A (zh) * 2007-01-30 2007-08-08 金蝶软件(中国)有限公司 一种在内存中缓存数据的方法及装置
CN102595192A (zh) * 2012-03-07 2012-07-18 深圳市信义科技有限公司 一种视频流媒体无互斥缓冲方法
CN102630007A (zh) * 2012-03-31 2012-08-08 中船重工(武汉)凌久高科有限公司 一种处理tcp视频数据流的方法
CN103744621A (zh) * 2013-12-31 2014-04-23 深圳英飞拓科技股份有限公司 缓冲区循环读写的方法及装置
CN104461933A (zh) * 2014-11-07 2015-03-25 珠海全志科技股份有限公司 内存管理方法及其装置

Also Published As

Publication number Publication date
CN105245912A (zh) 2016-01-13

Similar Documents

Publication Publication Date Title
CN105245912B (zh) 一种缓存视频数据及读取视频数据的方法及装置
US11431791B2 (en) Content delivery method, virtual server management method, cloud platform, and system
US10044646B1 (en) Systems and methods for efficiently storing packet data in network switches
CN111177017B (zh) 一种内存分配方法及装置
US20050086386A1 (en) Shared running-buffer-based caching system
CN102223681B (zh) 一种物联网系统及其中缓存的控制方法
CN104394096A (zh) 一种基于多核处理器的报文处理方法及多核处理器
CN105468305A (zh) 一种数据缓存方法、装置和系统
JP2015511790A (ja) メッセージ処理方法及び装置
CN205430501U (zh) 移动终端网络广告视频和正片视频无缝切换装置
CN105095495B (zh) 一种分布式文件系统缓存管理方法和系统
CN110399348A (zh) 文件重删方法、装置、系统及计算机可读存储介质
CN104572498B (zh) 报文的缓存管理方法和装置
CN108540510B (zh) 一种云主机创建方法、装置及云服务系统
CN104346404B (zh) 一种访问数据的方法、设备及系统
KR20110059532A (ko) 공유 디스크 데이터베이스 시스템에서 락 통신들을 감소시키기 위한 접근 방법들
CN108415962A (zh) 一种云存储系统
CN105988941B (zh) 缓存数据处理方法和装置
CN106227679B (zh) 一种数据缓存替换方法及装置
US9996470B2 (en) Workload management in a global recycle queue infrastructure
CN102710790B (zh) 一种基于元数据管理的分布式缓存实现方法及系统
CN111857992A (zh) 一种Radosgw模块中线程资源分配方法和装置
CN110457535A (zh) 哈希桶查找方法、哈希表存储、哈希表查找方法和装置
CN110245129A (zh) 一种分布式全局数据去重方法和装置
CN108595109B (zh) 一种基于Ceph分布式存储系统的多客户端写的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PP01 Preservation of patent right

Effective date of registration: 20220726

Granted publication date: 20190531

PP01 Preservation of patent right