不使用媒体播放器播放视频 [Winform]

2023-11-25

我想像那个人一样播放视频 [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();    
}

现在我能做什么?我尝试使用视频课程,但正如我所说,它不起作用。 我能够编译,但是当我运行程序时,我看不到表单窗口。


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();
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不使用媒体播放器播放视频 [Winform] 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • C# 条件日志记录/跟踪

    我想向我的 C 应用程序添加日志记录或跟踪 但如果日志详细级别设置得太低以致于不会记录消息 我不希望记录格式化字符串或计算值的开销 在 C 中 您可以使用预处理器定义宏来阻止代码被执行 如下所示 define VLOG level expr
  • 从 Subversion 部署网站

    我是 subversion 的新手 想知道如何从开发转向暂存 然后生产 我想我掌握了为发布创建分支的概念详细信息在这里 但我如何实际部署分支呢 理想情况下 我可以建立一个新网站并从分支复制文件 但我担心将任何 svn 绑定复制到生产环境中
  • 在 PHP 中解析转义的 JSON

    我是 PHP 世界的新手 在 PHP 中解析 JSON 时遇到问题 我想使用我的 Java 客户端将数据 POST 到 PHP 脚本Apache HttpClient 4 x and Gson My JSON Knt KntWatchId
  • 合并两个数组并使用 jquery 创建第三个数组

    我有 2 个数组arr1 A B C D 和 arr2 a b c d 我想通过以下方式组合这两个数组来创建第三个数组 arr3 A a B b C c D d 我怎样才能使用 jquery 实现这一点 请帮忙 尝试使用jquery的 me
  • 如何在Delphi中编写一个EXE,它也是一个COM服务器

    我有一个 Delphi 2007 应用程序 它只是一个标准的 exe 我想向它添加一个 COM 接口 我已经有一个 COM dll 它导出多个 COM 对象 并且运行良好 然而 当我尝试将 dll 中的 COM 逻辑 即 exports 和
  • C/C++/Java 中 volatile 说明符的用法

    在浏览有关多线程编程的许多资源时 通常会出现对易失性说明符的引用 很明显 至少在 C C 和 Java 版本 1 4 及更早版本 中 使用此关键字不是实现多线程之间同步的可靠方法 以下是维基百科列出的 没有解释如何 作为此说明符的典型用法
  • 在 $.ajax 成功中迭代 JSON

    当用户单击按钮时 我想返回一些数据并迭代 JSON 以便可以将结果附加到表行 此时我只是想让我的循环工作 这是我的代码 我的 JSON 返回如下 COLUMNS username password DATA foo bar button c
  • 如何在指定打印机上打印Jasper Reports?

    我想要的只是打印 Jasper 报告 而无需用户选择打印机 我搜索过但没有有效的解决方案 这是我的代码的相关部分 compile to jasper String report JasperCompileManager compileRep
  • forEach 内的异步函数与 js 循环[重复]

    这个问题在这里已经有答案了 可能的重复 javascript 使用一个回调执行一堆异步方法 我已经为这个问题苦苦挣扎了好几天 但我就是想不出一种优雅的方法来处理它 问题就在这里 我正在运行 forEach 循环 我需要知道一切何时完成 由于
  • 将非常大的 int 转换为 double,在某些计算机上会损失精度

    我目前正在学习cpp中的类型间数据转换 我被教导说 对于一个非常大的整数 我们 对于某些计算机 可能会遭受损失 转换为双精度时的精度 但该声明没有提供理由 有人可以提供解释和例子吗 谢谢 假设浮点数使用 N 位存储 现在 我们假设这个浮点数
  • JPA 工作单元克隆中遇到空或零主键

    我了解到JPA并有任务创建数据库并向其中插入一些值 我想知道如何找出最近插入的对象的ID是什么 所以我找到了一种我需要使用的方法flush的方法EntityManager 不幸的是我得到了 工作单元克隆中遇到空或零主键 当我使用上述方法时出
  • 如何检查 NSNumber 中的空值

    首先我承认我的无知 在我从事项目的几个月里 我已经学到了关于 Objective C 的一切 我还发现 Objective C 似乎使我使用过的任何其他语言中的简单问题变得复杂 这非常令人沮丧 这个问题就是一个例子 在第一次运行中 我的应用
  • 在 Android Lollipop 上使用 NFC 激活设备所有者

    我正在尝试使用 NFC 在设备上设置设备所有者包 Lollipop 概述中提到了here 要部署并激活设备所有者 您必须执行 NFC 数据 当设备处于运行状态时从编程应用程序传输到设备 其未配置状态 此数据传输发送相同的信息 如托管配置中描
  • 如何从完整的文件名列表中删除文件扩展名?

    我正在使用以下命令来获取包含名为的目录中的所有文件的列表tokens import os accounts next os walk tokens 2 Output gt gt gt print accounts DS Store Amie
  • MFC 应用程序到 Unicode/MBCS 的分段转换

    我有一个大型 MFC 应用程序 我正在扩展它以允许多语言输入 目前 我需要允许用户在单个对话框的编辑框中输入 Unicode 数据 有没有办法在不为整个应用程序打开 UNICODE 或 MBCS 的情况下执行此操作 我目前只需要转换应用程序
  • 使用 myclass::operator<(myclass &other) 对 std::list 进行排序

    我有一个std list
  • Xcode 4:使用 Git 存储库提交版本在每个构建上更新 CFBundleVersion

    我将 Xcode 4 与 Git 结合使用 并希望在每次构建时增加 Info plist 中的 CFBundleVersion CFBundleVersion 键的值应更新为我对 Git 存储库所做的最后一次提交的编号 I found th
  • 从函数内部获取所有函数参数的列表

    有没有办法得到all函数内部的函数参数 match call 不返回设置了默认值但未被覆盖的参数 例如 xf lt function a b Hi c TRUE print as list match call expand dots FA
  • 公开 dll 以进行 COM 互操作

    我以为我知道如何做到这一点 但显然不知道 所以我希望得到一些帮助 我无法让我的 dll 注册 因此我无法在 VBS 或其他地方实例化它 我编写了以下示例类 选中 使程序集 COM 可见 选中 注册 COM 互操作 然后构建它 当我尝试从 V
  • 不使用媒体播放器播放视频 [Winform]

    我想像那个人一样播放视频 link 我正在开发 C Windows 窗体应用程序 不是 NXA 但我不知道怎么办 我尝试使用Microsoft DirectX AudioVideoPlayback但没有运气 这是我到目前为止所尝试的 Ope