php mysql 网站建设,新媒体运营公司排行榜,seo杭州,实现网站"今天访问量昨天访问量"统计插件 for dedecms本文主要介绍怎么去创建基于FMS的流媒体播放程序#xff0c;Flash客户端通过网络加载FMS服务器上的视频流文件(.flv,.mp4等)#xff0c;实现视频流的播放。 要实现媒体流文件的播放是非常简单的#xff0c;只要在FMS服务器上提供好流媒体文件#xff0c;Flash客户端通过Net… 本文主要介绍怎么去创建基于FMS的流媒体播放程序Flash客户端通过网络加载FMS服务器上的视频流文件(.flv,.mp4等)实现视频流的播放。 要实现媒体流文件的播放是非常简单的只要在FMS服务器上提供好流媒体文件Flash客户端通过NetConnection连接到FMS服务器然后通过NetStream加载就OK。关于怎么连接FMS在本系列的前两篇已有详细介绍首先得在fms上建立好服务器应用并部署好媒体文件如下图示 下面是在Flash中开发的流媒体文件播放示例程序 1 import flash.display.*; 2 import flash.events.*; 3 import flash.net.*; 4 5 var nc:NetConnection new NetConnection(); 6 var ns:NetStream; 7 var video:Video; 8 9 nc.connect(rtmp://localhost/PlayStreams); 10 nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); 11 12 function onStatusHandler(evt:NetStatusEvent):void 13 { 14 trace(evt.info.code); 15 if(evt.info.codeNetConnection.Connect.Success) 16 { 17 nsnew NetStream(nc); 18 ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); 19 ns.clientnew CustomClient(); 20 videonew Video(); 21 video.attachNetStream(ns); 22 ns.play(2009031301,0); 23 addChild(video); 24 } 25 } 看看上面的程序代码是不是非常简单现在我对上面的代码进行详细的分析。程序从上到下思路很清晰首先将程序中需要的相关包导入然后定义了连接对象(NetConnection)流对象(NetStream)和视频对象(Video)。 通过NetConnection的connect方法连接到fms服务器(rtmp://localhost/PlayStreams)并添加网络连接的事件处理函数在此函数内判断网络连接状态如果连接成功(连接状态NetConnection.Connect.Success)则通过NetStream建立视频流调用NetStream的play方法播放指定的流媒体文件然后将流附加到视频对象并显示在flash界面上。如下图示 OK我们已经实现了流媒体文件的播放下面我们来扩展程序的功能为前面的视频播放程序加上播放、暂停、停止以及重新播放等功能。这时可以在界面上放置几个按扭来驱动这些功能添加按扭代码如下(当然也可以直接拖拽Botton组件): 1 var btnPlay:Buttonnew Button(); 2 btnPlay.x10; 3 btnPlay.y250; 4 btnPlay.width50; 5 btnPlay.label播放; 6 btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler); 7 addChild(btnPlay); 8 9 var btnPause:Buttonnew Button(); 10 btnPause.x80; 11 btnPause.y250; 12 btnPause.width50; 13 btnPause.label暂停; 14 btnPause.addEventListener(MouseEvent.CLICK,onPauseHandler); 15 addChild(btnPause); 16 17 var btnStop:Buttonnew Button(); 18 btnStop.x150; 19 btnStop.y250; 20 btnStop.width50; 21 btnStop.label停止; 22 btnStop.addEventListener(MouseEvent.CLICK,onStopHandler); 23 addChild(btnStop); 24 25 var btnReplay:Buttonnew Button(); 26 btnReplay.x220; 27 btnReplay.y250; 28 btnReplay.width80; 29 btnReplay.label重新播放; 30 btnReplay.addEventListener(MouseEvent.CLICK,onReplayHandler); 31 addChild(btnReplay); 32 33 function onPlayHandler(evt:MouseEvent):void 34 {} 35 36 function onPauseHandler(evt:MouseEvent):void 37 {} 38 39 function onStopHandler(evt:MouseEvent):void 40 {} 41 42 function onReplayHandler(evt:MouseEvent):void 43 {} 这里我们需要对上面的代码进行一下重构将流和控制视频播放的代码重构为方法以便在重新播放的时候直接调用。 1 function playStream():void 2 { 3 nsnew NetStream(nc); 4 ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); 5 ns.clientnew CustomClient(); 6 videonew Video(); 7 video.attachNetStream(ns); 8 ns.play(2009031302,0); 9 addChild(video); 10 } 上面我们已经将控制视频播放、暂停、停止和重新播放的按扭构造在了flash界面上现在只需要完成这些按扭的功能就是要实现视频的播放、暂停、停止和重新播放同样是非常简单的NetStream为我们提供了可直接调用的API。详细如下 1 function onPlayHandler(evt:MouseEvent):void 2 { 3 ns.resume(); 4 } 5 6 function onPauseHandler(evt:MouseEvent):void 7 { 8 ns.pause(); 9 } 10 11 function onStopHandler(evt:MouseEvent):void 12 { 13 ns.close(); 14 } 15 16 function onReplayHandler(evt:MouseEvent):void 17 { 18 ns.close(); 19 playStream(); 20 } 一切搞定 可以按下CtrlEnter测试了看到了flash已经成功的加载到了fms上的视频文件(.flv)。打开FMS管理控制台就会看到在应用PlayStreams下有一个NetStream的连接代表当前应用有一个网络流正在传输如下图 完整示例代码 1import flash.display.*; 2import flash.events.*; 3import flash.net.*; 4import fl.controls.*; 5 6var nc:NetConnection new NetConnection(); 7var ns:NetStream; 8var video:Video; 910var btnPlay:Buttonnew Button(); 11btnPlay.x10; 12btnPlay.y250; 13btnPlay.width50; 14btnPlay.label播放; 15btnPlay.addEventListener(MouseEvent.CLICK,onPlayHandler); 16addChild(btnPlay); 1718var btnPause:Buttonnew Button(); 19btnPause.x80; 20btnPause.y250; 21btnPause.width50; 22btnPause.label暂停; 23btnPause.addEventListener(MouseEvent.CLICK,onPauseHandler); 24addChild(btnPause); 2526var btnStop:Buttonnew Button(); 27btnStop.x150; 28btnStop.y250; 29btnStop.width50; 30btnStop.label停止; 31btnStop.addEventListener(MouseEvent.CLICK,onStopHandler); 32addChild(btnStop); 3334var btnReplay:Buttonnew Button(); 35btnReplay.x220; 36btnReplay.y250; 37btnReplay.width80; 38btnReplay.label重新播放; 39btnReplay.addEventListener(MouseEvent.CLICK,onReplayHandler); 40addChild(btnReplay); 4142nc.connect(rtmp://192.168.1.103/PlayStreams); 43nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); 4445function onStatusHandler(evt:NetStatusEvent):void 46{ 47 trace(evt.info.code); 48 if(evt.info.codeNetConnection.Connect.Success) 49{ 50 playStream(); 51 } 52} 5354function playStream():void 55{ 56 nsnew NetStream(nc); 57 ns.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler); 58 ns.clientnew CustomClient(); 59 videonew Video(); 60 video.attachNetStream(ns); 61 ns.play(2009031302,0); 62 addChild(video); 63} 6465function onPlayHandler(evt:MouseEvent):void 66{ 67 ns.resume(); 68} 6970function onPauseHandler(evt:MouseEvent):void 71{ 72 ns.pause(); 73} 7475function onStopHandler(evt:MouseEvent):void 76{ 77 ns.close(); 78} 7980function onReplayHandler(evt:MouseEvent):void 81{ 82 ns.close(); 83 playStream(); 84} 8586 如果在Flex环境下开发更方便实现详细本文就不做介绍了核心代码和Flash里开发是一样的。 转自http://www.cnblogs.com/beniao/archive/2009/03/14/1410969.html 转载于:https://www.cnblogs.com/AndySong/archive/2009/05/17/1458596.html