WPF - XDL Tutorial

XDL VideoView È°¿ë µÎ¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 

NXVideoView¸¦ È°¿ëÇÏ¿© µ¿¿µ»ó Ç÷¹À̾ ±¸ÇöÇØ º¾´Ï´Ù.

±âº»ÀûÀÎ µ¿¿µ»ó Ç÷¹ÀÌ¾î ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù.

 

 

2019. 04.

 

 

¸ñÂ÷

XDL VideoView È°¿ë µÎ¹ø°... 1

1    »ç¿ëÇϱâ... 3

1.1    NXVideoView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â... 3

1.2    Driverº¹»çÇϱâ... 4

1.3    ¸Þ´º »ý¼ºÇϱâ... 5

1.4    NXVideoViewÄÁÆ®·Ñ ¿Ã¸®±â... 6

1.5    µ¿¿µ»ó ¿­±â ±â´É... 6

 

 

 

 

1     »ç¿ëÇϱâ

 

1.1    NXVideoView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â

1.1.1     Visual Studio 2015À» ½ÇÇàÇÑ´Ù.

1.1.2     ¸Þ´º [ÆÄÀÏ]-[»õ·Î ¸¸µé±â]-[ÇÁ·ÎÁ§Æ®]¸¦ ¼±ÅÃÇÑ´Ù.

1.1.3     [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚ¿¡¼­ ¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼­ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ­»óÀÚ Áß°£ÀÇ ¸ñ·Ï¿¡¼­ ¡°WPF ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù.

»ç¿ëÀÚ°¡ ¿øÇÏ´Â °æ·Î¸¦ ¼±ÅÃÇÑ ´ÙÀ½ ÇÁ·ÎÁ§Æ® À̸§À» ¡°XDL_VideoView2¡± À¸·Î ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù. ÀÌ ¹®¼­¿¡¼­´Â ´ëÈ­»óÀÚ ¿À¸¥ÂÊ ¾Æ·¡¿¡ ÀÖ´Â ¡°¼Ö·ç¼Ç¿ë µð·ºÅ͸® ¸¸µé±â¡±´Â ¼±ÅÃÇÏÁö ¾Ê°Ú´Ù. ¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í, È­¸é¿¡ WindowÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ´Â È­¸éÀÌ ¶á´Ù. ¸¸¾à ¾Æ·¡¿Í °°Àº Window âÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼­ MainWindow.xaml¡±¸¦ ¸¶¿ì½º ´õºíŬ¸¯À» ÇÏ¿© âÀ» ¿¬´Ù.

 

1.1.4     ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]ÀÇ ¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ÅëÇØ [ÂüÁ¶Ãß°¡]¸¦ ¼±ÅÃÇÑ´Ù.

 

 

1.1.5     [ã¾Æº¸±â]ÅÇÀ¸·Î À̵¿ÇÑ ÈÄ ¡°C:\Pixoneer\XDL1.2\bin\¡±°æ·Î·Î À̵¿ÇÑ´Ù. CtrlÅ°¸¦ ´©¸¥ ä ¡°NXDL.dll¡±, ¡°NXDLgr.dll¡±, ¡°NXDLsm.dll¡±, ¡°NXVideo.dll¡±À» ¼±ÅÃÇÑ ÈÄ ¡°È®ÀΡ±¹öÆ°À» ¼±ÅÃÇÑ´Ù.

 

1.1.6  ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]Ç׿¡ NXDL, LXDLgr, NXDLsm, NXVideo°¡ Ãß°¡µÇ¾úÀ½À» È®ÀÎÇÑ´Ù

1.1.7     NXVideo¸¦ È°¿ëÇϱâ À§ÇØ MainWindow.xaml â¿¡¼­ namespace¸¦ ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÑ´Ù.

 

1.2    Driverº¹»çÇϱâ

Driver´Â ÇöÀç µ¥¸ð ¹öÀü¿¡¼­´Â ¼³Ä¡µÈ °æ·Î·ÎºÎÅÍ ½ÇÇà °æ·Î ÇϺηΠÁ÷Á¢ º¹»çÇÏ¿© ³Ö¾î¾ß ÇÑ´Ù. Â÷±â ¹öÀüÀº º¹»ç¸¦ ÇÏÁö ¾Ê¾Æµµ ½ÇÇàµÉ ¼ö ÀÖµµ·Ï ±¸¼ºµÈ´Ù.

 

1.2.1     XDL ¶óÀ̺귯¸®°¡ ¼³Ä¡µÈ °æ·Î(C:\Pixoneer\XDL1.2\bin)·Î À̵¿ÇÑ´Ù.

 

1.2.2     VDDriversÆú´õ¸¦ Åë°·Î º¹»çÇÏ¿© ÇöÀç ÇÁ·ÎÁ§Æ®ÀÇ ¡°¡¦..\XDL_VideoView2\bin\Debug¡±Æú´õ ÇϺο¡ º¹»çÇÏ¿© ³Ö´Â´Ù.

1.2.3     F5Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°ÀÌ ±¸¼ºµÈ´Ù.

 

 

1.3    ¸Þ´º »ý¼ºÇϱâ

1.3.1      MainWindow.xamlâ¿¡¼­ ±âº»À¸·Î »ý¼ºµÈ Grid ·¹À̾ƿô¿¡ Grid.RowDefinitionÀ» ÀÌ¿ëÇÏ¿© ¼¼ °³ÀÇ RowÀ» »ý¼ºÇÑ´Ù. Menu¸¦ ù ¹ø° Cell¿¡ ¹èÄ¡ÇÏ°í MenuItem Ç׸ñÀ» Ãß°¡ÇÏ¿© [File]°ú [Open]À» »ý¼ºÇÑ´Ù. (ÀÚ¼¼ÇÑ ¸Þ´º »ý¼º¿¡ ´ëÇÑ ¼³¸íÀº XDL VideoView1 TutorialÀ» Âü°íÇÑ´Ù.)

 

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="40"/>
        </Grid.RowDefinitions>

        <Menu Grid.Row="0">
            <MenuItem Header="_FIle" Margin="5,5,4,5">
                <MenuItem x:Name="openFileMenuItem" Header="_Open"/>
            </MenuItem>
        </Menu>
</Grid>

 

 

 ¾Æ·¡ÀÇ Ç¥¸¦ Âü°íÇÏ¿© ¸Þ´º¸¦ »ý¼ºÇÑ´Ù.

 

Control Type

Header

Name

MenuItem

_File

 

MenuItem

_Open

openFileMenuItem

 

 

1.4    PlayerÄÁÆ®·Ñ »ý¼ºÇϱâ

1.4.1     µ¿¿µ»ó Ç÷¹À̾ À§ÇØ ¡°Play¡±, ¡°Pause¡±, ¡°Stop¡±±â´É°ú ÁøÇà·üÀ» Ç¥½ÃÇÏ´Â ½ºÅ©·Ñ ±â´ÉÀ» ±¸ÇöÇÑ´Ù. ¼¼ ¹ø° RowÀÇ Grid¿¡ ¹èÄ¡ÇÏ°í ÀÌ Grid¸¦ ³× °³ÀÇ ColumnÀ¸·Î ³ª´©¾î °¢°¢¿¡ ¸Â´Â ±â´ÉÀ» ¹èÄ¡ÇÑ´Ù. Â÷·Ê´ë·Î (1) ¿¡´Â ¡°Play¡± ¹öÆ°, (2) ¿¡´Â ¡°Pause¡± ¹öÆ°, (3) ¡°Stop¡± ¹öÆ°ÀÌ ¹èÄ¡µÉ °ÍÀÌ´Ù.

 

 

»ùÇÃÄڵ忡¼­ À̹ÌÁö¸¦ ´Ù¿î ¹Þ¾Æ [¼Ó¼º] â¿¡ ¡°ºê·¯½Ã¡± ¼Ó¼ºÀ» ÅëÇØ ¾Ë¸ÂÀº °ø°£¿¡ ¹èÄ¡ÇÑ´Ù. ÀÛ¾÷À» ¿Ï·áÇÏ¸é ¾Æ·¡¿Í °°Àº µðÀÚÀÎÀ» ¾òÀ» ¼ö ÀÖ´Ù. (ÀÚ¼¼ÇÑ ¼³¸íÀº »ùÇÃÄڵ带 Âü°íÇÑ´Ù.)

 

 

1.5    NXVideoViewÄÁÆ®·Ñ Ãß°¡Çϱâ

1.5.1     Grid ·¹À̾ƿô ³»ºÎ¿¡¼­ µÎ ¹ø° Cell¿¡ Grid¸¦ ¹èÄ¡ÇÏ°í WindowsFormsHost ÄÁÆ®·ÑÀ» µµ±¸»óÀڷκÎÅÍ ²ø¾î¼­ »ý¼ºÇϰųª XAML â¿¡ ÀÔ·ÂÇÏ¿© »ý¼ºÇÑ´Ù. ÀÌ´Â Window forms¸¦ Hosting ÇØÁÖ´Â °³Ã¼À̸ç Window Forms ControlÀ» »ç¿ëÇÒ ¶§ ÀÌ¿ëµÈ´Ù. (WindowFormIntegration¿Í System.Window.FormsÀ» ¾î¼Àºí¸®¿¡ ´ëÇÑ ÂüÁ¶ Ãß°¡¸¦ ÇÑ´Ù.)

1.5.2     ¾Õ¼­ Ãß°¡ÇÑ namespaceÀÎ nxVideo¸¦ ÀÌ¿ëÇÏ¿© NXVideoViewÄÁÆ®·ÑÀ» ºÒ·¯¿Â´Ù. ÀÌ NXVideoViewÀÇ À̸§(Name)Àº nxVideoView1À¸·Î ÇÑ´Ù. ¶ÇÇÑ NXVideoOverlayÄÁÆ®·ÑÀ» NXVideoView ÄÁÆ®·Ñ À§¿¡ ¿Ã·Á³õ±â À§ÇØ ºÒ·¯¿À´Â ÀÛ¾÷À» ÇÑ´Ù. XNVideoOverlayÀÇ À̸§(Name)Àº nxVideoLayerOverlay1À̶ó°í ÇÑ´Ù.

 

<Grid Grid.Row="1">
       <WindowsFormsHost Grid.Column="0" Margin="3,0,3,3">
             <nxVideo:NXVideoView x:Name="nxVideoView1">
                 <nxVideo:NXVideoView.Controls>
                   <nxVideo:NXVideoLayerOverlay x:Name="nxVideoLayerOverlay1"/>
                 </nxVideo:NXVideoView.Controls>
             </nxVideo:NXVideoView>
        </WindowsFormsHost>
</Grid>

 

1.5.3     [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ¾Æ·¡¿Í °°ÀÌ NXVideoViewÄÁÆ®·ÑÀÌ Á¸ÀçÇÏ´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÈ´Ù.

 

 

1.6    µ¿¿µ»ó ¿­±â ±â´É ±¸Çö

1.6.1     Windowâ¿¡¼­ MenuÀÇ [File]-[Open]À» ´õºí Ŭ¸¯ÇÏ¿© ÇÔ¼ö¸¦ ÀÚµ¿ »ý¼ºÇÑ´Ù.

private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{

}

 

1.6.2     NXVideo°´Ã¼µéÀ» »ç¿ëÇϱâ À§Çؼ­ ´ÙÀ½°ú °°ÀÌ NXDL, NXVideo ³×ÀÓ½ºÆäÀ̽º¸¦ Ãß°¡ÇÑ´Ù.

using Pixoneer.NXDL;
using Pixoneer.NXDL.NXVideo;

 

1.6.3     NXVideoView±¸Çö½Ã ÇÊ¿äÇÑ XVideoIO, XVideo, XVideoChannel°´Ã¼¸¦ ¼±¾ðÇÑ´Ù.

public partial class MainWindow : Window
{
    enum VideoAction { STOP, PLAYING, PAUSED }
    struct VideoState
    {
       public XVideo video;            // ÆÄÀÏÀ̳ª ³×Æ®¿öÅ©·ÎºÎÅÍ ÀԷµǴ 
// ½ºÆ®¸®¹Öµ¥ÀÌÅ͸¦ Á¦¾îÇÏ´Â ±â´ÉÀ» ¼öÇàÇÒ °´Ã¼ ¼±¾ð
       public XVideoChannel videoChannel;  // µ¿¿µ»ó °³Ã¼¿¡ Æ÷ÇÔµÈ Ã¤³Î °´Ã¼ ¼±¾ð
       public string videoFilePath;        // µ¿¿µ»ó ÆÄÀÏ °æ·Î
       public VideoAction action;          // ºñµð¿À Ç÷¹ÀÌ »óŸ¦ Á¤ÀÇÇÏ´Â °´Ã¼ ¼±¾ð 

     }
     private XVideoIO m_videoIO = null;
     private VideoState VS;                 // ºñµð¿À »óŸ¦ °ü¸®ÇÏ´Â °´Ã¼ ¼±¾ð

 

1.6.4     Winodow¿¡ XVideoIOÀÇ °´Ã¼ »ý¼º ¹× VideoState¿¡ ´ëÇÑ ÃʱâÈ­¸¦ ¼öÇàÇÑ´Ù. ¶ÇÇÑ ÇÁ·Î±×·¥ Á¾·á½Ã, ¸Þ¸ð¸® °ü¸® µîÀ» À§ÇØ NXVideoViewÄÁÆ®·ÑÀÇ ÃʱâÈ­¸¦ ¼öÇàÇÑ´Ù.

public MainWindow()
{
       InitializeComponent();
       m_videoIO = new XVideoIO();  // VideoIO¸¦ »ý¼º

       VideoInit();
       nxVideoLayerOverlay1.LayerVisible = true;

}

private void VideoInit()
{
       // VideoStateÀÇ ÃʱâÈ­
       VS.video = null;
       VS.videoChannel = null;
       VS.videoFilePath = string.Empty;
       VS.action = VideoAction.STOP;
}

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
        // µ¿¿µ»ó ä³Î Á¤º¸ ÃʱâÈ­
        nxVideoView1.ResetVideoChannel();

        if (VS.video != null)
        {
            // µ¿¿µ»ó °´Ã¼ Close
            VS.video.Close();
            VS.video = null;
         }

         if (m_videoIO != null)
         {
            // µ¿¿µ»ó ÀÔÃâ·Â °´Ã¼ Dispose
            m_videoIO.Dispose();
         }
}

 

1.6.5     [File]-[Open]À» ´­·¶À» ¶§ »ý¼ºµÉ Open ´ëÈ­»óÀÚ¿Í ¼±ÅÃµÈ ÆÄÀÏ¿¡ ´ëÇÑ XVideo°´Ã¼¸¦ »ý¼ºÇÑ´Ù. ¶ÇÇÑ, XVideo°´Ã¼¿¡ ½ÇÁ¦ ½ºÆ®¸®¹ÖÀ» ´ã´çÇÏ´Â XVideoChannel°´Ã¼¸¦ È°¼ºÈ­(Activate) ½ÃÄÑ FrameÀ» ³»ºÎÀûÀ¸·Î »ý¼ºÇϵµ·Ï Áö½ÃÇÑ´Ù.

private void openFileMenuItem_Click(object sender, RoutedEventArgs e)
{
      // »õ·Î¿î ÆÄÀÏ OpenÀ» ¼öÇàÇÑ´Ù.
      OpenFileDialog openFileDialog = new OpenFileDialog();
      openFileDialog.Filter = "TS file(*ts)|*.ts||";
      openFileDialog.RestoreDirectory = true;

Nullable<bool> result = openFileDialog.ShowDialog();
      if (result != true) return;

      string videoPath = openFileDialog.FileName;

      // µ¿¿µ»ó ÆÄÀÏÀÇ Á¸Àç À¯¹« üũ
      if (System.IO.File.Exists(videoPath) == false)
      {
          MessageBox.Show(this, "ÇØ´ç °æ·Î¿¡ ¿µ»óÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿À·ù");
          return;
       }

      // ÆÄÀÏ °æ·Î¸¦ ÀúÀåÇÑ´Ù.
      VS.videoFilePath = videoPath;

      // µ¿¿µ»óÀÇ Àç»ý»óÅ°¡ ÁßÁö°¡ ¾Æ´Ò °æ¿ì µ¿¿µ»ó Àç»ý ÁßÁö
      OnStop();

      // µ¿¿µ»ó ½ºÆ®¸®¹Ö ȯ°æÀ» »ý¼º½ÃŲ´Ù.
      OnOpen();

      // µ¿¿µ»óÀ» Play ½ÃŲ´Ù.
      OnPlay();
}

 

1.6.6     OnOpenÇÔ¼ö¿¡ µ¿¿µ»óÀ» Àç»ýÇϱâ À§Çؼ­ VS.videoFilePath¿¡ ¼³Á¤µÈ ÆÄÀÏ °æ·Î¸¦ ÅëÇÏ¿© NXVideoViewÄÁÆ®·ÑÀ» XVideoChannel·Î ÃʱâÈ­ ½ÃŲ´Ù.

// µ¿¿µ»ó ÆÄÀÏ ¿­±â
public void OnOpen()
{
    try
   {
    string strError = null;
    // µ¿¿µ»ó ½ºÆ®¸² Á¤º¸ °¡Á®¿À±â
    VS.video = m_videoIO.OpenFile(VS.videoFilePath, "XFFMPDRIVER", out strError);

        if (VS.video == null)
        {
           MessageBox.Show(this, "µ¿¿µ»ó Àç»ý¿¡ ½ÇÆÐÇϼ̽À´Ï´Ù. ÆÄÀÏÀ» È®ÀÎÇØÁֽʽÿÀ.", "ÆÄÀÏ ¿­±â");
           return;
         }

    // ´ÙÁß Ã¤³ÎÀ» °¡Áø µ¿¿µ»ó °´Ã¼ÀÇ Channel À妽º
    int nIdxChannel = 0;

    // µ¿¿µ»ó ºä¿¡ Àç»ýÇÒ µ¿¿µ»ó ä³ÎÀÇ ¼³Á¤
    nxVideoView1.SetVideoChannel(VS.video, nIdxChannel);

    // ÀÔ·Â À妽º¿¡ ÇØ´çÇÏ´Â Channel °¡Á®¿À±â
    VS.videoChannel = VS.video.GetChannel(nIdxChannel);

    // GetChannel¿¡ ½ÇÆÐÇÒ °æ¿ì Null °´Ã¼°¡ returnµÇ¸ç, ±×¿¡ ´ëÇÑ ¿¹¿Üó¸®
    if (VS.videoChannel == null)
    {
           MessageBox.Show(this, "µ¿¿µ»ó Àç»ý¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. ÆÄÀÏÀ» È®ÀÎÇØ ÁֽʽÿÀ.", "ÆÄÀÏ ¿­±â");
           return;
     }

      // µ¿¿µ»ó °´Ã¼¿¡ Æ÷ÇÔµÈ Channel °´Ã¼ Áß ÇØ´ç Channel °´Ã¼¸¦ È°¼ºÈ­
      //È°¼ºÈ­µÈ °´Ã¼¸¸ ½ºÆ®¸®¹ÖÀÌ ¼öÇà
      VS.videoChannel.Activate();

}

     catch (Exception ex)
     {
        Console.WriteLine(ex);
        MessageBox.Show(this, "Àç»ý ½ÇÆÐ!", "µ¿¿µ»ó");
        VS.action = VideoAction.STOP;
     }
}

 

1.6.7     µ¿¿µ»óÀ» Àç»ý½ÃÅ°µµ·Ï Áö½ÃÇÏ´Â OnPlay, PlayµÇ°í ÀÖ´Â µµÁß¿¡ ºñµð¿À¸¦ ¸ØÃß°í ÃʱâÈ­ ½ÃÅ°´Â OnStop, PlayµÇ°í ÀÖ´Â µµÁß¿¡ ÁßÁö½ÃÅ°´Â OnPauseÇÔ¼ö¸¦ ±¸ÇöÇÑ´Ù.

private void OnPlay()
{
      if (VS.action == VideoAction.PAUSED)  // µ¿¿µ»óÀÌ ÁßÁö »óÅ°¡ ¾Æ´Ò°æ¿ì
      {
         VS.videoChannel.Resume();        // µ¿¿µ»ó ä³Î Resume
         VS.action = VideoAction.PLAYING;
      }
      else if (VS.action == VideoAction.STOP) // µ¿¿µ»óÀÌ ÁßÁö »óÅÂÀÏ °æ¿ì
      {
         // µ¿¿µ»ó ChannelÀ» óÀ½ºÎÅÍ Àç»ýÇÏ´Ù·Ï Play ½ÅÈ£ ¼³Á¤
         VS.videoChannel.Play();
         VS.action = VideoAction.PLAYING;
      }
}

private void OnPause()
{
      if (VS.action == VideoAction.PLAYING)
      {
         VS.videoChannel.Pause();         // µ¿¿µ»ó ä³Î Pause
         VS.action = VideoAction.PAUSED;
      }

 }

private void OnStop()
{
      if (VS.videoChannel != null)
      {
          // Àç»ý Frame Buffer¸¦ »èÁ¦
          VS.videoChannel.ClearFrameBuffer();
          // µ¿¿µ»ó Àç»ý ½ºÅ©¸°À» °»½ÅÇÑ´Ù.
nxVideoView1.RefreshScreen();
          // µ¿¿µ»ó Àç»ý ÁßÁö
          VS.videoChannel.Stop();
      }

      // µ¿¿µ»ó ä³Î Á¤º¸ ÃʱâÈ­
      nxVideoView1.ResetVideoChannel();

      if (VS.video != null)
      {
           // µ¿¿µ»ó °´Ã¼ Close
           VS.video.Close();
           VS.video = null;
      }

      VS.action = VideoAction.STOP;
}

 

1.6.8     Window â¿¡ ÀÖ´Â [¢º], [¡«], [¡á]À» ´­·¶À» ¶§ ¼öÇàµÇ´Â ±â´ÉÀ» ±¸ÇöÇÑ´Ù. [¢º], [¡«], [¡á] ¹öÆ°ÀÇ [¼Ó¼º]â¿¡¼­ Ŭ¸¯ À̺¥Æ®¸¦ »ý¼ºÇÑ´Ù.

private void playButton_Click(object sender, RoutedEventArgs e)
{
      // ºñµð¿À°¡ StopÀÎ »óÅÂÀÎ °æ¿ì ´Ù½Ã ºñµð¿À¸¦ ÀúÀåµÈ ÆÄÀÏ °æ·Î·ÎºÎÅÍ OpenÇؼ­ ¼³Á¤ÇÑ´Ù.
      if (VS.action == VideoAction.STOP)
      {
           OnOpen();

       }

       // ¼³Á¤µÈ ºñµð¿À¸¦ Play ÇÑ´Ù.
       OnPlay();
}

private void pauseButton_Click(object sender, RoutedEventArgs e)
{
       // Play µÇ°í ÀÖ´Â ºñµð¿À¸¦ Pause ½ÃŲ´Ù.
       OnPause();
}

private void stopButton_Click(object sender, RoutedEventArgs e)
{
       // Play µÇ°í ÀÖ´Â ºñµð¿À¸¦ Stop ½ÃŲ´Ù.
       OnStop();
}

 

1.6.9      [F5]Å°¸¦ ´­·¯ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ȨÆäÀÌÁö¿¡¼­ »ùÇÿµ»óÀ» ´Ù¿î·Îµå ÇÑ´Ù. [File]-[Open]¸Þ´º¸¦ ´­·¯ stream.tsÆÄÀÏÀ» ¿¬´Ù. [¢º], [¡«], [¡á] ¹öÆ°À» ´­·¯ ±â´ÉÀ» È®ÀÎÇÑ´Ù.