【发布时间】:2010-12-22 12:33:30
【问题描述】:
有一点背景知识,我的任务是修复一些“小”错误并维护这个解决方案,以便在我们的应用程序的两个实例之间通过网络流式传输视频。该解决方案是由不再在这里的人编写的,因此代码中存在一些谜团以及一些非常有趣的陷阱。该解决方案是使用 ffmpeg 编写的,其中 C++ 代码用于包装编码/解码相关代码以及一些流代码。然后用 SWIG 包装这个 C++,以便它可以与 C# 互操作,并将视频帧向上传递到它们使用位于 WPF 控件中的VideoRendererElement 呈现的位置。帧被传递的主要原因是因为我们需要一些自定义协议来发送视频数据,这些协议是使用 C# 编写的,因此当视频帧被传递时,我们将它们包装在我们自己的数据包中并通过网络发送出去.此解决方案有效,我们可以使用我们的自定义协议流式传输视频,尽管维护和使用它是一场噩梦。
我的问题是有更好的方法来解决这个问题吗?我正在寻找在较低级别处理视频数据(在 C# 中)的方法,以便我可以获取视频帧并将它们打包到我们自己的数据包中并将它们发送出去,并能够接收和重建视频对方。 ffmpeg 似乎是常见的解决方案,但我遇到了很多问题,我认为 GPL/LGPL 是个问题。
我希望实现的基本流程, 视频文件 -> 编码 -> 包装在数据包中 -> 在协议 X 上通过线路发送 -> 从数据包中获取视频数据 -> 解码 -> 渲染/保存到磁盘
【问题讨论】:
-
为什么 LGPL 对您来说是个问题?即使您的应用程序是针对商业客户的,也不应该成为问题。
-
GPL/LGPL 的事情是由另一位同事提出的,但他们听起来好像我们使用 ffmpeg 及其一些依赖库的方式违反了许可。至于重复的帖子,如果可能的话,我正试图摆脱 ffmpeg,而尖锐的 ffmpeg 似乎不起作用或不再受支持。
-
如果不研究 SharpFFmpeg,我不能说。有些项目达到了一定程度的成熟度,不再发现错误 - zlib 浮现在脑海中。如果您想避免使用 ffmpeg,请注意,做您想做的事情可能需要做很多工作。网络传输部分可能是最简单的部分。
-
你看过 AVBlocks.NET 吗?有关更多详细信息,请查看 Bitbucket 上 AVBlocks-Samples 存储库中的 VideoConverter 和其他 .NET 示例。