有时我们 nginx 须要和 wowza 服务器交互以进行一些 LB 事宜;有时我们的管理员须要实时了解 wowza 服务器的一些其它状态信息(比方一些自己定义对象的状态等等)。而用 rtmp 不是太方便。

这些情况下。假设我们的 wowza 服务器能提供一个 http api 就好了。就像 web 容器 tomcat 那样。本文以一个简单的 http 发送參数到 wowza。然后 wowza 返回一个 json 为例(经典的 REST 案例)。介绍怎样让你的 wowza 服务器提供 RESTful web 调用接口。
        本文是在《代替 Ant:使用 Maven 管理 Wowza 插件开发》样例的基础上进一步进行研发,没有使用 wowza 官方的 Eclipse 插件(官方对 wowza 项目的管理使用的是 ant)。

1. 新建 maven 项目
        參考《代替 Ant:使用 Maven 管理 Wowza 插件开发》步骤。新建的 maven 项目 defonds-server-module 例如以下:

        新建项目的 debug 调试效果:

        2. 编写 HTTProvider2Base 子类

package com.defonds.wms.module.server;

import java.io.IOException;
import java.io.OutputStream; import com.wowza.wms.http.HTTProvider2Base;
import com.wowza.wms.http.IHTTPRequest;
import com.wowza.wms.http.IHTTPResponse;
import com.wowza.wms.logging.WMSLogger;
import com.wowza.wms.logging.WMSLoggerFactory;
import com.wowza.wms.vhost.IVHost; public class ServerMonitorHttpInterface extends HTTProvider2Base {
private static final WMSLogger logger = WMSLoggerFactory.getInstance().getLoggerObj(ServerMonitorHttpInterface.class.getName()); @Override
public void onHTTPRequest(IVHost ivHost, IHTTPRequest request, IHTTPResponse response) {
String id = request.getParameter("id");
String name = request.getParameter("name");
logger.debug("ServerMonitorHttpInterface--http--request--id=" + id + ";name=" + name); // TODO do your own business logic here String jsonObject = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
response.setHeader("Content-Type", "application/json");
// Get the printwriter object from response to write the required json object to the output stream
OutputStream out = response.getOutputStream();
try {
out.write(jsonObject.getBytes());
out.flush();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
} }

3. 编辑 VHost.xml
        编辑 %wowza%/conf/VHost.xml。加入一个 HTTPProvider:

<HTTPProvider>
<BaseClass>com.defonds.wms.module.server.ServerMonitorHttpInterface</BaseClass>
<RequestFilters>monitor*</RequestFilters>
<AuthenticationMethod>none</AuthenticationMethod>
</HTTPProvider>

4. 项目又一次打包部署
        命令行切换到你的 defonds-server-module 项目文件夹下,运行
mvn package
        检查 %wowza%/lib 文件夹,发现 defonds-server-module 已成功部署:

        5. 訪问接口
        debug 启动 defonds-server-module,然后在浏览器訪问 http://localhost:1935/monitor?id=9527&name=defonds
        发现返回的是
Wowza Streaming Engine 4 Trial Edition

        Eclipse 控制台也没有 ServerMonitorHttpInterface 本应该输出的 log 日志。
        这是由于 com.wowza.wms.http.HTTPServerVersion 这个 HTTPProvider 把请求拦截了:

					<HTTPProvider>
<BaseClass>com.wowza.wms.http.HTTPServerVersion</BaseClass>
<RequestFilters>*</RequestFilters>
<AuthenticationMethod>none</AuthenticationMethod>
</HTTPProvider>

由于它的配置是 *。

能够改为其它,或者将其凝视掉。就能够了。

凝视掉 HTTPServerVersion 之后。又一次启动 defonds-server-module,然后訪问 http://localhost:1935/monitor?id=9527&name=defonds:
        这次是返回的我们想要的信息:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVmb25kcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="monitor返回正确信息" align="middle" />
        Eclipse 控制台有 log 输出了:
DEBUG server comment - ServerMonitorHttpInterface--http--request--id=9527;name=defonds
        成功了。

嗯,就这些。就是这么简单:)本文演示样例源代码已上传 CSDN,有兴趣的朋友能够去这里下载:http://download.csdn.net/detail/defonds/7493981。

參考资料

让你的 wowza server提供 RESTful web 服务的更多相关文章

  1. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  2. RESTful Web 服务:教程

    RESTful Web 服务:教程   随着 REST 成为大多数 Web 和 Mobile 应用的默认选择,势必要对它的基本原理有所了解. 在它提出十多年后的今天,REST 已经成为最重要的 Web ...

  3. Spring MVC中发布Restful Web服务

      对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的.   近些年来,以信息为中心的表述性状态转移(Representational State Tran ...

  4. 基于jersey和Apache Tomcat构建Restful Web服务(一)

    基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...

  5. 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务

    作者: Yi Ming Huang, 软件工程师, IBM Dong Fei Wu, 软件工程师, IBM Qing Guo, 软件工程师, IBM 出处: http://www.ibm.com/de ...

  6. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

  7. RESTful Web服务的操作

    1.首先我们说一下Http协议是无状态的 HTTP协议是无状态的,我们看到查到的用到的返回404,500,200,201,202,301.这些不是HTTP协议的状态码. 是HTTP的状态码,就是HTT ...

  8. [译]Spring Boot 构建一个RESTful Web服务

    翻译地址:https://spring.io/guides/gs/rest-service/ 构建一个RESTful Web服务 本指南将指导您完成使用spring创建一个“hello world”R ...

  9. SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

    一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

随机推荐

  1. POJ 3662 Telephone Lines (分层图)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6785   Accepted: 2498 D ...

  2. 2017 Hackatari Codeathon B. 2Trees(深搜)(想法)

    B. 2Trees time limit per test 0.75 seconds memory limit per test 256 megabytes input standard input ...

  3. cpu亲和性绑定

    将进程与cpu绑定,最直观的好处就是减少cpu之间的cache同步和切换,提高了cpu cache的命中率,提高代码的效率.从cpu架构上,NUMA拥有独立的本地内存,节点之间可以通过互换模块做连接和 ...

  4. 主数据及其管理MDM

    什么是主数据 企业数据的管理包含主数据,元数据,交易数据. 主数据是描述企业核心实体的基础数据,比如客户.用户.产品.员工等. 它是具有高业务价值的.可以在企业内跨越各个业务部门被重复使用的数据,并且 ...

  5. 【KMP】BZOJ3942-[Usaco2015 Feb] Censoring

    [题目大意] 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程.输出最后的S串. [思路]三 ...

  6. 用xib自定义UITableViewCell的注意事项——重用

    问题的提出: 有时候我们经常需要自定义tableView的cell,当cell里面的布局较为复杂时往往舍弃纯代码的方式而改用xib的方式进行自定义.当我们用纯代码的方式布局cell时,往往会在cell ...

  7. Manthan, Codefest 16 B. A Trivial Problem 二分 数学

    B. A Trivial Problem 题目连接: http://www.codeforces.com/contest/633/problem/B Description Mr. Santa ask ...

  8. <摘录>GCC 中文手

    GCC 中文手册 作者:徐明 GCC Section: GNU Tools (1) Updated: 2003/12/05 Index Return to Main Contents -------- ...

  9. 让你的WPF程序在Win7下呈现Win8风格主题

    今天在Win8下使用了一个我之前写的一个WPF程序的时候,发现现在也支持Win8效果了(记得以前的.net 4.0的版本是不支持的).由于WPF的控件是自绘的,并不受系统主题所控制,也就是说.net ...

  10. nio selector

    为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道.事实上,可以只用一个线程处理所有的通道.对于操作系统来说,线程之间上下文切换的开销很大,而且每 ...