基于Nginx实现RTMP/HLS视频服务器

首先名词解释

RTMP

实时消息协议英语:Real-Time Messaging Protocol,缩写RTMP)也称实时消息传输协议,是最初由Macromedia为通过互联网Flash播放器与一个服务器之间传输流媒体音频视频和数据而开发的一个专有协议。Macromedia后被Adobe Systems收购,该协议也已发布了不完整的规范供公众使用。

RTMP协议有许多变种:

  1. 默认使用TCP端口1935的纯粹(plain)协议。
  2. RTMPS,通过一个TLS/SSL连接传输RTMP。
  3. RTMPE,使用Adobe自有安全机制加密的RTMP。虽然实现的细节为专有,但该机制使用行业标准的密码学原函数。[1]
  4. RTMPT,用HTTP封装以穿透防火墙。RTMPT通常在TCP通信端口80和443上使用明文请求来绕过大多数的公司流量过滤。封装的会话中可能携带纯粹的RTMP、RTMPS或RTMPE数据包。
  5. RTMFP, 使用UDP而非TCP的RTMP,取代RTMP Chunk Stream。Adobe Systems开发了安全的实时媒体流协议包,可以让最终用户直接地相互连接(P2P)。

虽然RTMP的主要动机是成为一个播放Flash视频的协议,但它也用于其他一些应用程序,如Adobe LiveCycle Data Services ES

HLS

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP流媒体网络传输协议。是苹果公司QuickTime XiPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

苹果公司把HLS协议作为一个互联网草案(逐步提交),在第一阶段中已作为一个非正式的标准提交到IETF。2017年8月,RFC 8216发布,描述了HLS协议第7版的定义。[1]

 

Nginx对这两种视频模式提供了支持。HLS部分可见 https://nginx.org/en/docs/http/ngx_http_hls_module.html,RTMP部分可见 https://github.com/arut/nginx-rtmp-module,这部分是非官方的。

单点登录系统CAS5.0.x配置与部署

本文由@iflab-FZ贡献

cas5.0版本采用gradle-over-lay的形式部署。外加界面的简单定制,验证码,cas-management的配置。

由于是凭着之前配置的印象来写文章,难免会有疏漏,欢迎指正。

首先简介CAS。cas是耶鲁大学研发的一套单点登录系统,为多个应用进行统一的用户认证提供了很好地解决方案。它在https协议下,以安全的方式对用户的合法性进行认证,同时与需要用户认证的各应用进行交互,使多个应用共用一套程序进行统一认证。

以下是部署cas可能会用到的网站:

https://apereo.github.io/cas/5.1.x/index.html
Github:https://github.com/apereo
Maillist:https://www.mail-archive.com/cas-user@apereo.org/Continue reading

单点登录系统CAS的委托(Delegation)认证配置

本文由@iflab-FZ贡献

关于如何在一台服务器上部署中央认证系统(CAS)的方法在之前的文章中已经介绍过了

*以下方法与配置依旧基于CAS5.0.x,不同版本可能配置方式与属性稍有差异

由于之前学校的新生数据同步较慢,需要一个学期左右的时间才能同步到CAS的数据库,所以这就造成了新生无法在入学之后及时使用部分服务和应用,例如使用edx进行在线学习等等。

因为之前部署的CAS使用的是gradle-overlay方式,所有的配置都是通过修改配置文件来完成的,为了避免直接修改线上稳定运行的CAS的配置文件,想到还有另一台服务器安装了新的测试版的CAS,所以决定让测试版的服务器连接自己建立的数据库,作为现行CAS的委托认证服务器对新生的账号进行认证。

具体参考了这篇 说明文档

Continue reading

OpenET系列之一:CAS安装与配置


一、准备工作

CAS的Github:https://github.com/apereo
CAS官方网站:https://apereo.github.io/cas/5.2.x/
服务器信息:Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
JDK版本:1.8.0_141
Tomcat版本:Tomcat8

二、CAS安装

准备好服务器环境后,从GitHub上下载cas-gradle-overlay,目前使用的是CAS-5.0.6版本,所以本文也以该版本为例进行说明。各个版本的CAS在功能上略有不同,大体的部署步骤基本相似,推荐使用5以上的稳定版本。本篇文章不涉及到对CAS的源码进行修改,采用Gradle-overlay的方式进行部署,启动Tomcat后即可直接使用。

进入下载好的CAS目录下,构建CAS

sudo ./gradlew clean build
该命令会从网络下载必要的组件,第一次时间较长,往后就会快很多。

{CAS-dir}/cas/build/libs/cas.war

即为构建好的war包,将该文件复制到

{Tomcat-dir}/webapps/

目录下,重启Tomcat,即可通过浏览器访问

localhost:8080/cas

如果将war包重命名为ROOT.war,则可以直接通过

localhost:8008

访问
注:{CAS-dir}即为下载的CAS目录,{Tomcat-dir}即为Tomcat的安装目录

三、https与数据库连接配置

在{Tomcat-dir}/目录下

sudo vim server.xml

将Tomcat配置上自己的https证书

在{CAS-dir}/目录下

sudo vim cas/build.gradle

dependencies {
compile “org.apereo.cas:cas-server-webapp:${project.’cas.version’}@war”
compile “org.apereo.cas:cas-server-support-jdbc:${project.’cas.version’}”
}

加入jdbc依赖。注意,该依赖包括了大部分数据库的driver,但是没有oracle数据库的,如果需要使用oracle数据库,需要单独下载驱动后放置在

{Tomcat-dir}/webapps/cas/WEB-INF/lib/

目录下

sudo vim {Tomcat-dir}/webapps/ROOT/WEB-INF/classes/application.properties

参考 https://apereo.github.io/cas/5.2.x/installation/Configuration-Properties.html#query-database-authentication
进行配置,包括数据库链接,用户名密码等等。
比较重要的属性有

cas.authn.jdbc.query[0].sql=SELECT 密码字段 FROM table WHERE 用户名字段=?
cas.authn.jdbc.query[0].healthQuery= cas.authn.jdbc.query[0].url=
cas.authn.jdbc.query[0].dialect= cas.authn.jdbc.query[0].user=
cas.authn.jdbc.query[0].password= cas.authn.jdbc.query[0].driverClass=

配置好后,注释掉最后一行

cas.authn.accept.users=casuser::Mellon

重启Tomcat,重新访问即可通过数据库内的用户名密码登录。

四、Service Management配置

我们采用Service Management管理需要通过CAS登录的应用服务,并且使用json方式存储这些服务的信息。
从GitHub上下载cas-management-overlay,在{CAS-Management}目录下执行

sudo vim pom.xml

添加依赖

<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-json-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>

保存后执行

sudo ./build.sh run
生成的.war文件位于

{CAS-Management}/target

在{CAS-dir}/目录下

sudo vim cas/build.gradle
添加依赖

compile “org.apereo.cas:cas-server-support-json-service-registry:${project.‘cas.version’}”

将新生成的两个.war文件放入{Tomcat}/webapps目录下,通过

localhost:8080/cas-management

访问应用管理。其配置文件位于

/etc/cas/

目录下。