在不使用媒体播放器[Winform]的情况下播放视频

本文关键字:情况下 播放 视频 Winform 媒体播放器 | 更新日期: 2023-09-27 18:21:09

我想像那个家伙那样播放视频[link]。

我正在开发C#Windows窗体应用程序(而不是NXA)。但我不知道怎么做。我试过使用Microsoft.DirectX.AudioVideoPlayback,但没有成功。

这就是我迄今为止所尝试的:

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

现在我该怎么办?我试着使用视频课堂,但正如我所说的,它根本不起作用。我可以编译,但当我运行程序时,我看不到窗体窗口。

在不使用媒体播放器[Winform]的情况下播放视频

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();
    }
}
}

Okey命名空间是明确的:

using Microsoft.DirectX.AudioVideoPlayback;

形式中的一些全局变量:

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

现在在你的按钮或打开其他什么:

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);

在其他一些启动/暂停按钮代码中:

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

顺便说一句:不要以女孩命名代码中的变量/成员或其他东西。。。

如果你不确定如何命名,这里有一些指南。

目标是提供一组一致的命名产生有直接意义的名称的约定开发人员。

要使AudioVideoPlayback正常工作,您需要添加AudioVideoPlay引用,使用"引用">"添加引用">《浏览》>"C:''>Windows>Microsoft.Net>DirectX For managed code">1.0.2902.0>Microsoft.DirectX.AudioVideoPlayback.dll