如何编程实现 “实时监测电脑声卡是否发声” 这一需求?

发布于 2022-09-07 12:38:58 字数 575 浏览 82 评论 0

事件背景:
Windows下写了一个exe程序(目的是24小时持续运行挂机看视频),该程序内嵌了一个超文本浏览框,会打开指定URL并播放该URL里面的视频。但偶尔会出现缓冲的情况,有时候会卡在缓冲界面很久,此时需要刷新一下才可以正常播放。

待解决的需求:
无人值守 的情况下,程序自动判断该视频是否正常播放。如果在缓冲界面了,程序就自动刷新一下。

设想的方案:
在程序里加一个线程,实时监听着声卡,如果长达5分钟都没有声音发出,则说明视频卡住了,没有正常播放。于是开始刷新url重新加载。(该Windows系统内只运行这一个程序,其他能发声的软件全部卸载。且该视频正常播放期间一直都有声音,视频内不存在连续1分钟无人发声的情况)

最终的问题:
1、这个设想的方案是否可行?
2、(重点问这个)如果可行,如何用C# (或者易语言)来实现检测声卡是否发出了声音?
3、有没有其他方法实时监测视频是否正常播放?(如检测进度条的像素变化、某一画面区域是否长期静止等)

谢谢您的关注!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怪异←思 2022-09-14 12:38:58

如果是网络原因导致视频卡顿,不需要搞那么复杂呢。

可直接监控进程 IO 流量,若视频卡顿,流量必然不正常(偏小或为零)。这只需要一个 API 函数 GetProcessIoCounters()

参考

GetProcessIoCounters, https://msdn.microsoft.com/en...

例子

using System;
using System.Threading;
using System.Runtime.InteropServices;


public class Monitor
{
    [StructLayout(LayoutKind.Sequential)]
    public struct IO_COUNTERS {
        public ulong ReadOperationCount;
        public ulong WriteOperationCount;
        public ulong OtherOperationCount;
        public ulong ReadTransferCount;
        public ulong WriteTransferCount;
        public ulong OtherTransferCount;
    }

    [DllImport("kernel32")]
    static extern IntPtr GetCurrentProcess();

    [DllImport("kernel32")]
    static extern bool GetProcessIoCounters(IntPtr process, ref IO_COUNTERS pCounters);

    public static void MonitorCounters()
    {
        IO_COUNTERS pCounters = new IO_COUNTERS();
        while (GetProcessIoCounters(GetCurrentProcess(), ref pCounters)) {
            Console.WriteLine(String.Format("READ: %d, WRITE: %d", pCounters.ReadTransferCount, pCounters.WriteTransferCount));
            Thread.Sleep(1);
        }
    }
}


public class Program
{
    public static void Main()
    {
        Monitor.MonitorCounters();
    }
}

说个题外话,推荐你学习 python,易学且功能强大。

欢你一世 2022-09-14 12:38:58

舍近求远了

直接一点,易语言的超文本浏览框底层是使用了WebBrowser对象,可以用超文本浏览框n.取浏览器对象()得到IWebBrowser2对象,并进行相关的网页层面操作。
具体如何操作需要看网页结构。

C#也是WebBrowser对象,但是似乎做了层封装,也可以参考以上思路。

成熟稳重的好男人 2022-09-14 12:38:58

www.autohotkey.com

烟火散人牵绊 2022-09-14 12:38:58

换个思路,截图比较相对而言更容易实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文