2013-07-04 17 views
7

Chcę odtworzyć film taki jak ten facet, który zrobił [link].Odtwarzaj wideo bez użycia odtwarzacza multimedialnego [WinForm]

Pracuję nad aplikacją C# Windows Form (nie NXA). Ale nie wiem jak. Próbowałem używać Microsoft.DirectX.AudioVideoPlayback, ale bez powodzenia.

To, co starałem dotąd:

OpenFileDialog rihanna = new OpenFileDialog(); 
if(rihanna.ShowDialog() == DialogResult.OK) 
{ 
    video = new Video(rihanna.FileName); 
    video.Owner = panel1;  
    video.Stop();  
} 

co teraz mogę zrobić? Próbowałem używać klasy wideo, ale jak już powiedziałem, po prostu nie działało. Mogę się skompilować, ale kiedy uruchamiam program, nie widzę okna formularza.

Odpowiedz

0

Okey nazw jest jasne:

using Microsoft.DirectX.AudioVideoPlayback; 

Niektóre zmienne globalne w formie:

Video vdo; 
public string mode="play"; 
public string PlayingPosition, Duration; 

a teraz w swojej przycisk lub, co jeszcze otwarty:

OpenFileDialog openFileDialog = new OpenFileDialog(); 
openFileDialog.ShowDialog(); 
openFileDialog1.Title = "Select video file.."; 
openFileDialog1.InitialDirectory = Application.StartupPath; 
openFileDialog1.DefaultExt = ".avi"; 
openFileDialog.Filter = "Media Files|*.mpg;*.avi;*.wma;*.mov;*.wav;*.mp2;*.mp3|All Files|*.*"; 
vdo = new Video(openFileDialog.FileName); 

vdo.Owner = panel1; 
panel1.Width = 700; 
panel1.Height = 390; 
Duration = CalculateTime(vdo.Duration); 
PlayingPosition = "0:00:00"; 
txtStatus.Text = PlayingPosition + "/" + Duration; 

vdoTrackBar.Minimum = 0; 
vdoTrackBar.Maximum = Convert.ToInt32(vdo.Duration); 

aw niektórych inny kod przycisku do rozpoczęcia/wstrzymania:

if (vdo.Playing) 
{ 
    vdo.Pause(); 
    btnPlay.Text= "Play"; 
} 
else 
{ 
    vdo.Play(); 
    btnPlay.Text= "Pause"; 
} 

BTW: Nie nazwać zmienne/członków lub coś innego w kodzie po dziewczyn ...

jeśli nie jesteś pewien, jak go nazwać, jest tutaj kilka Guidelines.

Celem jest zapewnienie spójnego zestawu nazewnictwa konwencje, że wyniki w nazwach natychmiastowe poczucie do deweloperzy.

+3

Nie użyła nazw zmiennych po dziewczynkach, grała w wideo i prawdopodobnie miała stały plik ze ścieżką wideo, stała nazywała się "rihanna.FileName", więc domyślam się mówi, że to jest wideo Rihany (jeśli nie wiesz, Rihana jest piosenkarką, więc to prawdopodobnie film wideo lub coś takiego.) –

5
using Microsoft.DirectX.AudioVideoPlayback; 

namespace Play_Video 
{ 

public partial class Form1 : Form 
{ 
    Video vdo; 

    public string mode="play"; 
    public string PlayingPosition, Duration; 
    public Form1() 
    { 
     InitializeComponent(); 
     VolumeTrackBar.Value = 4; 
    } 



    private void timer1_Tick(object sender, EventArgs e) 
    { 

     PlayingPosition = CalculateTime(vdo.CurrentPosition); 
     txtStatus.Text = PlayingPosition + "/" + Duration; 

     if (vdo.CurrentPosition >= vdo.Duration) 
     { 
      timer1.Stop(); 
      Duration = CalculateTime(vdo.Duration); 
      PlayingPosition = "0:00:00"; 
      txtStatus.Text = PlayingPosition + "/" + Duration; 
      vdo.Stop(); 
      btnPlay.BackgroundImage = Play_Video.Properties.Resources.btnplay; 
      vdoTrackBar.Value = 0; 
     } 
     else 
      vdoTrackBar.Value += 1; 

    } 

    private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (vdo != null) 
     { 
      vdo.Stop(); 
      timer1.Stop(); 
      btnPlay.BackgroundImage = Play_Video.Properties.Resources.btnplay; 
      vdoTrackBar.Value = 0; 

     } 
     OpenFileDialog openFileDialog = new OpenFileDialog(); 
     openFileDialog.ShowDialog(); 
     openFileDialog1.Title = "Select video file.."; 
     openFileDialog1.InitialDirectory = Application.StartupPath; 
     openFileDialog1.DefaultExt = ".avi"; 
     openFileDialog.Filter = "Media Files|*.mpg;*.avi;*.wma;*.mov;*.wav;*.mp2;*.mp3|All Files|*.*"; 
     if (openFileDialog1.FileName != "") 
     { 
      Form1.ActiveForm.Text = openFileDialog.FileName + " - Anand Media Player"; 
      vdo = new Video(openFileDialog.FileName); 

      vdo.Owner = panel1; 
      panel1.Width = 700; 
      panel1.Height = 390; 
      Duration = CalculateTime(vdo.Duration); 
      PlayingPosition = "0:00:00"; 
      txtStatus.Text = PlayingPosition + "/" + Duration; 

      vdoTrackBar.Minimum = 0; 
      vdoTrackBar.Maximum = Convert.ToInt32(vdo.Duration); 
     } 
    } 

    private void btnPlay_Click(object sender, EventArgs e) 
    { 

     if (vdo != null) 
     { 
      if (vdo.Playing) 
      { 
       vdo.Pause(); 
       timer1.Stop(); 
       btnPlay.BackgroundImage = Play_Video.Properties.Resources.btnplay; 
      } 
      else 
      { 
       vdo.Play(); 
       timer1.Start(); 

       btnPlay.BackgroundImage = Play_Video.Properties.Resources.pause; 
      } 
     } 

    } 

    private void btnStop_Click(object sender, EventArgs e) 
    { 
     vdo.Stop(); 
     timer1.Stop(); 
     btnPlay.BackgroundImage = Play_Video.Properties.Resources.btnplay; 
     vdoTrackBar.Value = 0; 
    } 

    public string CalculateTime(double Time) 
    { 
     string mm, ss, CalculatedTime; 
     int h, m, s, T; 

     Time = Math.Round(Time); 
     T = Convert.ToInt32(Time); 

     h = (T/3600); 
     T = T % 3600; 
     m = (T/60); 
     s = T % 60; 

     if (m < 10) 
      mm = string.Format("0{0}", m); 
     else 
      mm = m.ToString(); 
     if (s < 10) 
      ss = string.Format("0{0}", s); 
     else 
      ss = s.ToString(); 

     CalculatedTime = string.Format("{0}:{1}:{2}", h, mm, ss); 

     return CalculatedTime; 
    } 

    private void VolumeTrackBar_Scroll(object sender, EventArgs e) 
    { 
     if (vdo != null) 
     { 
      vdo.Audio.Volume = CalculateVolume(); 
     } 
    } 
    public int CalculateVolume() 
    { 
     switch (VolumeTrackBar.Value) 
     { 
      case 1: 
       return -1500; 
      case 2: 
       return -1000; 
      case 3: 
       return -700; 
      case 4: 
       return -600; 
      case 5: 
       return -500; 
      case 6: 
       return -400; 
      case 7: 
       return -300; 
      case 8: 
       return -200; 
      case 9: 
       return -100; 
      case 10: 
       return 0; 
      default: 
       return -10000; 
     } 
    } 

    private void openFileDialog1_FileOk(object sender, CancelEventArgs e) 
    { 
     Duration = CalculateTime(vdo.Duration); 
     PlayingPosition = "0:00:00"; 
     txtStatus.Text = PlayingPosition + "/" + Duration; 
    } 

    private void vdoTrackBar_Scroll(object sender, EventArgs e) 
    { 
     if (vdo != null) 
     { 
      vdo.CurrentPosition = vdoTrackBar.Value; 
     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     MaximizeBox = false; 
    } 

    private void exitToolItem_Click(object sender,EventArgs e) 
    { 
     Application.Exit(); 
    } 
} 
} 
+0

Skąd wziąć 'Microsoft.DirectX'? –

+0

Microsoft.DirectX jest abondendą wraz z XNA. Ostatnie studio Visual, które obsługuje to rok 2010, jeśli się nie mylę – YoniXw

0

Dla AudioVideoPlayback do pracy, trzeba dodać odwołanie AudioVideoPlayback, odnosząc> Add Reference> Ludzie> C:> Windows> Microsoft.Net> DirectX dla kodu zarządzanego> 1.0.2902.0> Microsoft.DirectX.AudioVideoPlayback.dll

Powiązane problemy