My Opera is closing 3rd of March

NAM GIÀ

CHÚ Ý: BLOG NAM GIÀ ĐÃ CHUYỂN SANG ĐỊA CHỈ http://namdh.wordpress.com

Silverlight - Step by Step (phần 8)

,

Silverlight cung cấp một đối tượng MediaObject cho phép bạn có thể chơi lại các file WMV và WMA, cũng như một vài loại file MP3 khác.


Thêm khả năng đa phương tiện vào trang Web

Để thêm khả năng đa phương tiện, bạn có thể dùng MediaElement và đặt thuộc tính Source của nó chỉ đến file media của bạn thông qua một URI. Bạn có thể xem ví dụ sau:


<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
  <MediaElement 
    Source="thebutterflyandthebear.wmv" Width="300" Height="300" />
</Canvas>


Like other UIElement objects, you can put drawings on top of MediaElement objects. The following example adds an Ellipse in front of the MediaElement from the previous example.
Cũng giống như các đối tượng UIElement khac, bạn có thể đặt các hình vẽ lên trên đối tượng MediaElement. Ví dụ sau sẽ thêm một hình ellipse lên trên thành phần MediaElement lấy từ ví dụ trước:


<Canvas Width="300" Height="300"
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   
  <MediaElement Source="thebutterflyandthebear.wmv" Width="300" Height="300" />
  
  <Ellipse Height="200" Width="200" Canvas.Left="30" Canvas.Top="30"
     Stroke="Black" StrokeThickness="10" Fill="SlateBlue"
     Opacity="0.6" />
</Canvas>


Một số thuộc tính của MediaElement

Ngoài các thuộc tính thừa hưởng từ MediaElement, như Opacity hay Clip, MediaElement cung cấp một số thuộc tính chuyên cho đa phương tiện(media) như sau:
- Stretch: Chỉ ra cách mà đoạn video được ép cho vừa với đối tượng MediaElement. Thuộc tính này nhận các giá trị None, Uniform, UniformToFill, và Fill. Giá trị mặc nhiên là Fill. Để có thêm thông tin, hãy xem trong bộ Silverlight SDK.
* IsMuted: Nếu đặt là true thì MediaElement sẽ không phát âm thanh, ngược lại là có.
* Volume: Đặt giá trị cho volumn, bạn có thể đặt các giá trị từ 0.0 cho đến 1.0, với 1.0 thì âm thanh sẽ phát ra lớn nhất, giá trị mặc nhiên là 0.5.

Hãy xem thêm Silverlight SDK để có thêm thông tin về các thuộc tính của MediaElement.

Kiểm soát việc chơi các tài liệu media

Bạn có thể kiểm soát việc chơi các file media bằng cách sử dụng các phương thức Play, Pause, và Stop. Ví dụ sau sẽ dùng Play, Pause, và Stop để cho phép người dùng điều khiển việc chơi lại:


<Canvas Width="300" Height="300"
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
  <MediaElement x:Name="media" 
    Source="thebutterflyandthebear.wmv" 
    Width="300" Height="300" />

      
  <Canvas MouseLeftButtonDown="media_stop" 
    Canvas.Left="10" Canvas.Top="265">
    <Rectangle Stroke="Black" 
       Height="30" Width="55" RadiusX="5" RadiusY="5">
      <Rectangle.Fill>
        <RadialGradientBrush GradientOrigin="0.75,0.25">
          <GradientStop Color="Orange" Offset="0.0" />
          <GradientStop Color="Red" Offset="1.0" />        
        </RadialGradientBrush>
      </Rectangle.Fill>       
    </Rectangle>
    <TextBlock Canvas.Left="5" Canvas.Top="5">stop</TextBlock> 
  </Canvas>
  
  
  <Canvas MouseLeftButtonDown="media_pause" 
     Canvas.Left="70" Canvas.Top="265">
    <Rectangle Stroke="Black" 
       Height="30" Width="55" RadiusX="5" RadiusY="5">
      <Rectangle.Fill>
        <RadialGradientBrush GradientOrigin="0.75,0.25">
          <GradientStop Color="Yellow" Offset="0.0" />
          <GradientStop Color="Orange" Offset="1.0" />        
        </RadialGradientBrush>
      </Rectangle.Fill>       
    </Rectangle>
    <TextBlock Canvas.Left="5" Canvas.Top="5">pause</TextBlock> 
  </Canvas>
  
  
  <Canvas MouseLeftButtonDown="media_begin" 
    Canvas.Left="130" Canvas.Top="265">
    <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
       Height="30" Width="55">
      <Rectangle.Fill>
        <RadialGradientBrush GradientOrigin="0.75,0.25">
          <GradientStop Color="LimeGreen" Offset="0.0" />
          <GradientStop Color="Green" Offset="1.0" />        
        </RadialGradientBrush>
      </Rectangle.Fill>
    </Rectangle>
    <TextBlock Canvas.Left="5" Canvas.Top="5">play</TextBlock> 
  </Canvas>
     
</Canvas>



function media_stop(sender, args) {
    sender.findName("media").stop();
}

function media_pause(sender, args) {
    sender.findName("media").pause();
}

function media_begin(sender, args) {
    sender.findName("media").play();
}



Dùng chế độ full-screen

Để chơi ở chế độ full-screen, đặt thuộc tính FullScreen của đối tượng Silverlight plug-in là true và điều chỉnh kích thước của MediaElement thành ActualWidth và ActualHeight mà bạn lấy từ Silverlight.
Ví dụ sau sẽ cho phép xem video ở chế độ full-screen.


<Canvas Width="300" Height="300"
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Loaded="canvas_loaded">
    
  <MediaElement x:Name="media" 
     Source="thebutterflyandthebear.wmv" 
     Width="300" Height="300" />

  <Canvas x:Name="buttonPanel">
  
        
    <Canvas MouseLeftButtonDown="media_stop" 
       Canvas.Left="10" Canvas.Top="265">
      <Rectangle Stroke="Black" 
         Height="30" Width="55" RadiusX="5" RadiusY="5">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Orange" Offset="0.0" />
            <GradientStop Color="Red" Offset="1.0" />        
          </RadialGradientBrush>
        </Rectangle.Fill>       
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">stop</TextBlock> 
    </Canvas>
  
    
    <Canvas MouseLeftButtonDown="media_pause" 
       Canvas.Left="70" Canvas.Top="265">
      <Rectangle Stroke="Black" 
         Height="30" Width="55" RadiusX="5" RadiusY="5">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Yellow" Offset="0.0" />
            <GradientStop Color="Orange" Offset="1.0" />        
          </RadialGradientBrush>
        </Rectangle.Fill>       
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">pause</TextBlock> 
    </Canvas>
  
    
    <Canvas MouseLeftButtonDown="media_begin" 
       Canvas.Left="130" Canvas.Top="265">
      <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
         Height="30" Width="55">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="LimeGreen" Offset="0.0" />
            <GradientStop Color="Green" Offset="1.0" />        
          </RadialGradientBrush>
        </Rectangle.Fill>
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">play</TextBlock> 
    </Canvas>
  
    
    <Canvas MouseLeftButtonDown="toggle_fullScreen" 
      Canvas.Left="190" Canvas.Top="265">
      <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
         Height="30" Width="85">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Gray" Offset="0.0" />
            <GradientStop Color="Black" Offset="1.0" />        
          </RadialGradientBrush>
        </Rectangle.Fill>
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5"
        Foreground="White" >full screen</TextBlock> 
    </Canvas>  
  
  </Canvas>
     
</Canvas>



function media_stop(sender, args) {

    sender.findName("media").stop();
}

function media_pause(sender, args) {
    
    sender.findName("media").pause();
}

function media_begin(sender, args) {
    
    sender.findName("media").play();
}


function canvas_loaded(sender, args)
{
  
    var plugin = sender.getHost();
    plugin.content.onfullScreenChange = onFullScreenChanged;
    

}

function toggle_fullScreen(sender, args)
{
    var silverlightPlugin = sender.getHost();
    silverlightPlugin.content.fullScreen = !silverlightPlugin.content.fullScreen;  
   
}

function onFullScreenChanged(sender, args)
{

  
    var silverlightPlugin = sender.getHost();
    var buttonPanel = sender.findName("buttonPanel");
    
    if (silverlightPlugin.content.fullScreen == true)
    {
      buttonPanel.opacity = 0;
    }
    else 
    {
      buttonPanel.opacity = 1;
    }
    
    var mediaPlayer = sender.findName("media");
    mediaPlayer.width = silverlightPlugin.content.actualWidth;
    mediaPlayer.height = silverlightPlugin.content.actualHeight;
     

}



Dùng bút vẽ VideoBrush

Bạn có thể dùng VideoBrush để vẽ các hình họa và văn bản bằng Video. Để dung VideoBrush, hãy theo các bước sau:

1. Tạo một đối tượng VideoBrush.
2. Tạo một MediaElement và đặt tên cho nó (đặt giá trị cho thuộc tính Name). Đối tượng MediaElement được dùng để xử lý dữ liệu video cho VideoBrush. Trừ khi bạn muốn nhìn thấy 2 bản video cùng lúc, không thì phải đặt thuộc tính Opacity của đối tượng MediaElement là 0.0. Nếu không muốn đoạn video phát ra tiếng thì bạn đặt giá trị cho thuộc tính IsMuted của MediaElement là true.
3. Đặt thuộc tính SourceName của VideoBrush là tên của MediaElement mà bạn đã tạo.

Ví dụ sau sẽ dùng VideoBrush để vẽ nền cho một TextBlock.


<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
  <MediaElement x:Name="myMediaElement" 
    Source="thebutterflyandthebear.wmv" 
    Width="300" Height="300"
    Opacity="0" IsMuted="True" />  
  
  <TextBlock Canvas.Left="10" Canvas.Top="10"
    FontFamily="Verdana"
    FontSize="80" FontWeight="Bold">Watch<LineBreak/>This
    <TextBlock.Foreground>
      <VideoBrush SourceName="myMediaElement" />
    </TextBlock.Foreground>
  </TextBlock>
  
</Canvas>



Việc ngừng, tạm dừng hoặc chơi MediaElement cũng ảnh hưởng đến đối tượng VideoBrush dùng nó, nhưng thay đổi kích thước hoặc độ trong suốt thì không. Một đối tượng MediaElement cũng có thể được dùng như nguồn của nhiều đối tượng VideoBrush khác nhau.

Bấm vào tag SILVERLIGHT-STEP BY STEP để xem tất cả các bài trong phần hướng dẫn Silverlight

Silverlight - Step by Step (phần 7)Microsoft phát hành Silverlight 1.1 Tools Alpha for Visual Studio 2008

Comments

Unregistered user Saturday, April 26, 2008 5:12:11 AM

borrin87 writes: Em up mp3 thì đc,nhưng file wmv bị báo lỗi "AG_E_INVALID_FILE_FORMAT",nó bị lỗi gì dzay?và fải sửa sao? Thanks

Unregistered user Saturday, April 26, 2008 7:36:54 AM

borrin87 writes: Em sửa đc lỗi format rui,nhưng khi full sreen đoạn video ko giãn ra hết màn hình?? Mong anh chỉ giúp

Unregistered user Wednesday, June 18, 2008 9:40:51 AM

nodieboy writes: Chào anh Nam Già Không biết MediaElement trong silverlight 2.0 Beta 1 có thay đổi gì không mà sao em chạy đoạn code như trên nó lại không có hiển thị giao diện của media, không biết ta có cần thêm thuộc tính gì cho nó nữa không. Em chỉ mới gia nhập silverlight thôi mong anh chỉ giáo. Chúc anh một ngày tốt lành.

namdh Wednesday, June 18, 2008 3:52:00 PM

@borrin87: không giãn ra hết màn hình, cụ thể là thế nào hả em ?

namdh Wednesday, June 18, 2008 3:54:30 PM

@nodieboy: Hiện đã có bản Beta2 của Silverlight, em thử lại xem, về cơ bản thì đoạn code trên vẫn có thể chạy với Silverlight 2 đấy nhỉ, em xem lại thử.

Unregistered user Monday, June 23, 2008 4:02:06 AM

nodieboy writes: hi borrin87 Tức là mình gõ đoạn code, sau đó chạy thử thì không thấy xuất hiện cái gì trên web browser hết :D, thế mới khổ chứ, đây là đoạn code đơn giản của mình, bạn xem giùm mình nhá. <UserControl x:Class="MediaElement.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Canvas Width="600" Height="600" Background="White"> <MediaElement Source="xbox.wmv" Height="300" Width="300"></MediaElement> </Canvas> </UserControl> Chúc các bạn một ngày vui vẻ :D

Unregistered user Monday, June 23, 2008 4:16:55 AM

nodieboy writes: à trong thẻ <MediaElement> thêm 2 thuộc tính này nữa chứ Canvas.Left="100" Canvas.Top="100" Các bác xem dùm em zới. Em đang cần gấp :D à mà em cũng cài bản beta 2 vào lun rùi, nhưng vẫn thế. Một lần nữa chúc các bác 1 ngày vui vẻ :D
February 2014
M T W T F S S
January 2014March 2014
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28