流媒体
踏雪无痕大黄蜂
高度决定视野,角度改变观念,尺度把握人生。
展开
-
开源项目live555学习心得(二)
前面已经讲到,通过不断地尝试(其实要在XP SP3环境下使用VS2008编译成功还是挺费神的),总算把源代码编译成功,同时又参考了新下载的一个用VS2008编译通过的live555源代码。结合这些,开始对主要类结构进行初步分析。鉴于UsageEnvironment库、BasicUsageEnvironment库和groupsock库中的类较少,就暂且不作分析了。这里主要针对liveMedia库原创 2010-03-12 17:15:00 · 15854 阅读 · 3 评论 -
SharpStreaming项目开发纪实:构建基于RTSP协议的服务器及客户端应用(三)——客户端的业务代码实现
本篇文章简要介绍客户端有关RTSP的业务代码实现。原创 2010-08-19 21:11:00 · 5277 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基于RTSP协议的服务器及客户端应用(二)——服务器的业务代码实现
本篇文章简要介绍服务器部分与RTSP协议实现相关的业务代码实现。 正如前一篇文章中所提到的那样,在代码上实现RTSP协议的简单应用还是相对简单的。在参考了live555开源项目中关于RTSP协议的实现代码之后,针对本项目,笔者将只对其中的几个重要会话状态OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN作初步的代码实现,同时在本项目中将不考虑用户验证的问题。以下是关于上述会话状态和若干状态码的代码实现,其中的SETUP和PLAY方法还有待进一步完善,这些代码均原创 2010-08-15 16:16:00 · 4394 阅读 · 12 评论 -
SharpStreaming项目开发纪实:构建基于RTSP协议的服务器及客户端应用(一)——准备知识(RTSP协议)
本篇文章简要介绍RTSP协议的相关知识。 在RTSP协议文档中有这样的描述:实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体。尽管连续媒体流与控制流有可能交叉,但RTSP 本身通常并不发送连续媒体流。换言之,RTSP 充当多媒体服务器的网络远程控制。 正因为如此,我们经常可以看到,RTSP协议的内容当中,在请求串中均带有会话状态,如SETUP、PLAY、PAUSE等,这就是RTSP的状态。虽然RTSP 中很多方法与状态无关,但下列方法在定义服务器流资源的分配与应用上起着重要原创 2010-08-02 23:02:00 · 3806 阅读 · 9 评论 -
SharpStreaming项目开发纪实:项目工程结构调整
<br /> 在前面的文章中提到了本项目的总体结构,将服务器和客户端划分为两个解决方案,同时服务器包括了UI处理(SharpStreamingServer)和核心类库(SharpStreamingServer.Core),客户端包括了UI处理(SharpStreamingClient)和核心类库(SharpStreamingClient.Core)。虽然这样的方案并无非常大的问题,但考虑到代码的重用性,服务器和客户端共用了其中一些代码,如日志记录、配置文件等,因此非常有必要将其中的一些公共代码提取出来原创 2010-08-01 11:12:00 · 1218 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(八)——客户端初步实现
<br /> 本篇文章介绍客户端的初步实现。<br /> 客户端由两个项目工程组成,分别为SharpStreamingClient(用于客户端UI处理)和SharpStreamingClient.Core(用于客户端核心类处理)。<br /> 通过构建RtspClient类作为客户端的核心类,其功能包括连接服务器、断开连接、打开流、播放流、暂停流、停止流等。其中连接服务器与断开连接的代码片段如下:<br /> /// <summary> /// Connec原创 2010-07-27 20:11:00 · 1386 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(七)——服务器界面实现
<br /> 本篇文章简要介绍服务器的界面设计及实现。<br /> 界面部分的设计一切从简,提供启动服务器、停止服务器、设置等操作,同时提供两个列表,一个用于展示服务器的运行信息,一个用于展示客户端会话的基本信息等。<br /> 服务器提供的设置功能用于允许的最大用户连接数、会话超时时间等,采用模态对话框来实现,通过TreeView控件来动态载入设置节点,通过用户控件来实现对应每一个节点的内容切换。<br /> 在代码实现方面,初始化ServerForm时,一并初始化Settings原创 2010-07-24 23:23:00 · 1261 阅读 · 1 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(六)——服务器通信部分初步实现
本篇文章将介绍服务器通信部分的代码实现。 首先从整体来看,服务器在启动时要创建套接字并开始不断地进行侦听,一旦有新的客户端连接,将会创建一个客户端会话实例并通过该会话实例管理自己的套接字,同时采用异步方式来实现数据的接收与发送。在这里需要说明的是,为了使各自的职责更清晰,笔者特别对每一个客户端采用两个套接字,一个套接字专门用于与服务器的普通通信(如各种消息的收发等),另一个套接字专门用于发送或接收流数据。当然,也许这样设计可能会存在一定的缺陷,但姑且先这样去实现,若有可能,待日后有更好的思路时原创 2010-07-21 21:44:00 · 1687 阅读 · 3 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(五)——总体结构设计(客户端)
<br /> 本篇文章介绍客户端的总体结构设计。相对于服务器而言,客户端的总体结构相对简单一点,当然对于播放模块可能是个例外,因为目前对这一块还存在很多的未知部分。<br /> 客户端的主要工作就是连接上服务器,然后向服务器发送各种请求并等待服务器的响应,再之后就是不断地接收来自服务器的数据流并在适当时候向服务器反馈接收状况。<br /> 下面是客户端的思维导图:<br /><br /> 与服务器一样,客户端也由两个项目(SharpStreamingClient.UI和SharpSt原创 2010-07-18 16:02:00 · 1419 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(三)——准备知识(多线程编程)
<br /> 本篇文章将简要介绍多线程编程的一些基础知识。多线程编程是很多程序开发特别是服务器开发方面经常会使用的重要技术。<br /> 在.NET中,System.Threading命名空间提供了大量的类和接口来支持多线程编程。查阅MSDN,对Thread类有这样的描述:创建并控制线程,设置其优先级并获取其状态。在编程中经常会使用到的Thread类中的相关方法如下:<br /> (1)Start():启动并开始执行线程;<br /> (2)Suspend():挂起线程(如果线程已经原创 2010-07-13 20:21:00 · 1569 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(四)——总体结构设计(服务器端)
SharpStreaming项目包含两个子项目,分别为SharpStreamingServer和SharpStreamingClient,按照通常的做法是对每一个项目做分别的开发,待项目开发完毕后才最后集成。很显然,这种方式似乎并不适合于本项目的开发,因为服务器与客户端本来就应该是配套的,两者是紧密结合的。因此,在构建服务器的基本框架的同时,也必须构建客户端的基本框架,并能够使两者很好地集成起来。这样无论是对服务器还是对客户端的进一步开发和调试都能够顺利进行,可以进一步确保每一个服务器和客户端的版本原创 2010-07-15 22:20:00 · 1731 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(一)——准备知识(Socket编程)
在C#中,构建一个简单的通信程序是非常简单的,因为.NET Framework已经为我们的应用程序提供了System.Net和System.Net.Sockets命名空间,并可以通过引用这两个命名空间开发出多种网络应用程序。 通过查阅MSDN,可以非常清晰地知道,Socket提供了非常多的方法和属性等,在数据的发送及接收方面,既有同步方式,也有异步方式。在数据发送方面比较常用的像Send、SendTo、BeginSend/EndSend等,在数据接收方面比较常用的像Receive、Receiv原创 2010-07-10 21:43:00 · 1612 阅读 · 0 评论 -
SharpStreaming项目开发纪实:构建基本的服务器及客户端应用(二)——准备知识(事件编程)
本篇文章将简要介绍事件编程的相关基本知识。在开发程序时,事件对我们而言是经常接触的一个概念,比如鼠标事件、键盘事件等等。在这里要介绍的不仅仅是局限于一些系统定义的事件,更应该关注利用事件返回一些自定义数据。 在MSDN中对事件的定义是这样的:事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。 显然,很多时候,我们需要事件生成事件数据,这时候原创 2010-07-12 20:19:00 · 1253 阅读 · 0 评论 -
SharpStreaming项目开发纪实:概述
从本月开始,笔者将利用工作之余使用C#开发一套基于流媒体技术的服务器与客户端。之所以有这个想法,主要是基于以下几点原因: 1、半年多以前,笔者开始致力于流媒体技术的研究,并充分了解了开源流媒体服务器live555的架构及若干开发细节,同时在其基础上使用C++进行了二次开发。经过这半年多来的艰苦努力,笔者虽不敢说对流媒体技术有全面的了解或掌握,但亦对流媒体的基本流程有了相对清晰的认识,并能够将其运用于实际的项目开发当中。为此,编写一个小型项目,对进一步理清流媒体的开发思路应该大有裨益。 2原创 2010-07-09 20:20:00 · 2023 阅读 · 4 评论 -
开源项目live555学习心得(三)
RTSP服务器处理客户端点播的基本流程 处理连接请求的基本流程:l Step 1:与客户端建立RTSP连接(调用incomingConnectionHandler方法),创建ClientSession并关联fClientSocket与incomingRequestHandler(调用incomingConnectionHandler1)。l Step 2:接收客户端请求(原创 2010-03-22 13:47:00 · 7020 阅读 · 6 评论 -
开源项目live555学习心得(一)
最近因项目开发需要,开始学习开源项目live555,特别将个人的一些学习心得做一下记录,如有理解不正确之处,欢迎各位朋友指出。首先是源码的下载,这可以从http://www.live555.com上下载,同时上面亦提供了相关的文档,文档虽较为粗糙,但总比找不到任何文档说明强。当然,我在学习的过程中,也从网上查找了一段时间,收获还是有一点的,其中就有诸如:RTSP服务器实例live555源代码分原创 2010-03-11 14:36:00 · 27111 阅读 · 8 评论 -
SharpStreaming项目开发纪实:项目源码发布
很遗憾,由于近期忙着换工作,未能继续SharpStreaming项目的开发工作,而本人现所从事的新工作也逐渐远离了C#和流媒体技术。至此,SharpStreaming项目宣告流产了! 虽然,这是一件很不幸的事情,但秉着负责任的态度,笔者认为很有必要将SharpStreaming项目的源代码发布出来,即使笔者本人几乎没机会去做后续开发和更新,也可以寄希望于流媒体技术的编程爱好者和朋友去完成。 在这里,再次说明一下SharpStreaming项目的相关信息。该项所使用的开发环境为:Micro原创 2010-12-01 20:29:00 · 4058 阅读 · 11 评论