移动设备的实时视频编码

时间:2009-12-02 06:48:27

标签: c# video mobile video-encoding

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

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

如果我们可以同时提供文件并保存它(以便我们可以将其存储以备将来请求),那将是非常棒的,但如果我们不能这样做,那就不会是灾难。

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

更新

只是为了让你们了解我所处的最新情况,我现在正在玩写一个直接调用FFmpeg的DLL而不是exe的包装器的想法,开始认为我可能会能够获得我之后的功能(逐步捕获数据,而不是一次完成,可能会让我足够接近实时就足够了)。

仍在努力解决这是否会起作用并试图找到如何做的好样本(即使是用c而不是c#编写的,因为它将显示如何与DLL接口)。

2 个答案:

答案 0 :(得分:1)

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

我认为您可以将它用于重新编码以及流媒体,我最近没有尝试过。你打算如何输出结果?作为System.IO.MemoryStream

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

您的 ffmpeg 解决方案很好,您可能会发现实施起来比较简单,几乎是实时转换。如果你能“忍受”这一点,也许最好保持原样。

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

答案 1 :(得分:1)

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