Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#.Net和DirectX(综合分析)编写音频视频播放引擎?_C#_Audio_Video_Directx - Fatal编程技术网

如何使用C#.Net和DirectX(综合分析)编写音频视频播放引擎?

如何使用C#.Net和DirectX(综合分析)编写音频视频播放引擎?,c#,audio,video,directx,C#,Audio,Video,Directx,前提: 我在一家广播解决方案公司工作,我们从外部供应商处购买了playout sdk,这减少了我们的视频加载、渲染、播放等负担。它为我们提供了许多功能,如字符生成器、叠加图像、文本、flash(*.swf)文件、流媒体等。我们主要关注应用程序开发(不是技术开发)。因此,我们从C#代码到SDK DLL进行简单的API调用,如play、pause、seak、overlay等,这让我们的生活变得轻松 同时,我们也面临问题,因为sdk是由另一个国家的第三方提供的,因此支持的质量取决于他们。此外,他们所做

前提:

我在一家广播解决方案公司工作,我们从外部供应商处购买了playout sdk,这减少了我们的视频加载、渲染、播放等负担。它为我们提供了许多功能,如字符生成器、叠加图像、文本、flash(*.swf)文件、流媒体等。我们主要关注应用程序开发(不是技术开发)。因此,我们从C#代码到SDK DLL进行简单的API调用,如play、pause、seak、overlay等,这让我们的生活变得轻松

同时,我们也面临问题,因为sdk是由另一个国家的第三方提供的,因此支持的质量取决于他们。此外,他们所做的功能添加是通用的,他们每两周发布一次新版本。他们的代码有很多bug。即使我们购买了他们的完整产品,我们也面临许可问题ct


要求:

  • 我们希望评估编写我们自己的播放/渲染引擎的选项-最初使用的是最简单的功能,但从长远来看,我们将添加更多功能,如覆盖图像或文本或flash swf文件、搜索、快进等
  • 我们还从硬件设备获取实时输入源,通过硬件设备将视频源发送到电视,并在磁盘上录制实时源。我们在实时输入和本地存储的视频文件之间切换
  • 我们需要播放各种视频(快速时间、mp4、flv等),因此我们还将依赖第三方编解码器
  • 我们可以使用不同的硬件卡进行输入和输出,并且需要迭代并获得可用的硬件配置
  • 我们在C语言上工作,我们在C语言上有经验丰富的开发者,我们不想用C++来开发,因为我们公司目前没有C++专家。
    问题:

  • 我们的方法应该是什么?我们可以使用纯C#和DirectX 11编写一个包含上述功能的播放(这是正确的方法还是其他更好的方法)
  • 实现同样的目标有多容易或难(这是一个主观问题——主观回答就足够了)
  • 是一个写得好的C代码,比C++代码慢(对于DirectX和媒体播放,我可能需要每秒传输30个视频帧,以满足NTSC标准)?
  • 什么是启动它的好方法(资源)(包括概念和编码)

  • 这是一个综合性的问题,但你的专家建议将使我的方向和进展变得容易。

    在一个项目中,我使用C#和.NET构建了一个3D电视图形系统,我不得不说是的,这绝对是可能的

    要回答您的具体问题

  • C#和DX 11(SlimDX)绝对可以完成这项工作,我用DX 9和性能差得多的硬件完成了这项工作
  • 我想说的是,如果你从几乎不产生垃圾的角度来处理这个问题(GC会产生图形上的停顿),并对动画(我们称之为模板)采取非常数据驱动的方法,你会看到我所指的道路
  • 是的,C#代码有封送处理开销,但是可以通过减少对DX的调用次数和传递给DX的数据量来降低成本
  • 见答案#2

  • 希望这有帮助!

    我建议使用-非常、非常容易使用,有一个非常有用的示例代码


    如果您坚持使用DirectShow,有一个非常有效。下面是一个,展示如何使用它。

    亲爱的专家,我是否需要更改问题的格式或添加/删除问题的详细信息?我已经两天没有收到任何答复。请提出建议。这是一个开放式问题,可能需要交钥匙解决方案更合适的是,可能包括软件和硬件。如果这是使用C#/.NET构建的,则可以使用DirectShow。此外,您的决定可能会受到编解码器、驱动程序、过滤器可用性的影响。总体而言,C#足以执行控制任务,如设置、启动和停止播放、用户事件它可能不适合执行实时音频或视频处理。@Dmitry Shkuropatsky:谢谢