Red5搭建直播平台

Red5搭建直播平台Red5搭建直播平台

大家好,又见面了,我是你们的朋友全栈君。

下载地址 http://www.red5.org/

1, 首先启动red5

2,访问http://localhost:5080/

3,在该页面点击installer,进入安装页面。或输入http://localhost:5080/installer/

4,安装oflaDemo

5,可能会报错,下面来解决这些基本问题。

5.1,重新编译Application.java

package org.red5.demos.oflaDemo;  
  
import org.red5.logging.Red5LoggerFactory;  
import org.red5.server.adapter.ApplicationAdapter;  
import org.red5.server.api.IConnection;  
import org.red5.server.api.IScope;  
import org.red5.server.api.stream.IServerStream;  
import org.red5.server.api.stream.IStreamCapableConnection;  
import org.slf4j.Logger;  
  
public class Application extends ApplicationAdapter  
{  
  private static Logger log = Red5LoggerFactory.getLogger(Application.class, "oflaDemo");  
  private IScope appScope;  
  private IServerStream serverStream;  
  
  public Application()  
  {  
    log.info("oflaDemo created");  
    System.out.println("oflaDemo created");  
  }  
  
  public boolean appStart(IScope app)  
  {  
    log.info("oflaDemo appStart");  
    System.out.println("oflaDemo appStart");  
    this.appScope = app;  
    return true;  
  }  
  
  public boolean appConnect(IConnection conn, Object[] params)  
  {  
    log.info("oflaDemo appConnect");  
  
    measureBandwidth(conn);  
    if ((conn instanceof IStreamCapableConnection)) {  
      IStreamCapableConnection streamConn = (IStreamCapableConnection)conn;  
      /** 
      SimpleConnectionBWConfig bwConfig = new SimpleConnectionBWConfig(); 
      bwConfig.getChannelBandwidth()[3] = 1048576L; 
 
      bwConfig.getChannelInitialBurst()[3] = 131072L; 
 
      streamConn.setBandwidthConfigure(bwConfig); 
      */  
    }  
  
    return super.appConnect(conn, params);  
  }  
  
  public void appDisconnect(IConnection conn)  
  {  
    log.info("oflaDemo appDisconnect");  
    if ((this.appScope == conn.getScope()) && (this.serverStream != null)) {  
      this.serverStream.close();  
    }  
    super.appDisconnect(conn);  
  }  
}  

5.2,增加所需要的jar文件spring-aop-3.0.5.RELEASE.jaraopalliance-1.0.jar

6,重启Red5,访问路径http://localhost:5080/demos/ofla_demo.html,点击Connect,右侧变绿,出现播放列表。选择播放文件。

7,使用jwplayer,进行测试,书写代码如下

<script type="text/javascript" src="${pageContext.request.contextPath}/player/jwplayer.js"></script>  
  
<div id="myElement"  >Loading the player...</div>  
  
jwplayer("myElement").setup({  
        
        file: "rtmp://localhost/oflaDemo/9.flv",   
        height: 360,  
        image: "${pageContext.request.contextPath}/images/button.gif",  
        width: 640   
});  

正常播放则测试成功。

8,进行二次开发

8.1,先写Java类

package first;  
  
import org.red5.server.adapter.ApplicationAdapter;  
import org.red5.server.api.IConnection;  
import org.red5.server.api.IScope;  
import org.red5.server.api.stream.IServerStream;  
import org.red5.server.api.stream.IStreamCapableConnection;  
  
public class Application extends ApplicationAdapter  
{  
  private IScope appScope;  
  private IServerStream serverStream;  
  
  public Application()  
  {  
  
  }  
  
  public boolean appStart(IScope app)  
  {  
  
    this.appScope = app;  
    return true;  
  }  
  
  public boolean appConnect(IConnection conn, Object[] params)  
  {  
  
  
    measureBandwidth(conn);  
    if ((conn instanceof IStreamCapableConnection)) {  
      IStreamCapableConnection streamConn = (IStreamCapableConnection)conn;  
  
    }  
    return super.appConnect(conn, params);  
  }  
  
  public void appDisconnect(IConnection conn)  
  {  
  
    if ((this.appScope == conn.getScope()) && (this.serverStream != null)) {  
      this.serverStream.close();  
    }  
    super.appDisconnect(conn);  
  }  
}  

8.2 配置red5-web.properties,内容如下

webapp.contextPath=/red58
webapp.virtualHosts=*

8.3 配置red5-web.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:lang="http://www.springframework.org/schema/lang"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">  
  
    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="/WEB-INF/red5-web.properties" />  
    </bean>  
  
    <bean id="web.context" class="org.red5.server.Context" autowire="byType" />  
  
    <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>  
    <bean id="web.handler" class="first.Application" />  
</beans>  

8.4 配置web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>  
<web-app  
   xmlns="http://java.sun.com/xml/ns/j2ee"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
   version="2.4">  
  
    <display-name>red58</display-name>  
  
    <context-param>  
        <param-name>webAppRootKey</param-name>  
        <param-value>/red58</param-value>  
    </context-param>   
    <servlet>  
        <servlet-name>rtmpt</servlet-name>  <servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>rtmpt</servlet-name>  
        <url-pattern>/fcs/*</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>rtmpt</servlet-name>  
        <url-pattern>/open/*</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>rtmpt</servlet-name>  
        <url-pattern>/close/*</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>rtmpt</servlet-name>  
        <url-pattern>/send/*</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>rtmpt</servlet-name>  
        <url-pattern>/idle/*</url-pattern>  
    </servlet-mapping>  
  
    <security-constraint>  
        <web-resource-collection>  
            <web-resource-name>Forbidden</web-resource-name>  
            <url-pattern>/streams/*</url-pattern>  
        </web-resource-collection>  
        <auth-constraint/>  
    </security-constraint>  
  
</web-app>  
 

8.5 在WebContent\streams里放置flv等类型文件

8.6 发布文件,名称为red58

8.7,发布时,删除lib文件夹中的文件

8.8 进行测试。

<script type="text/javascript" src="${pageContext.request.contextPath}/player/jwplayer.js"></script>  
  
<div id="myElement"  >Loading the player...</div>  
  
jwplayer("myElement").setup({  
        
        file: "rtmp://localhost/red58/9.flv",   
        height: 360,  
        image: "${pageContext.request.contextPath}/images/button.gif",  
        width: 640   
});  
 

Js代码  收藏代码
jwplayer().onBeforePlay( function(event){  
            //alert("before Play");   
    });  
   jwplayer().onPlay( function(event){  
        //alert(" Play");  
    });  
   jwplayer().onSeek( function(event){  
        //alert("before Play");  
        alert("seek--position:"+event.position +"---offset :"+event.offset );  
    });   
   jwplayer().onTime( function(event){   
        //this event is fired as the playback position gets updated  
        //alert("onTime--position:"+event.position +"---duration :"+event.duration  );  
    });  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106432.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 吐血推荐:VBScript教程及语言参考电子书「建议收藏」

    吐血推荐:VBScript教程及语言参考电子书「建议收藏」经过两次练手之后,花费一天时间,通过对从迅雷上所下载所有VBScript资源的整合,鼎力制作了此本VBScript教程及语言参考书。全书资源丰富,主要包括两部分内容。第一部分是教程部分,通过此章节的学习,我们可以很轻松的掌握VBScript的基础知识。第二部分是语言参考,提供一个搜索页面,在我们使用的时候可以随时查找到自己所需要查找的函数等的…

    2022年6月25日
    32
  • IDDR和ODDR使用

    IDDR和ODDR原语是针对7系列芯片使用,spand可以使用IDDR2和ODDR2IDDR三种模式OPPOSITE_EDGEMode传统的输入DDR解决方案或OPPOSITE_EDGE模式是通过ILOGIC模块中的单个输入实现的。数据在时钟的上升沿通过输出Q1提供给FPGA逻辑,在时钟的下降沿通过输出Q2提供给FPGA逻辑。该结构类似于Virtex-6FPGA实现。图1显示…

    2022年4月7日
    121
  • IntelliJ IDEA 2022.01.13 x64 激活码(注册激活)

    (IntelliJ IDEA 2022.01.13 x64 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html2KLKA7BQFO-eyJsaWNlbnNlSWQi…

    2022年4月1日
    210
  • laravel 框架的tosql打印出来的sql未绑定参数,怎么可以打印带参数的sql?[通俗易懂]

    laravel 框架的tosql打印出来的sql未绑定参数,怎么可以打印带参数的sql?

    2022年2月17日
    33
  • noip2012借教室_noip小学组

    noip2012借教室_noip小学组这个题首先很容易想到枚举1-m,再一个一个加起来,判断一下(最直白的暴力)于是又很容易想到用差分数组可以优化一下。就像这样#include<iostream>#include<cstdio>usingnamespacestd;constintmaxn=1000005;intd[maxn],s[maxn],t[maxn],r[maxn];…

    2022年8月22日
    5
  • mysql读写分离之springboot集成

    springboot、mysql实现读写分离1、首先在springcloudconfig中配置读写数据库mysql:datasource:readSize:1#读库个数type:com.alibaba.druid.pool.DruidDataSourcewrite:url:jdbc:mysql://200…

    2022年4月9日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号