繁体   English   中英

用C#录制视频

[英]Recording video in C#

我必须执行以下操作:使用C#从摄像机录制视频。 我使用的相机产生视频帧(帧率不固定),我必须以某种方式将所有帧放在一起并创建视频文件。 另外,我需要使用不同的编解码器,例如AVI或MPEG4(这些编解码器是必需的,其他是可选的)。

我面临的主要问题是如何创建帧率不固定的视频。 我有一帧帧,例如,我可以在1毫秒后接收第一帧,然后在20毫秒后接收,然后是36毫秒,依此类推。 如果我以25帧/秒的速度创建视频,那么结果将是错误的,因为这意味着在40毫秒后添加了帧。

我尝试使用Aforge.Video库,它具有http://www.aforgenet.com/framework/docs/html/84a560df-bfd5-e0d6-2812-f810b56a254d.htm方法,该方法会根据时间跨度添加帧。 但是此方法在设置比特率方面存在问题-我传递给该方法的比特率值被忽略了( http://www.aforgenet.com/forum/viewtopic.php?f=2&t=2665 )。

所以我的问题是:是否有一些C#库可用于录像? 我必须支持AVI和MPEG4,还必须设置比特率,最后但并非最不重要的问题-录制具有可变帧率的视频。

提前致谢。 任何建议将非常有帮助。

UPD1:我无法直接连接到摄像机-我所拥有的只是一帧帧,我需要在运行时将此流转换为视频。

UPD2:我要查找的库应满足以下属性。 它必须包含一种方法(或以某种方式执行相同的操作)以添加带有时间戳的下一帧,就像在Aforge.Video.FFMPEG中一样:

public void WriteVideoFrame(Bitmap frame, TimeSpan timestamp)

并且应该可以选择不同的编解码器(至少是AVI和MPEG4),还可以设置比特率。 有Aforge.Video.FFMPEG的替代方法吗? 由于Aforge无法正常工作-忽略了比特率值,因此也不支持某些编解码器(例如MPEG2)。

UPD3:关于编解码器许可证的另一个问题。 如果使用开放源代码库,我应该担心编解码器许可证吗?

  • AVI和MPEG4不是编解码器,而是容器格式
  • API和库都是众所周知的,这里的问题是特定的格式和编解码器有其自身的局限性,例如AVI文件必须具有固定的视频帧速率(一种解决方法是,您可能具有跳过帧的高FPS文件)
  • 图书馆搜索和推荐Q被认为是题外话,因此基于SO

通常,从C#代码用于视频录制的最佳控件API是DirectShow通过DirectShow.NET库。 您选择格式和编解码器,AVI多路复用器作为库存组件提供,并且有第三方替代品。 对于MPEG-4( .MP4 ),您需要第三方组件,例如this 视频压缩组件通常受第三方过滤器选择的影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM