一个silverlight播放器的DEMO(Expression Encoder 2)

一个silverlight播放器的DEMO(Expression Encoder 2),第1张

概述  在写完" Silverlight中鼠标事件的js开发 "一文之后,我就想写一篇真正应用这种事件处理方式的进行实际开发的例子。 后来在网上看到了 这篇文章 (实际应用链接:http://www.thejamesbondmovies.com/ ),发现里面的DEMO正好是 我想演示的。如下:      因为这个DEMO的演示用到了Expression Encoder, 而相关下载链接, 请点击这里   在写完" Silverlight中鼠标事件的js开发 "一文之后,我就想写一篇真正应用这种事件处理方式的进行实际开发的例子。
后来在网上看到了 这篇文章 (实际应用链接:http://www.thejamesbondmovIEs.com/ ),发现里面的DEMO正好是
我想演示的。如下:


     因为这个DEMO的演示用到了Expression Encoder,而相关下载链接,请点击这里。     

     原文中的老外因为不满足于Expression Encoder所提供的模板代码,他认为在媒体列表中应该实现点播的效果。而
不仅仅是“一味”的顺序播放。因此他在Expression Encoder代码生成的基础上,对Xaml和Js文件都做了相应改动。下面
我们来看一下他所开发的主要流程。


     首先使用Expression Encoder来创建一个项目,并将其模板设置为"Expression" (因为本人不喜欢这个模板,所以
在DEMO中使用了"Executive"模板),然后单击import按钮来选择要播放的视频文件。如下图所示。最后单击“Encode
进行编码转换(当转换成功后会启动一个测试页面进行演示,“PrevIEw In brower”需勾选)。



     这样我们就可以在“Directory”设置项中下找到我们所生成的所有项目文件了。

    因为模板文件生成的XAML中不带播放列表,所以要修改XAML文件中
Canvas 的高度,并将下面的XAML代码(播入列表代码)
放在该文件的结尾处:

<!--  PlayList region starts here  -->
 Navigation Arrows   < Path  x:name ="leftArrow"  Opacity ="0.74"  WIDth ="38"  Height  Stretch ="Fill"  stroke ="#FF000000"
Canvas.left
="11"  Canvas.top ="514"  Data ="M37.5,0.5 L37.5,37.5 0.5,37.5 z"  Fill ="#FFFFFFFF"
RendertransformOrigin
="0.5,0.5"  Cursor ="Hand" >
    
Path.Rendertransform
        
transformGroup
            
Scaletransform  ScaleX ="1"  ScaleY ="1" /> Skewtransform  AngleX ="0"  AngleY ="0" Rotatetransform  Angle ="134.119" Translatetransform  X  Y </ Path ="RightArrow" ="588" ="314.365"

 The outer canvas here is clipped: only the area defined by the rectangle geometry is visible    This is necessary as when we animate the 'library' canvas insIDe it we do not want to see the
thumbnails slIDe under the navigation arrows and off the screen
Canvas  ="ClippedCanvas" ="491"  Canvas.left ="43" ="550" ="90"
Background
="Silver" Canvas.Clip RectangleGeometry  Rect ="0, 0, 550, 114"
   
    
 Animations to move the playList left and right. They are numbered so that we can call them
logically from code 
Canvas.Resources Storyboard  ="Moveleft01" DoubleAnimation  Storyboard.TargetProperty ="(Canvas.left)"  Storyboard.Targetname ="library"
                                  From ="13"  To ="-613"  Duration ="0:0:2"   Storyboard ="MoveRight02"  The library Canvas groups the playList buttons into a single element that can be easily animated
left - right.  
       
    
WIDth ="1157.275" ="82.96"  x:name ="library" ="550.275" ="playList1" Image  ="play0" ="133.275"  Source ="1.png" Stretch ="Hand" ="play1" ="2.png" ="139" ="play2" ="3.png" ="278" ="play3" ="4.png" ="417" Canvas ="playList2" ="607" ="play4" ="5.png" ="play5" ="6.png" ="play6" ="7.png" ="play7" ="8.png" >
   
    下面就要改一下相应的Js文件了,找到StartPlayer.Js文件,新的播入列表方法放在页面的最上面:

// 全局变量声明 var  curPos  = 1 当前播入的媒体文件在列表中的位置  maxPos  2 当前的分页数,因为是8个文件,每4个文件为1页,所以这里是两页  cVIDeos  8 视频文件个数(本DEMO中有8个) function  get_mediainfo(mediainfoIndex) {
    
switch  (mediainfoIndex) {       

        
case 0 :
            
return   {  " mediaSource MovIE1.wmv ,
                      
placeholderSource "" chapters : [] };                                                               

        
MovIE2.wmv MovIE3.wmv 3 MovIE4.wmv 4 MovIE5.wmv 5 Movie6.wmv 6 Movie7.wmv 7 Movie8.wmv : [] };                                                               
                         
        
default :
             
throw  Error.invalIDOperation( No such mediainfo );
     }
}

   将原码中的原有播放文件列表变量和相关内容注释:

    this._playList=[];
//
    try {         eval( 'this._playList=['+         '{"mediaSource":"15_mt_l2s_callingsqlfunctions.wmv",'+         '"placeholderSource":"",0)">        '"chapters":'+             '['+             ']},0)">        '{"mediaSource":"18_mt_l2s_transactions.wmv",0)">            ']}'+         '];' );     }     catch(e){}     this._galleryItems=[];         eval( 'this._galleryItems=['+         'new ExpressionPlayer.galleryItem("15_mt_l2s_callingsqlfunctions.wmv",""),0)">        'new ExpressionPlayer.galleryItem("18_mt_l2s_transactions.wmv","")'+     this._player.set_galleryInfo( this._galleryItems, Function.createDelegate(this, this._onClickgalleryItem) );      this._onPlayNextVIDeo(null,null);  

      将下列代码放在该注释下方来解决对相应媒体播放按钮进行事件绑定:

wire up the rollover and click events for each of our play buttons        this .Plugin   document.getElementByID( ._hostname);

for  (  i  ; i  <  cVIDeos; i ++ )
{
    
 element  .Plugin.Content.findname( ' play +  i);
    element.addEventListener(
MouseEnter ._rollover));
    element.addEventListener(
MouseLeave ._rollOut));
    element.addEventListener(
MouseleftbuttonUp ._playX));
}

leftArrow ).addEventListener(                                   Function.createDelegate( ._rollover));
._rollOut));
._slIDeleft));
RightArrow ._slIDeRight));

._onPlayNextVIDeo( null );   


    而下面就是其相应的事件处理代码了:

 

 _rollover:  (sender, eventArgs) {
    sender.opacity
;
 },
 
  _rollOut: 
0.74       X   Number(sender.name.substring( ));
    
._currentMediainfo   X;
    
._player.set_mediainfo( get_mediainfo( X ));
    sender.opacity
       (curPos)
      {
          
:
              sender.findname(
).opacity  0.85 ;
              
break ;
          
MoveRight0  curPos).Begin();
              curPos
-- ;  
      }
 }, 
 
 _slIDeRight: 
(curPos)
      {              
          
 maxPos:
              sender.findname(

            
;               
          
:
            sender.findname(
Moveleft0 ;
              sender.findname(
;     
      }
 }


     因为使用了新的播放列表变量,所以原来生成的如下方法内容会被改写如下:
 

_onPlayPrevIoUsVIDeo:  if ._currentMediainfo > )      
    {
        
._player.set_mediainfo(get_mediainfo( ._currentMediainfo ));   
    }  
},

_onPlayNextVIDeo: 
cVIDeos)      
    {
        
._currentMediainfo ));   
    }
},
 

     到这里我们可以在本地运行一下default.htm来看一下效果。

     然后为了演示方便,我将这个Application上传到了Silverlight Streaming
上,经常了n遍的上传之后,终于测试
成功,所以才在本文开头做了相应的演示。

    好了,今天的内容就先到这里了.

    源码下载,请点击这里:)

    注:因为老外所写的文章是在silverlight 1.0下运行的,所以本文的Js与原文中有所变动,但不会影响对代码的理解
总结

以上是内存溢出为你收集整理的一个silverlight播放器的DEMO(Expression Encoder 2)全部内容,希望文章能够帮你解决一个silverlight播放器的DEMO(Expression Encoder 2)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1053797.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存