我想使用 c# 在模拟电视流上放置一个新闻字幕,我可以使用 DirectShow 流式传输模拟电视,但我不知道如何将它与旋转文本混合,我应该创建一个过滤器吗?或者我必须使用 DirectShow 以外的其他技术?
2 回答
DirectShow 是执行此操作的最简单方法,但它确实有一些学习曲线,尤其是来自 C#。维基百科页面为您提供了 DirectShow 的基本概述。
DirectShow 工具在最新的 Windows SDK 中可用。使用 C++ 进行 DirectShow 编程更简单,但您可以通过 COM interop 或 DirectShow.net(我还没有尝试过)相当轻松地使用 DirectShow。如果使用 COM 互操作,以下文章会有所帮助:
http://blogs.msdn.com/b/ericgu/archive/2004/09/20/232027.aspx
如果动画性能足够流畅,您也许可以使用 VMR 叠加过滤器。请参阅以下文章
http://www.codeproject.com/KB/audio-video/VideoPicture.aspx
http://www.codeproject.com/KB/audio-video/Ticker.aspx
http://msdn.microsoft.com/en-我们/图书馆/dd407344(v=vs.85).aspx
或者,您将需要编写自己的过滤器来渲染每一帧上的文本,调整其位置与视频帧的时间戳同步。如果您只需要在自己的应用程序中执行此操作,那么以下方法可能是最简单的
http://www.sichbo.ca/Free_Code/100_C_Sharp_directshow_filters
出于性能原因,Microsoft 官方建议应在 C++ 中创建 DirectShow 过滤器,但在 C# 中覆盖滚动文本应该没问题,因为如果您仔细编程,瓶颈将是用于覆盖文本的 API。
实际上,您不必编写过滤器即可在视频上绘制一些文本。只需制作一个未压缩视频通过样本采集器(标准 DirectShow 过滤器之一)的图表,为样本采集器设置回调,您就可以在回调中修改视频数据。使用 DirectShow.NET 在 C# 中执行此操作非常容易,但由于编组而不是最佳选择。您可以先在GraphEditPlus中构建这样的图表,然后它将向您展示如何构建此图表和使用示例抓取器的 C# 或 C++ 源代码。