首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FluorineFx在FlashDevelop AS3项目中配置RTMP通道?

如何使用FluorineFx在FlashDevelop AS3项目中配置RTMP通道?
EN

Stack Overflow用户
提问于 2011-08-29 05:09:46
回答 2查看 1.8K关注 0票数 1

我正在尝试让一个RTMP消息传递应用程序在FlashDevelopFluorineFx中工作。我习惯于用一些黑客来连接FlexBuilder 3中的一个FlexBuilder,但我正在空白,让它与FlashDevelop一起工作。

我有一个配置文件\ website \ FluorineFx \services-config的FluorineFx网站

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<services-config>
  <services>
    <service-include file-path="remoting-config.xml" />
    <service id="message-service" class="flex.messaging.services.MessageService" messageTypes="flex.messaging.messages.AsyncMessage">

      <!-- DO NOT CHANGE <adapters> SECTION-->
      <adapters>
        <adapter-definition id="messagingAdapter" class="FluorineFx.Messaging.Services.Messaging.MessagingAdapter" default="true"/>
      </adapters>
      <destination id="chat">
        <adapter ref="messagingAdapter"/>
        <properties>
          <network>
            <session-timeout>0</session-timeout>
          </network>
        </properties>
        <channels>
          <channel ref="my-rtmp"/>
        </channels>
      </destination>

    </service>
    <!-- <service-include file-path="data-management-config.xml" /> -->
  </services>

  <!-- Custom authentication -->
  <security>
  </security>

  <channels>
    <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
      <endpoint uri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
      <properties>
        <!--<legacy-collection>true</legacy-collection> -->
      </properties>
    </channel-definition>

    <channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel">
      <endpoint uri="rtmp://{server.name}:1951" class="flex.messaging.endpoints.RTMPEndpoint"/>
    </channel-definition>
  </channels>
</services-config>

我的client.swf文件正在我的网站上的一个目录\app\chat中运行

在app\chat目录中,我有一个App.config文件:

代码语言:javascript
复制
<configuration>
    <!-- Application object. Specify a fully qualified type name for your handler -->
    <application-handler type="testfx.AppHandler"/>
    <!-- Filename generator for streams. Specify a fully qualified type name to use a custom generator-->
    <streamFilenameGenerator type="FluorineFx.Messaging.Rtmp.Stream.DefaultStreamFilenameGenerator"/>
    <consumerService type="FluorineFx.Messaging.Rtmp.Stream.ConsumerService"/>
    <providerService type="FluorineFx.Messaging.Rtmp.Stream.ProviderService"/>
    <streamService type="FluorineFx.Messaging.Rtmp.Stream.StreamService"/>
    <!-- Manages creation, retrieval and update of remote shared objects-->
    <sharedObjectService type="FluorineFx.Messaging.Rtmp.SO.SharedObjectService">
        <persistenceStore type="FluorineFx.Messaging.Rtmp.Persistence.FileStore"/>
    </sharedObjectService>
    <!-- 
  <sharedObjectSecurityService type=""/>
  -->

</configuration>

testfx.AppHandler类只有一个回显方法:

代码语言:javascript
复制
   public class AppHandler : ApplicationAdapter
    {
        public string echo(string msg)
        {
            return "Echo: " + msg;
        }
    }

我有一个带有以下FlashDevelop库的.swc项目

  • framework.swc
  • rpc.swc
  • rpc_rb.swc

main.as文件是:

代码语言:javascript
复制
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;
    import flash.net.ObjectEncoding;
    import mx.messaging.channels.*;
    import mx.messaging.Consumer;
    import mx.messaging.events.MessageEvent;
    import mx.messaging.events.MessageFaultEvent;
    import mx.messaging.Producer;

    /**
     * ...
     * @author Nathan
     */
    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var consumer:Consumer = new Consumer();
            consumer.destination = "chat";
            consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
            consumer.addEventListener(MessageFaultEvent.FAULT, faultHandler);
            consumer.subscribe();

            var producer:Producer = new Producer();         
            producer.destination = "chat";
            producer.addEventListener(MessageFaultEvent.FAULT, faultHandler);
            producer.connect();
        }

        private function faultHandler(event:MessageFaultEvent):void 
        {
            trace("fault");
        }

        private function messageHandler(event:MessageEvent):void        
        {
            trace(event.message.body);
        }

        private function onNetStatus(event:NetStatusEvent):void 
        {
            trace(event.info.code);
        }

    }

}

当我运行这个程序时,我现在得到的例外是:

错误异常,information=MessagingError message=‘目的地’聊天‘要么不存在,要么目的地没有定义通道(并且应用程序没有定义任何默认通道)。

EN

回答 2

Stack Overflow用户

发布于 2012-03-20 11:10:17

首先,如果您更改了services-config,则需要重新启动IIS或应用程序池。

其次,您是否检查了FluorineFX日志文件,以查看是否有任何错误(在FluorineFX的调试中设置级别)。在日志文件中,您还应该看到添加的目的地。看看他们之间是否有聊天。

第三,我将获得FluorineFX源代码并尝试从那里调试它。了解一下源代码总是很有用的。

FluorineFX的安装还附带了一些非常好的示例。检查它们并将它们与您的代码进行比较。也许这样你很快就会发现出了什么问题。

票数 0
EN

Stack Overflow用户

发布于 2015-05-12 12:48:33

我知道这是晚了,但FluorineFX不接受除“氟”以外的任何其他目的地。

代码语言:javascript
复制
<destination id="fluorine">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7226304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档