谁知道做实时视频重新编码的好方法(目标格式是3GP s263 AMR窄带和MP4 mp4v mp4a,但当然不是在同一时间。输入文件将是WMV,但支持的输入格式越多越好)?
目前,我们使用调用ffmpeg命令行的C#服务进行异步处理,但是对于同步请求这样做的想法有点不太理想,因为用户在回放开始之前需要等待很长一段时间(不过,如果这是最好的情况,请让我知道,我猜我会接受它)。
如果我们能同时为文件提供服务并保存它,那就太棒了(这样我们就可以为将来的请求存储它),但如果我们不能做到这一点,那也不是什么灾难。
顺便说一句,我更喜欢避免使用流媒体解决方案,因为很少有设备支持它,但如果没有好的方法来做我想要的事情,我会很乐意听到替代方案,即使它们涉及到流媒体。
更新
为了让你们了解最新的情况,我目前正在考虑编写一个包装器,直接调用FFmpeg的DLL而不是exe,我开始认为我可以通过这种方式获得我想要的功能(逐步捕获数据,而不是一旦完成,可能会让我足够接近实时)。
我仍然在考虑这是否可以工作,并试图找到如何做的好例子(即使是那些用c而不是c#写的,因为它会显示如何与DLL接口)。
发布于 2009-12-06 22:29:37
至于流媒体解决方案,我们使用了StreamCoders' MediaSuite.net。对于我们来说,它可以将任何基于MPG的视频流传输到3GP/H263。然而,你应该确切地知道你在做什么,在规格,格式,编码等方面。这是一个巨大的领域,他们的产品没有“解释”一些基本的术语,他们假设你已经知道你在做什么。此外,据我所知,你必须手动同步音频和视频通道。他们的演示应用程序展示了如何做到这一点(但话又说回来,它只是一个演示应用程序,所以您可能最终会进行优化)。
我想你可以用它来重新编码,也可以用来流媒体,我最近没有试过。您计划如何输出结果?作为System.IO.MemoryStream
另一个流解决方案是拥有一个众所周知的流服务器,如Xenon,并使用它进行“背靠背”技术:您的处理程序获得一个请求并创建一个对流服务器的请求。流服务器的响应被流传送到客户端。这是一种黑客行为,但它在一段时间内对我们很有效。
你的ffmpeg解决方案很好,你可能会发现它比低级的几乎实时的转换更容易实现。如果你能“容忍”这一点,也许让它保持原样会更好。
更新:如果你最终用.Net库包装了ffmpeg,这似乎是一个很好的解决方案,因为ffmpeg是一个很棒的库,如果你能分享你的解决方案就太好了。我们试着玩它,但是没有足够的时间。
发布于 2009-12-07 22:06:36
我一直在使用演示文稿和用户组会议的实时编码。我找到的最好的解决方案是Microsoft Expression Encoder。包含的SDK使用起来相当简单,应该可以提供您所需的大部分功能。
https://stackoverflow.com/questions/1831071
复制相似问题