rtcp时间戳计算问题

hao952456 2016-03-09 09:17:54
h264文件,90k采样,帧率29.9,通过live555作为流媒体服务器发送rtp包,客户端使用vlc播放的时候,通过抓包可以看到,rtp时间戳增加量是3002,每一个rtp都很正常。
rtp包第一个数据包时间戳起始值是450673209,包序列号起始值44299,
rtcp的SR包,live发出的第一个SR包,发送的pack count是0,RTP 时间戳是450673205,NTP是MSW 3665895571,
LSW 1450673205,
在rtp发送到了序列号46676时,对应时间戳450934465,
这个时候相应的SR包pack count是2378,RTP 时间戳是450935562,NTP是MSW 3665895574,LSW 1081872197

请问一下,SR中的RTP时间戳这个值是怎么计算出来的呀,由上面可以看到SR中的相对时间戳并不是rtp包中的时间戳呀。
...全文
915 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiweini 2017-07-05
  • 打赏
  • 举报
回复
我想问一下,你在VLC中是怎么读到时间戳的,我查了一些有人说libvlc没有给时间戳的API。那你是怎么抓包获取的?
oRTP分析 一:关于oRTP.................................................................................................................................2 二:源代码的构建框架...................................................................................................................2 三:有关时间戳的说明.................东了 结构体外,一个更重要的结构体是 。该结构体即是一个会话 的抽象,与会话相关的各种信息都定义在该结构体上或者能够通过该结构体找到。要使用 逑行娸体数据的传输,需要先创建一个会话,之后所有数据的传输都在会话上完成或 基于会话完成。 结构体的定义如下: Rtpsession ext mask pos inc ssrc candidate inc same ssrc count Iw recv pL cha on pay load tyre changed Telep on network error signa events allocator tp Sessiorlisu lticast ttl multicast loopback data Lng current tev d contribut. ing sources use connect ssrc set 图 可以看到,这是一个非常大的结构体,从侧面说明了要维护的与会话相关的量还是比较多的 关于该结构体的比较详细的说明会在后面给出。 的初始化通过接口 完成,外部获得一个新的 是通过调用接 完成。关」 的其他有关配置和获取信息的操作都叮以在文件 中找到定义 使用进行数据传输时,可以在一个任务上完成多个会话流的接收和发送。这得益 中调度模块的支持。要使用调度模块,应用需要在进行的初始化时对调度进 行初始化,将需要调度管理的会话注册到调度模块中,这样当进行接收和发送操作时,先向 调度询问当前会话是否可以进行发送和接收,如果不能进行收发操作,则处理下一个会话。 这有点类似接口上的操作。调度模块使用的数据结构主要为 ,如下图 所示: Reschedule list all sessions r sessions r max w sessions Wmaⅹ unblock select con thread thread running timer RtpTimer t⊥me state timer inc timer inl t LIe I timer unini t interval 图 保存了所有要处理的会话,的意义类似于,在这里分别代表接收、发送以及 异常 等文件实现了调度模块。 数据在底层实际的接收和发送是通过接凵完成的,这些实现在 文 件中 为了方便将移植到不同平台上,实现了对操作系统接口的封装,包括常用的 仼务的创建及销毁,条件变量及互斥锁,进程间的管道通信机制等。这些在文件中实 现 狳了操作系统相关的接口外,为了便于内部操作,实现了部分数据结构,一个是双 向链表,在文件中;一个是队列,在文件 文件中。链表的实现比较简单, 队列的实现相对较复杂一点。首先,队列数据结构由三部分组成:队列头、消息块以及数据 块,图示如下: g stopper gb g count b prev b next b cont datat datab b rptr reserved db freeIn reserved dh ref Buffer 图 上图中从左到右依次为队列头,消息块和数据块ε队列头指向消息块,消息块之间可以构成 双向链衣,这是队列的基本要素。消息块本身不带,数据是由专门的数据块来保存的, 并被消息块指向。上图是一个初始化后的状态,消息块的读写指针都指向数据块的 的开始位置。数据块的和指针则分别指向 空间的开始地址和结束地址处。向 中写入和读出数据后的状态变化如下图: b pre b next b next b cont b con b datap b rptr db base b rptr db base b wptr db lim b wpt db lim db freen db freef reserve db ref reserved db ref Buffer Buffe 图 除了向队列添加消息块外,上述数据结构设计还支持向个消息块添加新的消息块,这样可 以支持一个消息块保存较人块的数据,如下图所示 b cont b rptr dh base do lim reserved db freen d2 do ref ms 1 b datab/ buffer s data/huffer 图 消息块的 指针用于连接新的消息块 在发送上层应用的 数据之前,会构造一个消息块,数据指针会指向 这避免了数据拷贝。较低层的接口处理薮据时依赖于消息玦结构。接收后的数据从消息块中 拷贝到用户 。接收的和包的解析处理函数在文件 和 文件 中实现。另外, 文件实现了数据包的构造处坦 在基于的音视频流传输中,防抖动能力是一个重要的特性,这在一定程度上能够保证 用户有良好的体验。在中,是通过模块完成这部分工作的。相关数据结构如下 图所小: JitterControl count. JItt comp ts adapt jitt comp ts slide prev slide olddiff corrective step corrective slide adapti enabled 图 要使用功能,需要使能 变量,如果要支持自适应补偿,则需要使能 变 对」数据传输过程中产生的一些事件(比如发生改变,数据为数据等),在 中是通过 (信号表)来处理的。 关联了事件类型与其上的回调函数 使用 处理如下些事件 (发生改变), 发生改变) 包到达), 事件) 事件), 网络错误事件), 以及 包事件)。用户可针对这些事件注册回调处理函数,当底层接收函数 接收到包后,会对包进行检查,发现是上述某些事件的话,则触发冋调函数的执行。 文件实现了对该衣的操作,包括初始化,添加 朋除 以及执行 中对于事件的处理是基于事件结构体和事件队列的。队列用于存放事件结构体,结 构体用于存放事件的数据。相关的处理在文件 中定义。特别的,对」 事件 的处理放在 文件中,其中包括了如何构造用于传输 包,如何将 事件添加到包中,如何发送数据,以及接收到对应数据包后该如 何处理。关于 的构成如下图所示: db bas db lim eeN b pi db ref b next telephone b cont event b datap event b rptr volume Ihrtplvent rype b wptI reserved packet reserved duration ep Buffer Telephone event RtpEndpoint Pay load type 月ddr addrlen 图 最左边的结构体是包中存放的有关 的数据,通过 指针可以找到 的详细信息。最终放入事件队列的也是指向的内容 在使用提供的厍之前,需要先对其进行初始化,这部分的实现在 文件 的初始化主要调用两个接口 。其中 完成 的注册, 完成了调度任务的初始化 :有关吋间戳的说明 关于传输中时间戳的说明(这部分来自于网络) 时间戳单位:协议中使用的时间戳,其单位不是秒之类的,而是以采样频率为基础 的。这样做的目的就是为了使时间戳单位更为精准。比如说一个吝频的采样频率为 那么我们可以把时间戳单位设为 时间戳增量:相邻两个包之间的时间差(以时间戳单位为基准)。 采样频率:每秒钟抽取样本的次薮,例如音频的采样率一般为 帧率: 每秒传输或者显示帧数,例如 在协议中并没有规定吋间戳的粒度,这取决于有效载付的类型。因此的时间戳 又称为媒体时间戳,以强调这种时间戳的粒度取决于信号的类型。例如,对于采样的 话音信号,若每隔 构成一个数据块,则一个数据块中包含有个样本( )。因此每发送一个分组,其时间戳的值就增加。 如果采样频率为 则由上面讨论可知,时间戳单位为 ,我们就假设 钟被划分了个时间块,如果每秒发送帧,那么,每·个帧的发送占多少个时间块 呢?当然是 。因此,我们根据定义“时间戳增量是发送第二个包相距 发送第一个包时的时间问隔”,故时间戳堦量应该为 关」中时间戳计算问题:从年到现在的经过的秒数赋值给时间 戳的高位,这个时间的低位通过当前获取的纳秒时间值计算得到。将秒划分为 的次方来衣示,则份了持续的时间大约位皮秒。如果当前时间为秒毫秒, 则毫秒为 微妙 纳秒, 皮秒,即 多个 皮秒。也就是说在时间戳的低位划分的的次方个皮秒块中占用了 个块,转换为进制表示为 ,也就是说当当前时间的低位为毫秒的 话 时间戳的低位就设置为 在系统中,我们常用的一个时间是年月日以米的时间所经过的秒数。在 中,我们可以将当前所获得的上述时间加上 (十六进制)就是年 月日以来所经过的秒数了。换为十进制,则为 计算方法为( 代码中有关时间戳变量的说明 在数的接收和发送过程中,用到了许多记录时间的变量。通过这些时间变量, 完成对数据的流控功能。所有这些交量都定义在 结构体中,如下图所示:(这 里只是截取了时间相关的变量) Upstream snd ts offset snd rand offset snd last t rey time offset ts_offset rev query ts offset rcv last app ts rcy last ret ts hwrcv extseq nwrcv seg at last SR hwrcy since last sr SR t last rcy sr time nd sec last rtcp report snt last rtcp report snt last rto cket ent payload byte nt bytes send bw start recv bytes recv_bw_start ssrc_changed_thres 下面对这些交量的含义进行集中的说明 应用程序发送其第一个时间戳时的调度器时间 被应用程 序发送的第一个应用程序时间戳 添加到用户上的一个随札数,用来产生流的时问戳 流上最后发送的时间戳 前述三个时间变量是结尾的,分别标记了第一个时间戳,包括调度器的时间偏移 在应用开始发送数据时,应用发送数据的时间偏移,也即是自己的时间戳,还有一个随机数 用来添加到偏移上的,而第四个才是真正标记流里面当前最新发送的数据的时间戳。 应用程序询问其第一个时间戳时的调度时间,这里询问意指获取接收到的数据包 此应该指开始接收数据时的调度器时间 第一个流的时间戳此应该指第 个包到来付其流上带的吋间戳值 被应用程 序询问的第一个时间戳此应该指应用接收数据流时的时间 应用程序得到的流 的最后一个时间戳此应该指应用程序收到的最后一个包的时间戳,是包里的时间戳值, 而非应用自己的时间。 被应用 程序询问的最后一个应用程序时间戳此处应该指应用收最后一个包时的应用时间,是应用 按照 类型及其采样牽增长的吋间戳记录,不是系统时间,也不是包里的吋间 最后一个返回的采样的时间戳,仅仅对于连续的音频而言 接收相对」发送来讲存在一个问题,就是接收数据包时当前系统有个时间,数据包里面 也有时间戳记录的时间,调度器也有记录时间。而对于发送,当前应用的时间就是给包的时 间戳吋间,这两个值对于发送来讲是样的。 上最 后接收的扩展的序列号 每次发送报告包后,该变量更新为 因此是 最近发送报告包时的最高扩展序列号 每收到—个包,该变量加,在报告报构造好后 该变量就清为零,因此说明这个变量计数的是从上一个报告包以来接收的包数目。 根据上面三个变量就可以计算出丢包率。首先,最近次丢失包数(就是自从上次 或者发送以来)通过 计算得到。 但是丢包率为啥要除以 比较奇怪。这个值是自从上一次发送报告包以 来累计接收的包数。这个值不应该就是期望接收的包数。(最高序刎号减去最初序列号) 累计包丢失数通过每次的丢包数累加得到。 最后 个接收到的的时间戳,取的是中间的。这个值也是报告包中上值的来 最后一个被 接收到的时间,这个时间是用系统当前的时间来表示的。这个值记录了接收到最后一个 时的系统吋间,再发送当前报告包时,再次获取系统当前时间,然后二者相减,得到的值乘 得到以 为单位的时间值。 发送序列号。累加变量,保存会话的序列号的 增长。 最后一个报告发送的时间,按照接收时间戳单位。程序中这个值是用 变量的佰来更新的。就是应用最后一次进行接收时其时间戳増长到的值 不管收没收到就是这个值了? 最后一个报告发送的时间,按照发送时间戳单位。稈序中这个值是用 变量的值来更新的,就是应用最后一次进行发送操作时其时间戳增长到的值。不管有没 有发送报告包出去? 按照时间戳单位長示的报告发送的间隔。这个值程序中使用默认时间值秒与 的乘积来表示。是不是计算过于简单了? 在最后 发送的一个包中记录的发送者发送的包总数。这个变量把这个值记录了下来。记 录这个值是为了实现协议中规定的:如果之前的包发送之后到当前再次发送包 这期间如果发送了包,则发送 报告包,否则只需发送 包就可以了。 用于发送者报告的 字节数,数据来源。这个变量保存了从开始发送到发送这个报告包时发送的字 节总数,但不包括头部和填充。 上面这些时间相关变量都是用于包的。 用于带宽评佔 同上 上面两个变量用于计算发送带宽,记录的开始时间, 记录了发送的字节数, 该值没调用接∏发送数据后都会进行累加更新。记录次带宽值后,清为零,之后进行 次带宽估计的计算。 同上 同上 作用和处理逻辑都同上面发送部分。 四:调度的实现 要使用 的调度功能,需要在初始化库时调用接口 对调度 模块进行初始化。在该接∏中创建个 类型的结构体 (参见图 ),并调用 初始化它。 在 中,分配定时器 类型结构体,参见图)挂 载到调度结构伓上。(定时器初始间隔设置为 )。接着初始化 的其他部分,包括初始化互斥锁、条件变量等。在调度模坎运行的整个过 程中,相关操作都围绕该结构体, 被定义为全局变量。 初始化完后调用 启动调度任务。调度任务的执行体为 参数为调度结构体自身 调度任务执行后,首先初始化。在这过程中将设置为运行状态,保存系统当 前时间值。接着进入仟务的循环,遍历 上注册的所有会话。如果不为空, 说明应用有会话需要调度管理。此吋会调用 进行处理。所有需要调度管 理的会话按上述逻辑处理完之后,广播信号量 唤醒所有因等待 而 睡眠的任务,意即让这些任务去检查自己的会话是否需要进行处理了,这块后续还会说明。 此时调度器完成了自凵当前的工作廾始准备进入睡眠状态,而其他的任务廾始检查掩码结果 以决定是需要进行数据的收发还是等待下次调度 调度的睡眠是通过调用的 接山米完成的,这里就是 接 在该接口中,计算系统当前的时间,并和初始启动的时间(调度器初始化时保存)做差运算, 结果转换为毫秒单位 记录了下一次调度器超时到达的时间,每次就让 减去系统当前时间与启动吋间的差值,如果大于零,说明调度吋间还没有 到达,就调用 等待( 差值)时间,然后重新获取系统当前时间,计 算新的差值。流程图如下:
本书详细介绍了利用Visual C# 2005进行网络编程的方法和技巧。全书共分13章,主要内容包括网络编程原理、Visual C# 2005的套接字以及多线程的开发、基于各种不同协议的网络编程应用模块,并通过几个典型的实例介绍了Visual C# 2005网络编程的实际应用。 本书注重代码的通用性和工程实践性,书中提供的通用模块和典型实例稍加修改就可以为读者所用。   本书不仅适用于使用Visual C# 2005进行软件开发的广大软件开发人员,也适合高等院校师生学习和参考使用,特别对高校计算机专业的学生进行毕业设计具有非常好的指导价值,也可以作为广大计算机编程爱好者的自学参考书。 第1章 C#.NET网络编程概述  1.1 网络通信概述   1.1.1 网络通信模型概述   1.1.2 网络通信协议、接口和服务概述   1.1.3 TCP/IP网络架构概述   1.1.4 IP地址与端口  1.2 C#.NET网络编程相关类   1.2.1 IPAddress类   1.2.2 DNS类   1.2.3 IPHostEntry类   1.2.4 IPEndPoint类   1.2.5 Socket类  1.3 套接字概述   1.3.1 套接字的类型和常用属性   1.3.2 建立面向连接的套接字   1.3.3 建立面向无连接的套接字  1.4 使用套接字的简单示例   1.4.1 C/S与B/S架构通信模式概述   1.4.2 编写客户端代码   1.4.3 编写服务器端代码 .  1.4.4 无阻塞套接字  1.5 本章小结 第2章 C#.NET高级网络编程技术概述  2.1 线程与网络通信   2.1.1 基于线程的网络通信概述   2.1.2 在网络编程中使用多线程   2.1.3 线程基础   2.1.4 多线程在网络编程中的应用  2.2 网络通信的常见问题   2.2.1 让网络通信代码更强壮   2.2.2 数据缓冲区处理方法  2.3 TCP无保护消息边界   2.3.1 发送固定长度的消息   2.3.2 采用变长的消息   2.3.3 使用特殊标记处理消息  2.4 本章小结 第3章 开发基于TCP协议的应用程序  3.1 套接字与TCP协议   3.1.1 使用套接字传输数据   3.1.2 NetworkStream对象同数据发送与接收   3.1.3 TcpClient与TcpListener类   3.1.4 使用TCP/IP协议编写应用层的通信代码  3.2 开发异步的TCP应用编程   3.2.1 TCP的异步通信流程   3.2.2 线程阻塞与异步中的同步问题  3.3 开发异步的TCP聊天程序   3.3.1 客户端界面设计   3.3.2 客户端业务逻辑设计   3.3.3 服务器端界面设计   3.3.4 服务器端业务逻辑设计   3.3.5 运行界面  3.4 本章小结 第4章 开发基于UDP的应用程序  4.1 UDP通信协议概述   4.1.1 UDP协议与TCP协议的差别   4.1.2 UDP协议的使用场合  4.2 在C#下UDP协议的相关类   4.2.1 IPAddress类   4.2.2 UdpClient类的构造函数   4.2.3 UdpClient类的常用方法与实例  4.3 UDP协议使用示例   4.3.1 UDP模块功能概述   4.3.2 设计通信流程   4.3.3 开发服务器端程序   4.3.4 开发客户端程序   4.3.5 使用多线程开发UDP协议   4.3.6 使用校验保证信息完整性   4.3.7 效果演示  4.4 本章小结 第5章 开发基于SNMP协议的应用程序  5.1 SNMP协议概述   5.1.1 了解SNMP协议   5.1.2 SNMP的常用命令   5.1.3 设计SNMP包  5.2 SNMP协议使用示例   5.2.1 需求分析与设计   5.2.2 设计程序流程   5.2.3 程序窗口界面设计   5.2.4 SNMP类编写   5.2.5 SNMP程序窗口类编写  5.3 运行效果演示  5.4 使用供货商提供的MIB库  5.5 本章小结 第6章 使用.NET发送邮件  6.1 邮件发送与接收协议概述   6.1.1 SMTP协议与邮件发送   6.1.2 POP3协议与邮件接收   6.1.3 .NET下支持SMTP和POP3的类  6.2 邮件发送与接收模块   6.2.1 需求分析与设计   6.2.2 设计邮件发送和接收的流程   6.2.3 界面设计   6.2.4 编写主窗口的业务逻辑   6.2.5 编写发送邮件的业务逻辑   6.2.6 编写接收邮件的业务逻辑   6.2.7 使用多线程发送与接收邮件  6.3 运行效果演示  6.4 本章小结 第7章 FTP下载与文件传输  7.1 FTP协议概述   7.1.1 使用FTP协议下载文件的流程   7.1.2 相关类库说明  7.2 FTP客户端设计   7.2.1 需求分析   7.2.2 界面设计   7.2.3 业务逻辑设计  7.3 FTP服务器端设计   7.3.1 需求分析   7.3.2 FTP响应码   7.3.3 业务逻辑设计  7.4 运行界面  7.5 本章小结 第8章 基于C#.NET的网络管理模块  8.1 ICMP协议概述   8.1.1 ping命令   8.1.2 tracert命令  8.2 ICMP包  8.3 编写网络管理模块   8.3.1 需求分析   8.3.2 界面设计   8.3.3 编写核心icmp类的业务逻辑   8.3.4 编写具有ping功能的业务逻辑   8.3.5 编写具有tracert功能的业务逻辑   8.3.6 编写findmask功能的业务逻辑   8.3.7 编写时间戳功能的业务逻辑  8.4 运行界面  8.5 本章小结 第9章 编写基于.NET的Web Service  9.1 Web Service概述   9.1.1 Web服务基本概念   9.1.2 Web服务的优势   9.1.3 Web服务的架构  9.2 需求分析与设计   9.2.1 需求分析   9.2.2 文件功能设计   9.2.3 数据库设计  9.3 编写Web Service服务系统   9.3.1 构建Web Service   9.3.2 编写Web服务代码   9.3.3 主页面与登录相关的WebService数据访问模块   9.3.4 发表主题相关的Web Service访问模块   9.3.5 投票相关的Web Service访问模块   9.3.6 管理相关的Web Service访问模块  9.4 主页面与登录模块   9.4.1 界面设计   9.4.2 编写业务逻辑  9.5 发表主题模块   9.5.1 界面设计   9.5.2 编写业务逻辑  9.6 投票模块   9.6.1 界面设计   9.6.2 编写业务逻辑  9.7 管理模块   9.7.1 界面设计   9.7.2 编写业务逻辑  9.8 本章小结 第10章 基于.NET的远程技术  10.1 远程技术概述   10.1.1 远程技术开发结构   10.1.2 远程技术使用  10.2 远程控制开发客户端的设计   10.2.1 界面设计与控件使用   10.2.2 客户端的代码设计  10.3 远程控制开发服务器端的设计   10.3.1 界面设计与控件使用   10.3.2 服务器端的代码设计  10.4 运行效果演示  10.5 本章小结 第11章 流媒体在线播放  11.1 需求分析与设计   11.1.1 需求分析   11.1.2 模块设计   11.1.3 数据库设计  11.2 DirectShow接口   11.2.1 滤波图模型   11.2.2 如何使用DirectShow接口   11.2.3 流媒体在线播放相关接口  11.3 流媒体协议   11.3.1 实时传输协议(RTP)   11.3.2 实时传输控制协议(RTCP)   11.3.3 实时流传输协议(RTSP)   11.3.4 流媒体服务过程  11.4 建立.NET的窗体项目   11.4.1 主窗口界面设计   11.4.2 收藏夹数据库相关业务逻辑设计   11.4.3 流媒体在线播放器业务逻辑设计  11.5 运行效果演示  11.6 本章小结 第12章 在线五子棋系统模块  12.1 需求分析与设计   12.1.1 需求分析   12.1.2 模块设计  12.2 五子棋规则类设计   12.2.1 胜负判定类   12.2.2 行棋规则类  12.3 基于TCP协议的通信类   12.4 网络配置模块   12.4.1 网络配置模块的界面设计   12.4.2 网络配置模块的代码设计  12.5 扫描主机模块   12.5.1 扫描主机模块的界面设计   12.5.2 扫描主机模块的代码设计  12.6 主界面模块   12.6.1 主界面模块的界面设计   12.6.2 主界面模块的代码设计  12.7 运行界面  12.8 本章小结 第13章 基于HTTP协议的下载工具  13.1 HTTP协议   13.1.1 HTTP下载理论   13.1.2 .NET的几个支持HTTP协议的类  13.2 异步机制   13.2.1 异步机制的原理   13.2.2 异步类  13.3 下载工具的设计   13.3.1 需求设计   13.3.2 模块设计   13.3.3 界面设计   13.3.4 业务逻辑设计  13.4 运行效果演示  13.5 本章小结 Microsoft Visual C# 2005是一种新的编程环境,它是为生成在.NET Framework上运行的多种应用程序而设计的。C#简单,功能强大,类型安全,而且是面向对象的。C#凭借它的许多创新实现了对应用程序的快速开发。. Visual Studio支持Visual C#,这是通过功能齐全的代码编辑器、项目模板、设计器、代码向导、功能强大且易于使用的调试器以及其他工具实现的。通过.NET Framework类库,可以访问多种操作系统服务和其他有用的精心设计的类,这些类可显著加快开发周期。 本书大量地使用了.NET Framework提供的类库中的函数来协同开发,通过使用这些已经被封装的类来协助开发确实提高了不少效率,为开发工作带来了诸多的便利。 本书共分13章,第1章介绍了利用Visual C# 2005提供的网络命名空间下的诸多API进行套接字的开发,并对网络编程的原理进行了详细的阐述,为后续的章节奠定了基础。 第2章介绍了具有多线程能力的网络应用程序,这使得用户开发的程序能够适应更加复杂的情况。 第3章~第8章是本书的重要部分,主要介绍基于各种不同协议的网络编程应用模块。第3章介绍了基于TCP协议的聊天程序;第4章介绍了基于UDP的通信程序;第5章介绍了使用SNMP协议的网络管理程序;第6章介绍了使用SMTP以及POP3协议的E-mail系统;第7章介绍了基于FTP的文件传输模块;第8章介绍了使用ICMP协议的网络探测程序。 第9章介绍了基于Web Service的电子公告板系统,并结合采用了SQL Server 2005数据库;第10章介绍了使用远程控制技术的应用程序;第11章则介绍了流媒体在线播放系统。.. 第12章介绍了基于TCP通信协议的在线五子棋系统;第13章主要介绍了基于HTTP协议的下载工具,该工具具有多线程下载、断点续传的功能。 本书注重理论指导性和工程实践性,书中提供的各个网络应用程序只要稍加修改就可以为读者所用。本书不仅适用于使用Visual C# 2005进行软件开发的广大软件开发人员,也适合高等院校师生学习和参考使用,特别对高校计算机专业的学生进行毕业设计具有非常好的指导价值,也可以作为广大计算机编程爱好者的自学、参考用书。 本书主要由梅晓冬、颜烨青执笔,在编写本书程序的过程中,得到了陈璧元的大力支持,在此表示衷心的感谢。此外,还要感谢杨文军、程伟、袁远、刘武、彭澜、李通、李杰、卢茂琼、张燕生、胡燕生、邓湘成、卢下知、王周浩、邱岳、刘流、代本、刘明星、孙靖华等人,他们在本书编写过程中给予了我鼓励和支持。 由于时间仓促,加之水平有限,书中不足之处在所难免,敬请读者批评指正。... 编者 2008年1月

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧