是否有任何方法可以在播放时获取媒体文件的叠加层?

Par*_*ang 5 c# media subtitle

我想在不使用自动提供字幕的库中插入字幕到媒体文件中(如DirectShow)

我习惯使用窗口桌面的绘图手柄绘制,但它无法工作.我认为这是因为更新的速度......对吧?无论如何,是否有任何功能或方法来绘制媒体文件或获取其叠加处理?

    [DllImport("user32.dll")]
    static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll")]
    static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgn, uint flags);

    [DllImport("user32.dll")]
    static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc);

    public void SubtitleDraw()
    {
        IntPtr hWnd = GetDesktopWindow();
        IntPtr hDc = GetDCEx(hWnd, IntPtr.Zero, 1027);

        Font font1 = new Font("Times New Roman", 24, FontStyle.Regular,GraphicsUnit.Pixel);    
        Point pt = new Point(40, 375);

        PointF pointF1 = new PointF();
        pointF1 = PlayerForm.ActiveForm.PointToScreen(pt);

        Graphics g = Graphics.FromHdc(hDc);
        g.DrawString(SubtitleText, font1, Brushes.Black, pointF1);

        ReleaseDC(hWnd, hDc);
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*ken 0

如果您想在以任何合适的帧速率播放视频时在视频上绘图,您将需要研究 DirectShow 和过滤器。有一些分散的文档介绍了如何与 .NET 中的 DirectShow 过滤器图进行交互,但它非常稀缺。

如果您在媒体控件中播放视频,它几乎总是在覆盖层中播放视频,因此您在其“顶部”绘制的任何内容都将位于控件顶部,但仍在“覆盖层”下方,其中正在播放真实视频。