logo好方法网

一种流媒体转发服务器的数据转发系统及方法


技术摘要:
本发明提供一种流媒体转发服务器的数据转发系统及方法,涉及互联网技术领域,包括:流媒体转发服务器接收各媒体源发送的音视频数据,并将音视频数据以帧为单位且以循环覆盖的方式加入至循环缓存队列,同时将每帧音视频数据的帧信息分别保存至帧数据节点列表和媒体源节  全部
背景技术:
流媒体转发是指从网络设备获取音视频数据,再将音视频数据转发给各个客户端 的模块。现有的流媒体转发模块一般为每个流媒体网络链路预分配足够一帧数据长度的内 存用于接收网络数据,或根据数据长度动态分配内存,前者可能造成内存利用率低下,而后 者又容易导致内存碎片化严重。如果流媒体数据转发阻塞则会导致整个链路网络阻塞等问 题。 视频每帧的数据量大小不一致,如果用于网络接收音视频数据的内存预分配过 大,会造成资源的浪费;如果预分配过小,则会导致内存无法保存完整帧数据;或如果按帧 数据大小动态分配内存,则会导致内存碎片化严重。再者,音视频数据网络接收与转发无缓 存异步处理,则会导致整个链路网络阻塞、网络缓存区变大、网络平滑等一系列问题的出 现。
技术实现要素:
针对现有技术中存在的问题,本发明提供一种流媒体转发服务器的数据转发系 统,所述流媒体转发服务器分别连接至少一媒体源和至少一客户端,所述流媒体转发服务 器具体包括: 第一存储区,用于保存具有预设长度的循环缓存队列,所述循环缓存队列中以帧 为单位存储有各所述媒体源发送的音视频数据; 第二存储区,用于保存关联于所述循环缓存队列的一帧数据节点列表和若干媒体 源节点列表,每个所述媒体源节点列表具有对应于单个所述媒体源的媒体源编号; 所述帧数据节点列表具有若干帧节点,每个所述帧节点具有一帧节点序号,各所 述帧节点中以帧为单位存放有所有所述媒体源的所述音视频数据的所述帧信息,以及每帧 所述音视频数据关联的所述媒体源编号; 每个所述媒体源节点列表中存放有对应的单个所述媒体源的所述音视频数据的 所述帧信息所在的所述帧节点序号; 写数据模块,分别连接所述第一存储区和所述第二存储区,用于接收各所述媒体 源发送的所述音视频数据,并将所述音视频数据以帧为单位且以循环覆盖的方式加入至所 述循环缓存队列,同时将每帧所述音视频数据的所述帧信息分别保存至所述帧数据节点列 表和所述媒体源节点列表; 读数据模块,分别连接所述第一存储区和所述第二存储区,用于接收所述客户端 发送的包含所述媒体源编号的数据读取请求,依次读取所述媒体源编号对应的所述帧数据 节点列表和所述帧数据节点列表中的所述帧信息,并根据所述帧信息由所述循环缓存队列 5 CN 111586436 A 说 明 书 2/8 页 中读取所述音视频数据。 优选的,所述写数据模块具体包括: 数据获取单元,用于接收所述音视频数据,针对所述音视频数据的每一帧当前帧 数据,读取所述当前帧数据的帧数据协议头得到所述当前帧数据的当前帧数据长度; 内存查询单元,连接所述数据获取单元,用于将所述当前帧数据长度与预先获取 的所述循环缓存队列中的上一帧数据的存储空间之后的连续空闲帧数据长度进行比较,并 在所述当前帧数据长度大于所述连续空闲帧数据长度时输出第一比较结果,以及在所述当 前帧数据长度不大于所述连续空闲帧数据长度时输出第二比较结果; 第一写入单元,连接所述内存查询单元,用于根据所述第一比较结果采用覆盖的 方式将所述当前帧数据加入至所述循环缓存队列,并同步更新所述帧数据节点列表和所述 媒体源序号列表; 第二写入单元,连接所述内存查询单元,用于根据第二比较结果采用添加的方式 将所述当前帧数据加入在所述循环缓存队列,并同步更新所述帧数据节点列表和所述媒体 源序号列表。 优选的,所述第一写入单元具体包括: 判断子单元,用于根据所述帧数据节点列表中保存的所述帧信息判断所述连续空 闲帧数据长度对应的所述存储空间是否在所述循环缓存队列的尾部,并在所述存储空间在 所述循环缓存队列的尾部时输出第一判断结果,以及在所述存储空间不在所述循环缓存队 列的尾部时输出第二判断结果; 第一覆盖子单元,连接所述判断子单元,用于根据所述第一判断结果将所述连续 空间帧数据长度对应的所述存储空间舍弃,并将所述当前帧数据写入至所述循环缓存队列 的头部并覆盖原有帧数据,且同步更新所述帧数据节点列表和所述媒体源序号列表; 第二覆盖子单元,连接所述判断子单元,用于根据所述第二判断结果将所述当前 帧数据写入所述循环缓存队列的上一帧数据之后并覆盖原有帧数据,且同步更新所述帧数 据节点列表和所述媒体源序号列表。 优选的,所述读数据模块具体包括: 第一读取单元,用于接收所述客户端发送的包含所述媒体源编号的数据读取请 求,并根据所述媒体源编号命中对应的所述媒体源节点列表; 第二读取单元,连接所述第一读取单元,用于根据所述媒体源节点列表中的各所 述帧信息依次命中所述帧数据节点列表中的所述帧信息; 第三读取单元,连接所述第二读取单元,根据所述帧信息以帧为单位依次读取所 述循环缓存队列中的所述音视频数据。 优选的,所述帧数据节点列表和所述媒体源节点列表均采用循环覆盖右移策略进 行更新。 优选的,所述循环缓存队列的所述预设长度根据所述流媒体转发服务器的输入带 宽规格预先分配。 一种流媒体转发服务器的数据转发方法,应用以上任意一项所述的数据转发系 统,所述数据转发方法具体包括: 步骤S1,所述流媒体转发服务器接收各所述媒体源发送的所述音视频数据,并将 6 CN 111586436 A 说 明 书 3/8 页 所述音视频数据以帧为单位且以循环覆盖的方式加入至所述循环缓存队列,同时将每帧所 述音视频数据的所述帧信息分别保存至所述帧数据节点列表和所述媒体源节点列表; 步骤S2,所述流媒体转发服务器接收所述客户端发送的包含所述媒体源编号的数 据读取请求,依次读取所述媒体源编号对应的所述帧数据节点列表和所述帧数据节点列表 中的所述帧信息,并根据所述帧信息由所述循环缓存队列中读取所述音视频数据。 优选的,所述步骤S1具体包括: 步骤S11,所述流媒体转发服务器接收各所述媒体源发送的所述音视频数据,针对 所述音视频数据的每一帧当前帧数据,读取所述当前帧数据的帧数据协议头得到所述当前 帧数据的当前帧数据长度; 步骤S12,所述流媒体转发服务器将所述当前帧数据长度与预先获取的所述循环 缓存队列中的上一帧数据的存储空间之后的连续空闲帧数据长度进行比较: 若所述当前帧数据长度大于所述连续空闲帧数据长度,则转向步骤S13; 若所述当前帧数据长度不大于所述连续空闲帧数据长度,则转向步骤S14; 步骤S13,所述流媒体转发服务器采用覆盖的方式将所述当前帧数据加入至所述 循环缓存队列,并同步更新所述帧数据节点列表和所述媒体源序号列表; 步骤S14,所述流媒体转发服务器采用添加的方式将所述当前帧数据加入在所述 循环缓存队列,并同步更新所述帧数据节点列表和所述媒体源序号列表。 优选的,所述步骤S13具体包括: 步骤S131,所述流媒体转发服务器根据所述帧数据节点列表中保存的所述帧信息 判断所述连续空闲帧数据长度对应的所述存储空间是否在所述循环缓存队列的尾部: 若是,则转向步骤S132; 若否,则转向步骤S133; 步骤S132,所述流媒体转发服务器将所述连续空间帧数据长度对应的所述存储空 间舍弃,并将所述当前帧数据写入至所述循环缓存队列的头部并覆盖原有帧数据,且同步 更新所述帧数据节点列表和所述媒体源序号列表; 步骤S133,所述流媒体转发服务器将所述当前帧数据写入所述循环缓存队列的上 一帧数据之后并覆盖原有帧数据,且同步更新所述帧数据节点列表和所述媒体源序号列 表。 优选的,所述步骤S2具体包括: 步骤S21,所述流媒体转发服务器接收所述客户端发送的包含所述媒体源编号的 数据读取请求,并根据所述媒体源编号命中对应的所述媒体源节点列表; 步骤S22,所述流媒体转发服务器根据所述媒体源节点列表中的各所述帧信息依 次命中所述帧数据节点列表中的所述帧信息; 步骤S23,所述流媒体转发服务器根据所述帧信息以帧为单位依次读取所述循环 缓存队列中的所述音视频数据。 上述技术方案具有如下优点或有益效果: 1)多个摄像机码流共用循环缓存队列,并采用循环覆盖的方式使用内存,有效提 升流媒体转发服务器的内存利用率; 2)数据接收与转发分离,有效避免网络阻塞等问题,使得软件架构设计更为灵活。 7 CN 111586436 A 说 明 书 4/8 页 附图说明 图1为本发明的较佳的实施例中,一种流媒体转发服务器的数据转发系统的结构 示意图; 图2为本发明的较佳的实施例中,一种流媒体转发服务器的数据转发方法的流程 示意图; 图3为本发明的较佳的实施例中,写数据过程的流程示意图; 图4为本发明的较佳的实施例中,采用覆盖的方式写入当前帧数据的方法的流程 示意图; 图5为本发明的较佳的实施例中,读数据过程的流程示意图; 图6为本发明的一个较佳的实施例中,初始化状态时,流媒体转发服务器的内存使 用示意图; 图7为本发明的一个较佳的实施例中,写入5帧数据时,流媒体转发服务器的内存 使用示意图; 图8为本发明的一个较佳的实施例中,再写入1帧数据时,流媒体转发服务器的内 存使用示意图; 图9为本发明的一个较佳的实施例中,再写入1帧数据时,流媒体转发服务器的内 存使用示意图。
下载此资料需消耗2积分,
分享到:
收藏