一种实现准实时发送媒体数据的方法.pdf

上传人:b*** 文档编号:973028 上传时间:2018-03-22 格式:PDF 页数:8 大小:367.33KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110265838.X

申请日:

2011.09.08

公开号:

CN102325136A

公开日:

2012.01.18

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):H04L 29/06申请公布日:20120118|||实质审查的生效IPC(主分类):H04L 29/06申请日:20110908|||公开

IPC分类号:

H04L29/06; G06F9/48

主分类号:

H04L29/06

申请人:

中兴通讯股份有限公司

发明人:

王魏强; 丁向军; 夏洪升

地址:

518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部

优先权:

专利代理机构:

深圳市世纪恒程知识产权代理事务所 44287

代理人:

胡海国

PDF下载: PDF下载
内容摘要

本发明涉及一种实现准实时发送媒体数据的方法,所述方法首先设置计划发包时间以及组装待发送的媒体数据,得到待发送数据包;然后根据计划发包时间计算中断定时时长,并将发包处理函数和待发送数据包登记到中断处理程序中,等待中断,同时将所述系统调用加入到内核等待队列中;中断定时到期后产生中断,触发所述中断处理程序完成待发送数据包的发送,发送完成后唤醒所述内核等待队列中对应的发包系统调用。本发明减少了工作空间切换导致的上下文切换开销,同时降低了系统调度对时延的影响;实现了数据包的准实时发送。

权利要求书

1: 一种实现准实时发送媒体数据的方法, 基于 Linux 网络协议栈, 其特征在于, 包括以 下步骤 : 步骤一 : 设置发包系统调用的计划发包时间以及组装待发送的媒体数据, 得到待发送 数据包 ; 步骤二 : 根据所述计划发包时间计算中断定时时长, 并将所述发包系统调用的发包处 理函数和待发送数据包登记到中断处理程序中, 等待中断, 同时将所述系统调用加入到内 核等待队列中 ; 步骤三 : 中断定时到期后产生中断, 触发所述中断处理程序完成待发送数据包的发送, 发送完成后唤醒所述内核等待队列中对应的发包系统调用。
2: 如权利要求 1 所述的实现准实时发送媒体数据的方法, 其特征在于, 所述步骤一还 包括 : 对待发送数据包的路由查找、 MAC 地址学习、 UDP/IP/MAC 头部进行封装。
3: 如权利要求 2 所述的实现准实时发送媒体数据的方法, 其特征在于, 所述步骤三中 : 所述中断服务程序调用所述登记在其中的发包处理函数对所述登记在其中的待发送 数据包进行发送。

说明书


一种实现准实时发送媒体数据的方法

    技术领域 本发明属于计算机应用领域, 具体涉及一种媒体服务器及一种实现准实时发送媒 体数据的方法。
     背景技术 现有技术中, 在基于 Linux 操作系统的媒体服务器应用中, 需要定时的将媒体数 据从服务器主机发送到网络上。定时发送机制的性能将直接关系到媒体服务的质量, 关系 到用户对媒体服务业务的满意程度。
     现有技术中, 用户进程实现定时发送媒体数据包的方法主要包括以下两种 : (1) 延时方式 ; (2) 定时器方式 ;
     延时方式一般使用 select 或者 nanosleep 系统调用实现, 当指定的延时结束之后 调用返回给用户进程, 用户进程继而可以进行媒体数据包的发送。
     定时器方式一般使用 setitimer 系统调用实现, 在指定的一段时间到了之后, 通 过信号的方式通知用户进程, 在信号处理程序中完成媒体数据包的发送。
     在现有技术的方式下, 当延时系统调用或者定时器系统调用返回时, 用户发包进 程需要从内核态切换到用户态, 期间将会进行系统调度。一方面由于 Linux 是一个多任务 而非实时操作系统, 延时系统调用或者定时器系统调用与生俱来就具有不精确性, 这使得 在用户空间中执行的进程不能精确的控制时间 ; 另一方面系统调度过程中可能也会有更高 优先级的进程 / 线程抢占 CPU, 在执行中的进程随时会因为各种原因被抢占运行。 这都将导 致时延的产生, 少则几个毫秒, 系统负载较重时可能达到几秒以上, 这点延迟时间虽然对于 一般的应用程序而言实际算不了什么, 但对于实时应用的媒体数据发送来说, 却会导致服 务质量的大幅下降。
     用户发包进程使用发包系统调用发送媒体数据包, 需要从用户态切换到内核态, 在内核态完成数据包的组织之后, 才能调用网卡驱动程序的发送接口将数据包发送出去。 数据包组织的时间虽然很短, 但是也将会对发包产生一些时延。
     在媒体服务器负荷较重的情况下, 从用户态切换到内核态, 以及从内核态切换到 用户态, 再加上需要系统调度到相应的用户发包进程 / 线程, 将会产生不稳定的延时从而 引发媒体流的抖动, 这对实时的媒体应用需求来说, 将会极大的影响服务的质量。
     由此可见, 在媒体数据包的定时发送过程中, 时延的不确定性主要产生在工作空 间切换、 数据包组织和系统调度上。如何有效地控制时延的产生, 减少发包的抖动, 对于提 升媒体服务器的服务质量, 具有非常重要的影响。
     发明内容
     本发明所要解决的技术问题是, 提供一种媒体服务器, 并提供一种实现准实时发 送媒体数据的方法, 本发明基于 Linux 的网络协议栈, 在不影响 Linux 系统原有网络协议栈 的情况下, 尽量控制时延的产生, 减少发包的抖动。一种媒体服务器, 所述媒体服务器包括设备模块、 Linux 内核模块和用户进程模 块, 所述用户进程模块用于承载用户进程,
     所述设备模块包括网卡和带中断功能的定时器, 所述网卡用于驱动发包系统调用 接口发送数据包 ; 所述定时器用于定时并在定时时间到后产生中断 ;
     所述 Linux 内核模块位于所述设备模块与用户进程模块之间 ; 包括网络协议栈模 块、 网卡驱动模块以及中断处理模块, 所述网络协议栈模块基于 AF_REALTIME 套接字类型, 用于为用户进程提供 AF_REALTIME 类型的套接字编程接口 ; 所述网卡驱动模块用于驱动网 卡; 所述中断处理模块用于登记发包处理函数和待发送的数据包并在所述定时器产生中断 时调用所述发包处理函数发送所述待发送数据包。
     所述网络协议栈模块可提供的套接字编程接口包括创建套接字 (socket) 系统调 用、 发包 (sendmsg) 系统调用, 其中 socket 系统调用用于创建套接字 ; sendmsg 系统调用用 于采用硬件定时中断准实时发送数据包, 其定义为 :
     ssize_tsendmsg(int socket, const struct msghdr*msg, int flags) ;
     其中, 参数 :
     socket 表示使用 socket 系统调用创建的 AF_REALTIME 套接字 ; msg 表示待发送数据包的数据结构 ;
     flags 为 0。
     所述发包系统调用的参数 msg 包括用于存放待发送数据包的计划发包时间的字 段、 用于存放所述计划发包时间的字段长度的字段、 用于存放待发送数据包的载荷信息的 字段、 用于存放待发送数据包个数的字段、 用于存放待发送数据包的头部控制信息的字段 以及用于存放所述待发送数据包的头部控制信息长度的字段。
     一种实现准实时发送媒体数据的方法, 基于 Linux 网络协议栈, 包括以下步骤 :
     步骤一 : 设置发包系统调用的计划发包时间以及组装待发送的媒体数据, 得到待 发送数据包 ;
     步骤二 : 根据所述计划发包时间计算中断定时时长, 并将所述发包系统调用的发 包处理函数和待发送数据包登记到中断处理程序中, 等待中断, 同时将所述系统调用加入 到内核等待队列中 ;
     步骤三 : 中断定时到期后产生中断, 触发所述中断处理程序完成待发送数据包的 发送, 发送完成后唤醒所述内核等待队列中对应的发包系统调用。
     所述步骤一还包括 : 对待发送数据包的路由查找、 MAC 地址学习、 UDP/IP/MAC 头部 进行封装。
     所述步骤三中 :
     所述中断服务程序调用所述登记在其中的发包处理函数对所述登记在其中的待 发送数据包进行发送。
     本发明通过设置发包时间, 提前从用户态切换到内核态, 减少工作空间切换导致 的上下文切换开销, 同时降低系统调度对时延的影响 ; 利用具有中断功能的定时器在定时 时间到时产生中断的方式触发中断处理程序, 实现了高精度的数据包定时及准实时发送。
     附图说明图 1 是本发明所述网络协议栈发包系统调用的核心参数所使用的数据结构示意 图 2 是本发明所述方法的流程图。图;
     具体实施方式
     以下结合附图和较佳实施例, 对本发明做进一步详细说明。
     本发明基于 Linux 网络协议栈实现准实时发送媒体数据, 利用了现有的 Linux 网 络协议栈架构, 现有的 Linux 网络协议栈利用内核模块机制实现, 所述内核模块的加载和 卸载都不会影响 Linux 内核原有的网络协议栈。
     本发明所述媒体服务器, 包括用户进程模块、 Linux 内核模块和设备模块, 所述用 户进程模块用于承载用户进程,
     所述设备模块包括网卡和带中断功能的定时器 ;
     所述 Linux 内核模块位于设备模块与用户进程模块之间, 包括网络协议栈模块、 网卡驱动模块以及中断处理模块, 所述网络协议栈模块基于 AF_REALTIME 套接字类型, 用 于为用户进程提供 AF_REALTIME 类型的套接字编程接口 ; 所述网卡驱动模块用于驱动网 卡; 所述中断处理模块用于登记发包处理函数和待发送的数据包并在所述定时器产生中断 时调用所述发包处理函数发送所述待发送数据包。
     为了实现准实时发送媒体数据的功能, 本发明在原有 Linux 内核模块的网络协议 模块的基础上创建了基于 AF_REALTIME 套接字类型的 REALTIME 网络协议栈, 该协议栈给用 户进程提供 AF_REALTIME 类型的套接字编程接口, 包括 socket 系统调用、 close 系统调用、 sendmsg 系统调用 ; 其中 socket 系统调用用于创建套接字, close 系统调用用于关闭套接 字, sendmsg 系统调用用于准实时发送媒体数据包。
     现有技术的 sendmsg 系统调用原有标准语义不能够实现本发明的功能, 必须对其 进行重新定义, 本发明所述 sendmsg 系统调用的定义为 :
     ssize_t sendmsg(int socket, const struct msghdr*msg, int flags) ;
     输入输出参数的含义如下 :
     socket : 输入参数, 表示使用 socket 系统调用创建的 AF_REALTIME 套接字 ;
     msg : 输入输出参数, 表示存放待发送数据包信息的数据结构 struct msghdr{}, 具 体包括 :
     msg- > msg_name 字 段 : 指 向 Linux 内 核 中 用 来 描 述 时 间 的 数 据 结 构 struct timespec{} 的指针, 表示待发送数据包的计划发包时间 ;
     msg- > msg_namelen 字段 : 用于存放 struct timespec{} 的长度 ;
     msg- > msg_iov 字 段 : 指 向 数 据 结 构 struct iovec{} 的 指 针 ; 所 述 struct iovec{} 包含一路待发送媒体数据包的载荷和长度。
     msg- > msg_iovlen 字段 : 用于存放 msg_iov 所指的 struct iovec{} 的个数, 这 里取值为 1。
     msg- > msg_control 字段 : 输入时用于存放对应媒体数据包的头部控制信息, 所 述头部控制信息包括 IP 地址、 UDP 端口等 ; 输出时用于返回发送错误数据包的索引和错误 码。msg- > msg_controllen 字段 : 用于存放 msg_control 字段的总长度。
     msg- > msg_flags 字段 : 本实施例中暂时不用, 置为 0。
     Flags : 输入参数, 本实施例中暂时不用, 置为 0。
     sendmsg 系统调用返回值 :
     若数据包都没有发送成功, 则所述 sendmsg 系统调用返回值为 : -1, 并通过所述 sendmsg 系统调用的输出参数返回错误码。
     若数据包部分或者全部发送成功, 则所述 sendmsg 系统调用返回成功发送的数据 包的数目, 并通过所述 sendmsg 系统调用的输出参数返回没有发送成功的数据包的索引和 相应的错误码 ;
     参数 msg 的数据结构 struct msghdr 示意图如图 1 所示, 包含 1 个待发送媒体 数据包, 每个字段后面的数字表示该字段的长度, msg_name 字段指向数据结构 struct timespec{}, 所述 struct timespec{} 包括表示秒数的 tv_sec 字段和表示纳秒数的 tv_ nsec ; msg_iov 字段指向数据结构 struct iovec{}, 所述 structiovec{} 包括 iov_base 和 iov_len 字段, 其中 iov_base 字段表示一路待发送数据包的载荷, 而 iov_len 字段表示一路 待发送数据包的长度, 本实施例中为 172 字节。 构成媒体数据包的信息存放在参数 msg 中, msg_name 字段用于存放待发送媒体 数据包的计划发送时间, 使用系统绝对时间表示 ; msg_iov 字段用于存放待发送媒体数据 包的载荷信息, 包含待发送数据包缓冲区的地址和长度信息, 作为媒体数据包的载荷 ; msg_ control 字段用于存放待发送媒体数据包的头部信息, 包含 IP 地址、 端口号等, 用于生成待 发送的媒体 ( 这里为 IP 数据包 ) 的头部。
     如图 2 所述, 是本发明所述方法的流程图, 具体包括如下步骤 :
     步骤 201 : 设置发包系统调用的计划发包时间 ;
     所述计划发包时间用于指待发送的媒体数据的发送时刻, 当前发包进程调用发包 系统调用提前从用户态切换到内核态, 减少工作空间切换导致的上下文切换开销, 同时降 低系统调度对时延的影响。因此, 发包系统调用接口除了需要能够传入待发送数据包的载 荷和组织数据包的头部控制信息之外, 还需要能够传入数据包的计划发送时间。
     步骤 202 : 对所述发包系统调用本次待发送的数据进行组包 ;
     该步骤还包括数据包的路由查找、 MAC 地址学习、 UDP/IP/MAC 头部的封装 ;
     步骤 203 : 根据所述计划发包时间计算中断定时时长 ;
     步骤 204 : 将所述发包系统调用的发包处理函数和待发送的数据包登记到中断处 理程序中, 等待中断 ;
     步骤 205 : 将所述系统调用加入内核等待队列 ;
     步骤 206 : 中断定时时间到后产生中断, 触发所述中断处理程序 ;
     步骤 207 : 所述中断处理程序调用所述登记在其中的发包处理函数对所述登记在 其中的数据包进行发送 ;
     本发明中, 若登记到中断处理程序中的待发送数据包的负荷比较大, 则中断处理 程序中完成所有发包动作可能会影响系统的整体响应能力, 所以中断处理程序会将发包处 理任务提交给内核高优先级任务进行排序 ; 使用内核高优先级任务完成数据包的发送。
     步骤 208 : 唤醒对应的发包系统调用, 进入下一轮媒体数据的准实时发送。
     以上针对本发明各较佳实施例的描述较为详细和具体, 并不能因此而认为是对本 发明专利保护范围的限制, 本发明的专利保护范围应以所附权利要求为准。

一种实现准实时发送媒体数据的方法.pdf_第1页
第1页 / 共8页
一种实现准实时发送媒体数据的方法.pdf_第2页
第2页 / 共8页
一种实现准实时发送媒体数据的方法.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种实现准实时发送媒体数据的方法.pdf》由会员分享,可在线阅读,更多相关《一种实现准实时发送媒体数据的方法.pdf(8页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN102325136A43申请公布日20120118CN102325136ACN102325136A21申请号201110265838X22申请日20110908H04L29/06200601G06F9/4820060171申请人中兴通讯股份有限公司地址518057广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部72发明人王魏强丁向军夏洪升74专利代理机构深圳市世纪恒程知识产权代理事务所44287代理人胡海国54发明名称一种实现准实时发送媒体数据的方法57摘要本发明涉及一种实现准实时发送媒体数据的方法,所述方法首先设置计划发包时间以及组装待发送的媒体数据,得到待发送数。

2、据包;然后根据计划发包时间计算中断定时时长,并将发包处理函数和待发送数据包登记到中断处理程序中,等待中断,同时将所述系统调用加入到内核等待队列中;中断定时到期后产生中断,触发所述中断处理程序完成待发送数据包的发送,发送完成后唤醒所述内核等待队列中对应的发包系统调用。本发明减少了工作空间切换导致的上下文切换开销,同时降低了系统调度对时延的影响;实现了数据包的准实时发送。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书5页附图1页CN102325149A1/1页21一种实现准实时发送媒体数据的方法,基于LINUX网络协议栈,其特征在于,包括以下步骤步骤一设置发包系。

3、统调用的计划发包时间以及组装待发送的媒体数据,得到待发送数据包;步骤二根据所述计划发包时间计算中断定时时长,并将所述发包系统调用的发包处理函数和待发送数据包登记到中断处理程序中,等待中断,同时将所述系统调用加入到内核等待队列中;步骤三中断定时到期后产生中断,触发所述中断处理程序完成待发送数据包的发送,发送完成后唤醒所述内核等待队列中对应的发包系统调用。2如权利要求1所述的实现准实时发送媒体数据的方法,其特征在于,所述步骤一还包括对待发送数据包的路由查找、MAC地址学习、UDP/IP/MAC头部进行封装。3如权利要求2所述的实现准实时发送媒体数据的方法,其特征在于,所述步骤三中所述中断服务程序调。

4、用所述登记在其中的发包处理函数对所述登记在其中的待发送数据包进行发送。权利要求书CN102325136ACN102325149A1/5页3一种实现准实时发送媒体数据的方法技术领域0001本发明属于计算机应用领域,具体涉及一种媒体服务器及一种实现准实时发送媒体数据的方法。背景技术0002现有技术中,在基于LINUX操作系统的媒体服务器应用中,需要定时的将媒体数据从服务器主机发送到网络上。定时发送机制的性能将直接关系到媒体服务的质量,关系到用户对媒体服务业务的满意程度。0003现有技术中,用户进程实现定时发送媒体数据包的方法主要包括以下两种1延时方式;2定时器方式;0004延时方式一般使用SELE。

5、CT或者NANOSLEEP系统调用实现,当指定的延时结束之后调用返回给用户进程,用户进程继而可以进行媒体数据包的发送。0005定时器方式一般使用SETITIMER系统调用实现,在指定的一段时间到了之后,通过信号的方式通知用户进程,在信号处理程序中完成媒体数据包的发送。0006在现有技术的方式下,当延时系统调用或者定时器系统调用返回时,用户发包进程需要从内核态切换到用户态,期间将会进行系统调度。一方面由于LINUX是一个多任务而非实时操作系统,延时系统调用或者定时器系统调用与生俱来就具有不精确性,这使得在用户空间中执行的进程不能精确的控制时间;另一方面系统调度过程中可能也会有更高优先级的进程/线。

6、程抢占CPU,在执行中的进程随时会因为各种原因被抢占运行。这都将导致时延的产生,少则几个毫秒,系统负载较重时可能达到几秒以上,这点延迟时间虽然对于一般的应用程序而言实际算不了什么,但对于实时应用的媒体数据发送来说,却会导致服务质量的大幅下降。0007用户发包进程使用发包系统调用发送媒体数据包,需要从用户态切换到内核态,在内核态完成数据包的组织之后,才能调用网卡驱动程序的发送接口将数据包发送出去。数据包组织的时间虽然很短,但是也将会对发包产生一些时延。0008在媒体服务器负荷较重的情况下,从用户态切换到内核态,以及从内核态切换到用户态,再加上需要系统调度到相应的用户发包进程/线程,将会产生不稳定。

7、的延时从而引发媒体流的抖动,这对实时的媒体应用需求来说,将会极大的影响服务的质量。0009由此可见,在媒体数据包的定时发送过程中,时延的不确定性主要产生在工作空间切换、数据包组织和系统调度上。如何有效地控制时延的产生,减少发包的抖动,对于提升媒体服务器的服务质量,具有非常重要的影响。发明内容0010本发明所要解决的技术问题是,提供一种媒体服务器,并提供一种实现准实时发送媒体数据的方法,本发明基于LINUX的网络协议栈,在不影响LINUX系统原有网络协议栈的情况下,尽量控制时延的产生,减少发包的抖动。说明书CN102325136ACN102325149A2/5页40011一种媒体服务器,所述媒体。

8、服务器包括设备模块、LINUX内核模块和用户进程模块,所述用户进程模块用于承载用户进程,0012所述设备模块包括网卡和带中断功能的定时器,所述网卡用于驱动发包系统调用接口发送数据包;所述定时器用于定时并在定时时间到后产生中断;0013所述LINUX内核模块位于所述设备模块与用户进程模块之间;包括网络协议栈模块、网卡驱动模块以及中断处理模块,所述网络协议栈模块基于AF_REALTIME套接字类型,用于为用户进程提供AF_REALTIME类型的套接字编程接口;所述网卡驱动模块用于驱动网卡;所述中断处理模块用于登记发包处理函数和待发送的数据包并在所述定时器产生中断时调用所述发包处理函数发送所述待发送。

9、数据包。0014所述网络协议栈模块可提供的套接字编程接口包括创建套接字SOCKET系统调用、发包SENDMSG系统调用,其中SOCKET系统调用用于创建套接字;SENDMSG系统调用用于采用硬件定时中断准实时发送数据包,其定义为0015SSIZE_TSENDMSGINTSOCKET,CONSTSTRUCTMSGHDRMSG,INTFLAGS;0016其中,参数0017SOCKET表示使用SOCKET系统调用创建的AF_REALTIME套接字;0018MSG表示待发送数据包的数据结构;0019FLAGS为0。0020所述发包系统调用的参数MSG包括用于存放待发送数据包的计划发包时间的字段、用于存。

10、放所述计划发包时间的字段长度的字段、用于存放待发送数据包的载荷信息的字段、用于存放待发送数据包个数的字段、用于存放待发送数据包的头部控制信息的字段以及用于存放所述待发送数据包的头部控制信息长度的字段。0021一种实现准实时发送媒体数据的方法,基于LINUX网络协议栈,包括以下步骤0022步骤一设置发包系统调用的计划发包时间以及组装待发送的媒体数据,得到待发送数据包;0023步骤二根据所述计划发包时间计算中断定时时长,并将所述发包系统调用的发包处理函数和待发送数据包登记到中断处理程序中,等待中断,同时将所述系统调用加入到内核等待队列中;0024步骤三中断定时到期后产生中断,触发所述中断处理程序完。

11、成待发送数据包的发送,发送完成后唤醒所述内核等待队列中对应的发包系统调用。0025所述步骤一还包括对待发送数据包的路由查找、MAC地址学习、UDP/IP/MAC头部进行封装。0026所述步骤三中0027所述中断服务程序调用所述登记在其中的发包处理函数对所述登记在其中的待发送数据包进行发送。0028本发明通过设置发包时间,提前从用户态切换到内核态,减少工作空间切换导致的上下文切换开销,同时降低系统调度对时延的影响;利用具有中断功能的定时器在定时时间到时产生中断的方式触发中断处理程序,实现了高精度的数据包定时及准实时发送。附图说明说明书CN102325136ACN102325149A3/5页500。

12、29图1是本发明所述网络协议栈发包系统调用的核心参数所使用的数据结构示意图;0030图2是本发明所述方法的流程图。具体实施方式0031以下结合附图和较佳实施例,对本发明做进一步详细说明。0032本发明基于LINUX网络协议栈实现准实时发送媒体数据,利用了现有的LINUX网络协议栈架构,现有的LINUX网络协议栈利用内核模块机制实现,所述内核模块的加载和卸载都不会影响LINUX内核原有的网络协议栈。0033本发明所述媒体服务器,包括用户进程模块、LINUX内核模块和设备模块,所述用户进程模块用于承载用户进程,0034所述设备模块包括网卡和带中断功能的定时器;0035所述LINUX内核模块位于设备。

13、模块与用户进程模块之间,包括网络协议栈模块、网卡驱动模块以及中断处理模块,所述网络协议栈模块基于AF_REALTIME套接字类型,用于为用户进程提供AF_REALTIME类型的套接字编程接口;所述网卡驱动模块用于驱动网卡;所述中断处理模块用于登记发包处理函数和待发送的数据包并在所述定时器产生中断时调用所述发包处理函数发送所述待发送数据包。0036为了实现准实时发送媒体数据的功能,本发明在原有LINUX内核模块的网络协议模块的基础上创建了基于AF_REALTIME套接字类型的REALTIME网络协议栈,该协议栈给用户进程提供AF_REALTIME类型的套接字编程接口,包括SOCKET系统调用、C。

14、LOSE系统调用、SENDMSG系统调用;其中SOCKET系统调用用于创建套接字,CLOSE系统调用用于关闭套接字,SENDMSG系统调用用于准实时发送媒体数据包。0037现有技术的SENDMSG系统调用原有标准语义不能够实现本发明的功能,必须对其进行重新定义,本发明所述SENDMSG系统调用的定义为0038SSIZE_TSENDMSGINTSOCKET,CONSTSTRUCTMSGHDRMSG,INTFLAGS;0039输入输出参数的含义如下0040SOCKET输入参数,表示使用SOCKET系统调用创建的AF_REALTIME套接字;0041MSG输入输出参数,表示存放待发送数据包信息的数据。

15、结构STRUCTMSGHDR,具体包括0042MSGMSG_NAME字段指向LINUX内核中用来描述时间的数据结构STRUCTTIMESPEC的指针,表示待发送数据包的计划发包时间;0043MSGMSG_NAMELEN字段用于存放STRUCTTIMESPEC的长度;0044MSGMSG_IOV字段指向数据结构STRUCTIOVEC的指针;所述STRUCTIOVEC包含一路待发送媒体数据包的载荷和长度。0045MSGMSG_IOVLEN字段用于存放MSG_IOV所指的STRUCTIOVEC的个数,这里取值为1。0046MSGMSG_CONTROL字段输入时用于存放对应媒体数据包的头部控制信息,所。

16、述头部控制信息包括IP地址、UDP端口等;输出时用于返回发送错误数据包的索引和错误码。说明书CN102325136ACN102325149A4/5页60047MSGMSG_CONTROLLEN字段用于存放MSG_CONTROL字段的总长度。0048MSGMSG_FLAGS字段本实施例中暂时不用,置为0。0049FLAGS输入参数,本实施例中暂时不用,置为0。0050SENDMSG系统调用返回值0051若数据包都没有发送成功,则所述SENDMSG系统调用返回值为1,并通过所述SENDMSG系统调用的输出参数返回错误码。0052若数据包部分或者全部发送成功,则所述SENDMSG系统调用返回成功发送。

17、的数据包的数目,并通过所述SENDMSG系统调用的输出参数返回没有发送成功的数据包的索引和相应的错误码;0053参数MSG的数据结构STRUCTMSGHDR示意图如图1所示,包含1个待发送媒体数据包,每个字段后面的数字表示该字段的长度,MSG_NAME字段指向数据结构STRUCTTIMESPEC,所述STRUCTTIMESPEC包括表示秒数的TV_SEC字段和表示纳秒数的TV_NSEC;MSG_IOV字段指向数据结构STRUCTIOVEC,所述STRUCTIOVEC包括IOV_BASE和IOV_LEN字段,其中IOV_BASE字段表示一路待发送数据包的载荷,而IOV_LEN字段表示一路待发送数。

18、据包的长度,本实施例中为172字节。0054构成媒体数据包的信息存放在参数MSG中,MSG_NAME字段用于存放待发送媒体数据包的计划发送时间,使用系统绝对时间表示;MSG_IOV字段用于存放待发送媒体数据包的载荷信息,包含待发送数据包缓冲区的地址和长度信息,作为媒体数据包的载荷;MSG_CONTROL字段用于存放待发送媒体数据包的头部信息,包含IP地址、端口号等,用于生成待发送的媒体这里为IP数据包的头部。0055如图2所述,是本发明所述方法的流程图,具体包括如下步骤0056步骤201设置发包系统调用的计划发包时间;0057所述计划发包时间用于指待发送的媒体数据的发送时刻,当前发包进程调用发。

19、包系统调用提前从用户态切换到内核态,减少工作空间切换导致的上下文切换开销,同时降低系统调度对时延的影响。因此,发包系统调用接口除了需要能够传入待发送数据包的载荷和组织数据包的头部控制信息之外,还需要能够传入数据包的计划发送时间。0058步骤202对所述发包系统调用本次待发送的数据进行组包;0059该步骤还包括数据包的路由查找、MAC地址学习、UDP/IP/MAC头部的封装;0060步骤203根据所述计划发包时间计算中断定时时长;0061步骤204将所述发包系统调用的发包处理函数和待发送的数据包登记到中断处理程序中,等待中断;0062步骤205将所述系统调用加入内核等待队列;0063步骤206中。

20、断定时时间到后产生中断,触发所述中断处理程序;0064步骤207所述中断处理程序调用所述登记在其中的发包处理函数对所述登记在其中的数据包进行发送;0065本发明中,若登记到中断处理程序中的待发送数据包的负荷比较大,则中断处理程序中完成所有发包动作可能会影响系统的整体响应能力,所以中断处理程序会将发包处理任务提交给内核高优先级任务进行排序;使用内核高优先级任务完成数据包的发送。0066步骤208唤醒对应的发包系统调用,进入下一轮媒体数据的准实时发送。说明书CN102325136ACN102325149A5/5页70067以上针对本发明各较佳实施例的描述较为详细和具体,并不能因此而认为是对本发明专利保护范围的限制,本发明的专利保护范围应以所附权利要求为准。说明书CN102325136ACN102325149A1/1页8图1图2说明书附图CN102325136A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1