文档章节

利用FluorineFx实现RTMP协议应用开发

vimfung
 vimfung
发布于 2016/06/26 21:55
字数 1269
阅读 152
收藏 0
点赞 0
评论 0

今天研究了一下FluorineFx下如何实现rtmp协议的应用开发,从网上找了一些文章和资料,照着做发现是碰到了不少问题。不过到最后还是被我解决了,因此写下这篇文章一来怕自己以后给忘了,二来让其他遇到同样问题的朋友们提供一个参考。

其实要实现rtmp协议很简单,先来说说服务器端的操作步骤,首先使用Visual Studio创建一个新项目FluorineFxASP.NET网站(本人使用的是VS2010,顺便说一下FluorineFx在VS2010下没有项目模板,不过网上有人自己制作了一个项目模板,前提是你要先安装FluorineFx然后再安装他的模板即可制作FluorineFx相关应用了。需要的朋友可以到这里下载:http://www.dotblogs.com.tw/ouch1978/archive/2010/11/11/fluorinefxtemplate.aspx?fid=22774)。然后再添加一个FluorineFxServiceLibrary项目。如下图所示:

    然后再FlashRemotingServiceLibrary中添加一个作为实现rtmp协议的应用类MyRtmpApp.cs。如同:

    这里要注意的是,MyRtmpApp类需要继承FluorineFx.Messaging.Adapter.ApplicationAdapter否则无法正常运行。然后为MyRtmpApp类写上客户端连接事件处理,代码如下:

publicoverridebool AppConnect(FluorineFx.Messaging.Api.IConnection connection, object[]parameters)

{

    return true;

}

    这里只是作为演示,因此不需要作任何验证用户身份的处理,直接返回true则表示接受客户端连接。完成这一步后,接下来就是更改服务器端配置的工作了,打开网站中的WEB-INF/flex/services-config.xml配置文件。在channels节点下添加多一个channel-definition节点用于开启rtmp协议处理功能(事实上配置文件中已存在此配置只是将其注释掉了,只要把注释符去掉即可)。配置完成后的配置文件内容如下图:

       记住上面配置的rtmp端口2037,因为在客户端连接时需要指定到该端口才能访问到应用(如果你的2037端口被其他应用占用可以设置到其他端口上)。接下来在网站下添加文件夹apps,在apps中再添加文件夹MyRtmpApp(此文件夹的名称最好和你定义的应用类名称相同),最后在MyRtmpApp文件夹中添加配置文件app.config,文件内容如下图所示:

    这里要注意的是app.config配置文件中的application-handler节点中的type属性一定准确地填上刚才创建的应用类的全限定名称(包含名称空间)。否则可能导致无法正常运行。

    服务端的工作就暂且告一段落了,先来写一个客户端的程序来访问一下看能够正常连接。客户端的代码如下所示(我使用的是FlexBuilder4.5作为开发环境):

var request:URLRequest = new URLRequest("http://localhost/Gateway.aspx");

var loader:URLLoader = new URLLoader(request);

loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);

 

private function loaderCompleteHandler(event:Event):void{

  var connect:NetConnection()=new NetConnection();

  connect.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

  connect.connect("rtmp://localhost:2037/MyRtmpApp","");

  connect.client=this;

}

private function netStatusHandler(event:NetStatusEvent):void{

  trace(event.info);

}

    整段代码中最值得注意的是我是先调用了站点的Gateway.aspx页面等待成功后再进行MyRtmpApp的应用连接的。为什么这样做呢?网上的资料都没有说到这个问题,之前由于我没有调用这个页面导致我一直连接失败,在偶然的一次调试中发现连接成功,后来在IIS上经过多次的验证发现如果站点处未激活状态下(也就是说w3wp这个进程没有启动的时候)直接进行应用的连接请求是会导致连接失败的。这也说明了.net环境下的rtmp需要依靠IIS中的进程服务来维持(不像FMS那样专门有一个服务来处理)。连接成功后会在event的info属性中返回。Info的属性列表如下图:


    既然连接成功,接下来就可以与服务器端进行通讯了,为了让大家可以了解更加透彻,我会从客户端连接成功后调用服务器端的一个名叫Say的方法,然后服务器端在这个方法里面调用客户端的一个receiveContent的方法来让客户端收到自己发送的消息。把上面的客户端代码改了一下,如下所示:

varrequest:URLRequest=newURLRequest("http://localhost/Gateway.aspx");

varloader:URLLoader=newURLLoader(request);

loader.addEventListener(Event.COMPLETE,loaderCompleteHandler);

 

private function loaderCompleteHandler(event:Event):void{

   var connect:NetConnection = new NetConnection();

   connect.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

   connect.connect("rtmp://localhost:2037/MyRtmpApp","");

   connect.client=this;

}

 

private function netStatusHandler(event:NetStatusEvent):void{

    var connect:NetConnection = event.target as NetConnection;

   trace(event.info);

   if(event.info.code == "NetConnection.Connect.Success"){

       //调用服务端方法

       connect.call("Say",connect as flash.net.Responder,"Hello world!");

   }

}

 

public function receiveContent(content:String):void{

    trace("receive :"+content);

}

服务器端代码如下:

publicvoid Say(string content)

{

  IServiceCapableConnection connection = FluorineContext.Current.Connection as IServiceCapableConnection;

  if(connection != null)

  {

     connection.Invoke("receiveContent", newobject[]{content}, this);

  }

}

 

public void ResultReceived(IPendingServiceCall call)

{

}

    服务器端的MyRtmpApp需要实现IpendingServiceCallback接口,此接口用于监听客户端方法返回委托ResultReceived。

    在FB中测试,可以看到控制台中输出receive :Hello world!字符串。那就证明测试成功了。

© 著作权归作者所有

共有 人打赏支持
vimfung

vimfung

粉丝 58
博文 59
码字总数 85338
作品 4
广州
技术主管
如何实现微信小程序与Native App多人连麦直播?

微信在去年年底开放了小程序直播接口。小程序从仅适用于阅读、生活服务、工具等应用的流量入口,成为了许多音视频应用的又一个新平台。新功能的开放让更多应用可以利用微信的熟人社交链为应用...

Agora ⋅ 04/18 ⋅ 0

【腾讯Bugly干货分享】H5 视频直播那些事

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员...

腾讯Bugly ⋅ 2016/08/12 ⋅ 0

[总结]RTMP流媒体技术零基础学习方法

本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验。也为后来学习RTMP流媒体技术的人们一个参考。本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化...

leixiaohua1020 ⋅ 2013/11/18 ⋅ 0

【腾讯bugly干货分享】HTML 5 视频直播一站式扫盲

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1277 视频直播这么火,再不学就 out 了。 为了紧跟潮流,本文将...

腾讯Bugly ⋅ 2016/07/04 ⋅ 4

Adobe 公开 RTMP 协议规范

Adobe宣布开放RTMP协议,这对于全球期待开发高质量的音频和视频交互应用的公司而言,简直就是一大福音。而以前那些通过hack来了解rtmp通 许方式的产品,今后也不用那么辛苦了。RTMP协议的开放...

红薯 ⋅ 2009/01/22 ⋅ 0

Red5源码研究一

RED5和APACHE MINA Red5采用的网络编程框架是Apache Mina。所以源码研究的思路可以有: 1) 从Mina的角度进行请求处理流的研究。 2) 从Red5整体管理角度进行Red5的应用框架研究。 3) 从一些核...

mickelfeng ⋅ 2013/11/15 ⋅ 0

分享一下一款直播App开发的过程

听说有人声称开发一款直播App不仅耗时还非常昂贵,今天跟大家说道一下,开发一款直播App到底分几步走? 第一步:分解直播App的功能,我们以X客为例 1. 视频直播功能,这是一款直播App最主要的...

duduo丶 ⋅ 2016/07/27 ⋅ 0

HTTP协议/RTSP协议/RTMP协议的区别

https://www.cnblogs.com/gongyuhonglou/p/5605320.html RTMP有累积延迟 HTTP协议/RTSP协议/RTMP协议的区别 RTSP、 RTMP、HTTP的共同点、区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层。...

nimeghbia ⋅ 01/16 ⋅ 0

小程序直播连麦的技术实现与解析

微信在去年年底开放了小程序直播接口。小程序从仅适用于阅读、生活服务、工具等应用的流量入口,成为了许多音视频应用的又一个新平台。新功能的开放让更多应用可以利用微信的熟人社交链为应用...

Agora ⋅ 04/25 ⋅ 0

推流 直播  点播

推流 直播 点播 RTMP(Real Time Messaging Protocol)常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播,点播,聊天等应用,以及PC,移动,嵌入式等平台,是做流媒体开发经常...

水一样的人儿 ⋅ 2016/07/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 19分钟前 ⋅ 0

从零手写 IOC容器

概述 IOC (Inversion of Control) 控制反转。熟悉Spring的应该都知道。那么具体是怎么实现的呢?下面我们通过一个例子说明。 1. Component注解定义 package cn.com.qunar.annotation;impo...

轨迹_ ⋅ 19分钟前 ⋅ 0

系统健康检查利器-Spring Boot-Actuator

前言 实例由于出现故障、部署或自动缩放的情况,会进行持续启动、重新启动或停止操作。它可能导致它们暂时或永久不可用。为避免问题,您的负载均衡器应该从路由中跳过不健康的实例,因为它们...

harries ⋅ 21分钟前 ⋅ 0

手把手教你搭建vue-cli脚手架-详细步骤图文解析[vue入门]

写在前面: 使用 vue-cli 可以快速创建 vue 项目,vue-cli很好用,但是在最初搭建环境安装vue-cli及相关内容的时候,对一些人来说是很头疼的一件事情,本人在搭建vue-cli的项目环境的时候也是...

韦姣敏 ⋅ 31分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 45分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 今天 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 今天 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 今天 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 今天 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部