c# – 移动设备的实时视频编码

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

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

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

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

更新

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

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

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

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

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

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

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

点赞