首页 > 其他分享 >流媒体服务器总结

流媒体服务器总结

时间:2023-01-03 10:36:40浏览次数:64  
标签:总结 流媒体 red5 Red5 登录 args 服务器 客户端


最近一直研究流媒体服务器的搭建及使用,今天就简单整理下方便以后查阅。

一:企业级的流媒体平台框架:EasyDarwin



EasyDarwin是在Apple开源流媒体服务器Darwin Streaming Server(v6.0.3)基础上进行开发和维护的免费开源、高效、易扩展的面向企业级的流媒体平台框架,开始于2013年,遵循 Apple开源License,为了敏捷流媒体服务器开发和简化企业流媒体应用开发而诞生的。 EasyDarwin一直以来保持 Darwin原有体系结构和设计思想,在保持出色的性能和简洁的代码同时,也在不断优化其底层效率和上层通用性。在广大开源爱好者的积极参与和努力下, 易用性、扩展性和稳定性等方面不断优化和改进,已经成长为国内较具影响力的流媒体开发框架,众多应用案例确保可以稳定用于商业开发。

EasyDarwin 使用标准的RTSP/RTCP/RTP协议,服务器部署支持跨平台,包括:Windows、Linux、Mac、Solaris,并 且可以很容易进行自定义的扩展。EasyDarwin可以用于流媒体直播、点播、录像与回放等等需求,EasyDarwin依托于Darwin的优秀架 构,可扩张实现云监控、云视频等项目需求

EasyDarwin目前支持:

1.MPEG-4/H264点播;

2.RTSP/RTP直播(推模式直播/拉模式直播);

3.私有协议接入(海康、大华等SDK接入);


流媒体服务器总结_用户登录


项目主页: ​​http://www.open-open.com/lib/view/home/1420291903515​

二:​​Flash流媒体服务器 ​​   Red5是一个采用Java开发开源的Flash流媒体服务器。它支持:把音频(MP3)和视频(FLV)转换成播放流; 录制客户端播放流(只支持FLV);共享对象;现场直播流发布;远程调用。Red5使用RSTP作为流媒体传输协议,在其自带的一些示例中演示了在线录制,flash流媒体播放,在线聊天,视频会议等一些基本功能。

   

Red5 安装

准备工作:

一、JAVA 环境配置:下载的 JDK 安装包,本文选择的是 ​​jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe​​。

二、确认你的安装环境并选择 Red5 安装包:如果是 Windows 操作系统,可以下载对应的安装文件 Red5 0.9 RC2(本文写作时使用的该版本),如需下载最新版本或了解 Red5 其他相关信息,可以参考该页面 ​​https://github.com/Red5/red5-server​​​。
准备工作完成,一切就绪。

安装工作:

步骤一:首先安装上面下载的 JDK 安装包(备注:如果你先安装 Red5,会提示找不到 JDK,你必须先完成步骤一再继续以下操作)。安装时首先安装 JDK,必须记住安装路径,保持默认即可,默认是 C:\Program Files\Java\jdk1.6.0_10,然后安装 JRE, 保持默认即可,默认是 C:\Program Files\Java\jre6。安装完成后,必须配置环境变量,我的电脑–>属性–>高级 选项卡–>环境变量 (N)–>找到 系统变量 (S) 下 新建(W),然后输入 变量名(N):JAVA_HOME,变量值(V):上面 JDK 安装路径 C:\Program Files\Java\jdk1.6.0_10,确定即可,JDK 准备就绪。

步骤二:安装 Red5,安装 Red5 时,会要求输入外网可访问的 IP, 比如 121.52.209.62, 然后输入可访问的端口(Port),一般是 5080, 最后安装完成即可。



​回页首​

Red5 简单的应用实例

经过上面精彩的介绍,相信大家对 Red5 会有所兴趣,在这里我给大家用一个简单的应用实例,仅以登录过程为例,来帮助大家更好的理解 Red5 中的一些概念和模型。本应用实例中,Server 端基于 Red5 0.9 RC2 采用 Java 编写,而 Client 端则采用 Action Script。

图 1. 项目结构


由于 Red5 是在 Tomcat 中运行的,因此 Red5 项目与普通 JAVAEE 项目结构类似。不同点在于,Red5 的配置文件需要加上“red5-”前缀,在 Tomcat 启动时,所有“red5-”被默认为 Red5 Server 的配置文件而不会被 Tomcat 加载,而后当 Red5 启动时才会加载相应的配置文件。让我们来看看 red5-web.xml 中都有哪些组成部分。



清单 1. red5-web.xml 中 Context 部分


<bean id="web.context" class="org.red5.server.Context" autowire="byType"> <property name="scopeResolver" ref="red5.scopeResolver" /> <property name="serviceInvoker" ref="global.serviceInvoker" /> <property name="mappingStrategy" ref="global.mappingStrategy" /> <property name="clientRegistry" ref="IloveClientRegistry" /> </bean>



清单 1 中前三项 Property 为 Red5 项目默认的属性。第四项“ClientRegistry”为项目自定义的 Context, 主要用于实现用户注册的功能。

清单 2. red5-web.xml 中 Scope 部分


<bean id="web.scope" class="org.red5.server.WebScope" init-method="register"> <property name="server" ref="red5.server" /> <property name="parent" ref="global.scope" /> <property name="context" ref="web.context" /> <property name="handler" ref="web.handler" /> <property name="contextPath" value="${webapp.contextPath}" /> <property name="virtualHosts" value="${webapp.virtualHosts}" /> </bean>


清单 2 中定义了 Red5 项目中 Scope 的默认值。如需要可以添加自己定义的 Scope,并给它赋值。

清单 3. red5-web.xml 中 Handler 部分


<bean id="web.handler" class="org.red5.server.webapps.Ilove.Application"> <property name="userInfoService" ref="userInfoService" /> </bean>


清单 3 重载了 web.handler,因此当有 Client 与 Server 提出连接请求时,org.red5.server.webapps.Ilove.Application 将被用于处理客户请求。

接下来我们看下如何实现从 Flash 客户端调用 Red5 应用的方法,以及如何使用 Scope 来判断用户登录状态。

图 2. 客户端登录


图 3. 登录界面


图 2 中展示了 Flash 客户端中 ActionScript 面对不同 Connection 状态的处理方法。由 Flash 客户端发起的登录请求,首先需要判断当前与 Server 的 Connection 状态, 只有状态为”NetConnection.Connect,Sucess”时, 才可以向 Server 端调用方法“logicProcess”。 图 3 中展示了不同 Connection 状态时 Flash 客户端会给出的提示。

清单 4. LoginInterface


public interface LoginInterface extends IStreamAwareScopeHandler { …… //用户登录时服务器端调用当前 connection 的方法 public String loginProcess(String[] args) throws FileNotFoundException, ParserConfigurationException, SAXException, IOException; //用户登录时服务器端报错调用当前 connection 的方法 public void systemError(); /**用户登出时客户端端调用当前 connection 的方法 * * @param userName 需要剔除的用户名 */ public void logoutProcess(String userName); …… }



如清单 4 所示,org.red5.server.webapps.Ilove.Application 实现了 LoginInterface 接口, 其中定义了一些客户端可见的方法名称。因为 org.red5.server.webapps.Ilove.Application 被定义为项目的 Handler,类中所有 public 方法都可以被客户端调用。

清单 5. 用户登录


public String loginProcess(String[] args) throws FileNotFoundException, ParserConfigurationException, SAXException, IOException { final IConnection conn = Red5.getConnectionLocal(); if (conn.getClient() == null) return SystemContent.NO_ENTRY; final IScope scope = conn.getScope(); final IClient client = conn.getClient(); final int code = (Integer) client.getAttribute("codeName"); //检查当前登录冲突 if (code == SystemContent.STATUS_CODE_DUPLICATEUSER) { //此用户名已登录,notify 客户端不允许重复登录 if (model.statusMap.get(args[0])) return SystemContent.NO_ENTRY; //如果没有用户登录,则更新数据库中 session 值为当前用户 else { this.userInfoService.updateSession(args[0], (String) client .getAttribute("currentId")); } } //如果通过验证,则 client 应该为 IloveStreamClient 类型 if (client instanceof IloveStreamClient) { boolean authenticated = ((IloveStreamClient) client) .isAuthenticated(); //当前验证状态 if (authenticated) { synchronized (model.statusMap) { model.statusMap.put(args[0], true); refreshUserList(conn, args[0], "refresh"); refreshUserList(conn, args[0], "add"); } invokeClientMethod(conn, "declarePublicSo", new Object[] { "chatingSO" }, null); messageAdapter .sendPublicMessage(so, "欢迎登录!" + args[0], "系统机器人"); final String scheduleName = this.addScheduledJob(5000, new IloveUserListChecker(conn, args[0])); scope.setAttribute((String) client.getAttribute("currentId"), scheduleName); return args[0] + " found"; } } return args[0] + " not found"; }



​​


​回页首​

Red5 应用的部署

​Red5 0.9 RC2 中已经内嵌了 Tomcat 服务器。因此 Red5 应用的部署和普通 JavaEE 应用在 Tomcat 中的部署方式是一样的。这里需要注意的是,上文中提到的 XML 配置文件必须是正确的,以防止运行报错。图 4 中是一个基于 Red5 应用的视频聊天系统,当用户登录成功后,可以在当前的聊天室中与其他已登录用户进行文字交谈或者视频聊天。具体功能的实现就不在本文中阐述了。​

图 4. 视频聊天系统界面

​​


三 :vlc搭建简单流媒体服务器 RTSP方式


     

  1. 1.打开“媒体——流”选项,如图所示:

    流媒体服务器总结_流媒体服务器_02



  2. 2.点击“添加”按钮选择流媒体文件,然后点击“串流”按钮

    流媒体服务器总结_流媒体服务器_03



  3. 3.点击“下一个”后,在“目标设置”界面选择“RTSP”,然后点击添加 + 按钮

    流媒体服务器总结_客户端_04



  4. 4.填上目标ip地址,并在“转码选项”中选择相应的编码类型(这个视情况而定),目标IP地址就是PC机器本机的IP地址

    流媒体服务器总结_客户端_05


  5. 5.客户端操作,重新打开一个窗口
    点击“媒体——打开网络串流”,在弹出的框中输入“rtsp://192.168.1.2:1234/tcp1”,点击“播放”按钮即可。



标签:总结,流媒体,red5,Red5,登录,args,服务器,客户端
From: https://blog.51cto.com/u_15928064/5984656

相关文章

  • 单例模式和多例模式的总结
    学习交流关注微信公众号:钟渊博客今天开始学习设计模式之单例和多例单例模式的关键有两点:1.构造方法为私有,这样外界就不能随意调用。2.get的方法为静态,由类直接调用 多例模......
  • LRU、LFU、FIFO算法总结
    一、概述(1)FIFO:FirstInFirstOut,先进先出(2)LRU:LeastRecentlyUsed,最近最少使用(3)LFU:LeastFrequentlyUsed,最不经常使用  FIFO表示先进先出,类似于对列,在数据的结构......
  • Statement 和 PreparedStatement总结
    一、StatementStatement是Java执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL......
  • vue组件通信6种方式总结(常问知识点)
    前言在Vue组件库开发过程中,Vue组件之间的通信一直是一个重要的话题,虽然官方推出的Vuex状态管理方案可以很好的解决组件之间的通信问题,但是在组件库内部使用Vuex往往会......
  • 阿里前端二面必会react面试题总结
    非嵌套关系组件的通信方式?即没有任何包含关系的组件,包括兄弟组件以及不在同一个父级中的非兄弟组件。可以使用自定义事件通信(发布订阅模式)可以通过redux等进行全局状态......
  • 我的2022年终总结:再次抉择,以终为始
    2022年即将结束,又到了做年终总结的时候,它是我每年的一个习惯,意味着又要开始新的征途,在开始新的征途之前回顾一下很有必要。1也谈2022艰难抉择:从互联网到制造业今年最大......
  • 学习笔记之在免费服务器上运行springboot程序
    因为项目需求,了解到了这个sanfengyun网站,可以申请免费虚拟主机和免费云服务器。申请到免费云服务器后,可以看到自己的控制台主页里有所有的信息。(其中网址如下图所示)idea......
  • Linux网络第四章:SSH远程管理及通过SSH实现服务器之间的免密连接
    目录一、SSH远程管理基础1、ssh协议2、ssh原理3、配置文件解析4、登录方法5、使用ssh协议传输的命令二、免密连接的实现1、免密连接原理 2、免密实现环境准备3......
  • 记录一下阿里云服务器部署jenkins
    阿里云服务器部署jenkins一、jenkins安装1.Yum安装yum源导入#添加Yum源sudowget-O/etc/yum.repos.d/jenkins.repohttps://pkg.jenkins.io/redhat-stable/jenkin......
  • 数据结构基础笔记、基础知识总结、周周练汇总,通过代码,更快速掌握数据结构和算法知识!
    目录​​快报快报!​​​​1.为什么要开通这个QQ群?​​​​2.里面都有啥?​​​​1、数据结构基础笔记​​​​2、数据结构必备基本知识​​​​3、数据结构周周练​​​​说......