4

有谁知道进行实时视频重新编码的好方法(目标格式是 3GP s263 AMR 窄带和 MP4 mp4v mp4a,但当然不是同时。输入文件将是 WMV,但更多的输入格式支持更好的)?

目前我们使用调用 ffmpeg 命令行的 C# 服务进行异步处理,但是为同步请求执行此操作的想法有点次优,因为用户最终在播放开始之前等待了很长时间(尽管如果那是最好的情况让我知道,我想我会接受它)。

如果我们可以同时提供文件并保存它(这样我们可以存储它以供将来的请求),那将是很棒的,但如果我们不能这样做,那也不会是一场灾难。

作为旁注,我宁愿避免使用流媒体解决方案,因为支持它的设备更少,但如果没有好的方法来做我想做的事,我很乐意听到替代方案,即使它们涉及流媒体。

更新

只是为了让你们了解我的最新情况,我目前正在考虑编写一个直接调用 FFmpeg 的 DLL 而不是 exe 的包装器,开始认为我可能能够得到我以这种方式追求的功能(逐步捕获数据而不是全部完成后可能会让我足够接近实时,就足够了)。

仍在尝试这是否可行,并试图找到如何做到这一点的好示例(即使是那些用 c 而不是 c# 编写的,因为它会显示如何与 DLL 交互)。

4

2 回答 2

1

至于流媒体解决方案,我们使用了StreamCoders 的 MediaSuite.net。将任何基于 MPG 的视频流式传输到 3GP/H263 对我们来说效果很好。但是,您应该确切地知道您在规格、格式、编码等方面正在做什么。这是一个巨大的领域,他们的产品并没有“解释”一些基本术语,他们假设您已经知道自己在做什么。此外,据我记忆,您必须手动同步音频和视频通道。他们的演示应用程序展示了如何做到这一点(但话又说回来,它只是一个演示应用程序,因此您最终可能会进行优化)。

我认为您可以将其用于重新编码和流式传输,我最近自己没有尝试过。你打算如何输出结果?作为一个System.IO.MemoryStream

另一种流媒体解决方案是拥有一个众所周知的流媒体服务器,例如Xenon,并使用它执行“背靠背”技术:您的处理程序获取请求并创建对流媒体服务器的请求。流式传输服务器的响应流式传输到客户端。这是一种 hack,但它在一段时间内对我们很有用。

您的ffmpeg解决方案很好,您可能会发现它更易于实现,而不是较低级别的几乎实时转换。如果您可以“容忍”这一点,也许最好保持原样。

更新:如果你最终用 .Net 库包装ffmpeg,这似乎是一个很好的解决方案,因为ffmpeg是一个很棒的库,如果你能分享你的解决方案,那就太好了。我们试着玩它,但我们没有足够的时间。

于 2009-12-06T14:29:37.223 回答
1

我一直在为演示文稿和用户组会议使用实时编码。我找到的最佳解决方案是 Microsoft Expression Encoder。包含的 SDK 使用起来相当简单,应该可以提供您需要的大部分功能。

于 2009-12-07T14:06:35.537 回答