Flex+Red5实现在线视频播放

 Flex3中对流媒体的支持不是很好,但是Flex4 却对rtmp协议有了很好的支持,能够自动识别rtmp协议,经本人认证确实如此,连接rtmp协议几乎不用多些什么代码,当然支持的视频当然是Flv格式啦。好了,请看本人的代码:

--->点击阅读更多    

  1. <?xmlversionxmlversion="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.               xmlns:s="library://ns.adobe.com/flex/spark"  
  4.               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" >  
  5.     <fx:Script>  
  6.        <![CDATA[ 
  7.            import mx.collections.ArrayCollection; 
  8.            import mx.controls.Alert; 
  9.            import mx.controls.dataGridClasses.DataGridItemRenderer; 
  10.            import mx.events.FlexEvent; 
  11.            private var conn:NetConnection; 
  12.            private var stream:NetStream; 
  13.            [Bindable] 
  14.            private var fileUrl:String="";   //歌曲链接地址 
  15.            [Bindable] 
  16.            private varsongList:ArrayCollection=new ArrayCollection([ 
  17.               {showName:'恋上另一个人',songer:'游鸿明',filmName:'chirsyu_lslygr.flv'}, 
  18.               {showName:'一天一万年',songer:'游鸿明',filmName:'chirisyu_ytywn.flv'}, 
  19.               {showName:'下沙',songer:'游鸿明',filmName:'chirisyu_xs.flv'}, 
  20.               {showName:'五月的雪',songer:'游鸿明',filmName:'chirisyu_wydx.flv'}, 
  21.               {showName:'楼下那个女人',songer:'游鸿明',filmName:'chirisyu_lxngnr.flv'}, 
  22.               {showName:'白色恋人',songer:'游鸿明',filmName:'chirisyu_bslr.flv'} 
  23.             ]); 
  24.            
  25.            private function netStatusHandler(event:NetStatusEvent):void{ 
  26.               switch(event.info.code) 
  27.               { 
  28.                   case "NetConnection.Connect.Success": 
  29.                   { 
  30.                      connectStream(); 
  31.                      break; 
  32.                   } 
  33.                   case "NetStream.Play.StreamNotFound":{ 
  34.                      Alert.show("文件不存在!","提示"); 
  35.                      break; 
  36.                   }   
  37.                   
  38.               } 
  39.            } 
  40.            private function connectStream():void{ 
  41.               stream=new NetStream(conn); 
  42.               stream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); 
  43.               stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandler); 
  44.               var video:Video=new Video();  //定义一个播放器 
  45.               video.width=300; 
  46.               video.height=335; 
  47.               video.attachNetStream(stream); 
  48.               stream.play(fileUrl); 
  49.               videoDisplay.addChild(video); 
  50.            } 
  51.            private function securityErrorHandler(event:SecurityErrorEvent):void{ 
  52.            } 
  53.            private function asyncErrorHandler(event:AsyncErrorEvent):void{ 
  54.            } 
  55.            
  56.            protected function showList_clickHandler(event:MouseEvent):void 
  57.            {             
  58.               // TODOAuto-generated method stub 
  59.               var dataGridItemRenderer:DataGridItemRenderer=event.target asDataGridItemRenderer; 
  60.               fileUrl=event.target.data['filmName']; 
  61.               if(dataGridItemRenderer!=null){ 
  62.                   //需要捕获此异常,否则程序无法运行 
  63.                   try{ 
  64.                      if(conn.connected){ 
  65.                          conn.close(); 
  66.                      } 
  67.                   }catch(e:Error){} 
  68.                   conn=new NetConnection; 
  69.                   conn.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); 
  70.                   conn.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); 
  71.                   conn.connect("rtmp://localhost/oflaDemo");    //连接Red5服务器 
  72.                   
  73.               } 
  74.            } 
  75.            
  76.        ]]>  
  77.     </fx:Script>  
  78.     <fx:Declarations>  
  79.        <!-- Place non-visualelements (e.g., services, value objects) here -->  
  80.     </fx:Declarations>  
  81.      
  82.     <mx:HDividedBox x="194" y="68" width="750" height="430" fontSize="16"  fontWeight="bold">  
  83.         
  84.        <s:Panel height="421" width="50%" title="MV列表" >  
  85.            <mx:DataGrid width="100%" height="100%" dataProvider="{songList}" id="showList"click="showList_clickHandler(event)">  
  86.               <mx:columns>  
  87.                   <mx:DataGridColumn headerText="歌曲名" dataField="showName" width="250"/>  
  88.                   <mx:DataGridColumn headerText="演唱者" dataField="songer" />  
  89.                   <mx:DataGridColumn headerText="链接地址" dataField="filmName" visible="false" />  
  90.               </mx:columns>  
  91.            </mx:DataGrid>  
  92.        </s:Panel>  
  93.        <s:Panel width="350" height="419" title="MV预览">  
  94.            <s:VideoDisplay id="videoDisplay" x="20" y="20" width="100%" height="100%"/>  
  95.        </s:Panel>  
  96.     </mx:HDividedBox>  
  97.      
  98. </s:Application>  
  99.    


 

      部分注释详见代码中,点击左侧的MV名,即可在右侧播放,献上一幅图:

   



--->点击阅读更多    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值