Прямая трансляция Red5 с использованием Air на клиент IOS

#air #flash-cs5 #red5

#air #flash-cs5 #red5

Вопрос:

Привет, у меня запущен сервер приложений Red5 и сетевое подключение с использованием Air для IOS для подключения к серверу приложений Red5.

Но проблема в том, что я получаю ошибку типа:

2014-07-01 04:43:04,475 [NioProcessor-6] ОШИБКА операционной системы server.service.ServiceInvoker — Метод добавляет что-то с параметрами [2, 3], не найденными в org.red5.server.CoreHandler@ebf5a1

Я понимаю, что по какой-то причине метод не вызывается, но могу понять, почему, кто-нибудь может помочь, пожалуйста?

код

СЕРВЕРНАЯ ЧАСТЬ

    package com;


    import java.util.HashMap;


    import org.red5.server.adapter.ApplicationAdapter;
    import org.red5.server.api.IConnection;
    import org.red5.server.api.Red5;
    import org.red5.server.api.scope.IScope;
    import org.red5.server.api.service.*;

    import static java.lang.System.*;

     import java.util.Stack;

     public class Application extends ApplicationAdapter{
    //private static final Log log = LogFactory.getLog( Application.class );


    public boolean appStart(IScope scope){
        out.println("Adding: ");
        return true;
    }

    public void appStop(){
        out.println("Adding: ");
        // This function fires when the app is closing
    }


    public double addSomething(double a, double b){
        // This is a method we will call from our flash client
    out.println("Adding: " a "   " b);
    return a b;
    }

    public boolean connect(IConnection conn, IScope scope, Object[] params) {
            // This is the master connection method called every time someone connects
            // to the server.

        out.println("Adding: ");
        //ServiceUtils.invokeOnAllConnections(scope, "joinuser", null);     
        return true;
    }
    /*
     * (non-Javadoc)
     * @see org.red5.server.adapter.ApplicationAdapter#disconnect(org.red5.server.api.IConnection, org.red5.server.api.IScope)
     * disconnect an user form the chat and notify all others users 
     */
    public void disconnect(IConnection conn, IScope scope) {
            // Function called every time someone disconnects from the server.


        //ServiceUtils.invokeOnAllConnections(scope, "removeuser",null );
        super.disconnect(conn, scope);

    }   


    }


CLIENT
------

                  import flash.display.Sprite;
     import flash.display.MovieClip;
     import flash.events.NetStatusEvent;
     import flash.net.NetConnection;
     import flash.net.NetStream;
     import flash.media.Camera;
     import flash.media.Microphone;
    import flash.media.Video;
     import flash.net.Responder;

         var nc:NetConnection;
         var good:Boolean;
         var netOut:NetStream;
         var netIn:NetStream;
         var cam:Camera;
         var mic:Microphone;
         var responder:Responder;
     var r:Responder;
         var vidOut:Video;
         var vidIn:Video;
         var outStream:String;
         var inStream:String;


             trace("hello");
             var rtmpNow:String="rtmp://localhost/Test1";
             nc=new NetConnection;
             nc.client = this;
             nc.connect(rtmpNow,"trik");
             nc.addEventListener(NetStatusEvent.NET_STATUS,getStream);


         function getStream(e:NetStatusEvent):void
        {
             good=e.info.code == "NetConnection.Connect.Success";
             if(good)
             {
            trace("hello");
                  // Here we call functions in our Java Application
                   //responder=new Responder(streamNow);
           r = new Responder(adder);
           nc.call("addSomething",r,2,3);
                   //nc.call("streamer",responder,"test");
             }
        }

         function adder (obj:Object):void{
            trace("Total = ",obj.toString());
        }

         function streamNow(streamSelect:Object):void
        {
             setCam();
             setMic();
             setVid();
         trace("We've got our object",streamSelect.toString());
             switch(streamSelect.toString())
             {
                   case "left" :
                        outStream="left";
                        inStream="right";
                        break;
                   case "right" :
                        outStream="right";
                        inStream="left";
                        break;
             }

             //Publish local video
             netOut=new NetStream(nc);
             netOut.attachAudio(mic);
             netOut.attachCamera(cam);
             vidOut.attachCamera(cam);
             netOut.publish(outStream, "live");

             //Play streamed video
             netIn=new NetStream(nc);
             vidIn.attachNetStream(netIn);
             netIn.play(inStream);
        }

         function setCam():void
        {
             cam=Camera.getCamera();
             cam.setMode(240,180,15);
             cam.setQuality(0,85);
        }

         function setMic():void
        {
             mic=Microphone.getMicrophone();
             mic.rate=11;
             mic.setSilenceLevel(12,2000);
        }

         function setVid():void
        {
             vidOut=new Video(240,180);
             addChild(vidOut);
             vidOut.x=25;
             vidOut.y=110;

             vidIn=new Video(240,180);
             addChild(vidIn);
             vidIn.x=vidOut.x 260;
             vidIn.y=110;
        }


    RED5 PROPERTIES FILE
    --------------------


           webapp.contextPath=/Test1
           webapp.virtualHosts=localhost, localhost:5080


    RED5 WEB XML FILE
    -----------------

            <?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.handler" class="com.Application" />

    <bean id="web.scope" class="org.red5.server.scope.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="global.handler" />
        <property name="contextPath" value="${webapp.contextPath}" />
        <property name="virtualHosts" value="${webapp.virtualHosts}" />
    </bean>

    </beans>


    RED5 WEB XML FILE
    -----------------

                  <?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>Test1</display-name>

        <context-param>
                <param-name>webAppRootKey</param-name>
                <param-value>/Test1</param-value>
        </context-param>

    <listener>
        <listener-class>org.red5.logging.ContextLoggingListener</listener-class>
    </listener>

    <filter>
        <filter-name>LoggerContextFilter</filter-name>
        <filter-class>org.red5.logging.LoggerContextFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>LoggerContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-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>
  

Ответ №1:

Проблема в том, что «числа» не поступают на сервер в качестве ожидаемого типа «double». Для этого есть несколько решений:

  1. Измените тип параметра в вашем методе addSomething на int.
  2. Отправляйте свои параметры с клиента с десятичной запятой (2,0 против 2)

Комментарии:

1. ПРИВЕТ, спасибо за ответ, я исправил это, XML-файлы были неправильными в папке web-inf, которую я только что загрузил обновленные с github.

2. Рад, что смог помочь