【问题标题】:Raw H264 to JPEG, in C#原始 H264 到 JPEG,在 C# 中
【发布时间】:2016-03-25 18:17:38
【问题描述】:

我得到一个帧流,一个初始 SPS 和 PPS h264 数据包,然后是 I 和 P 帧的数据包。

使用 c# .NET 我想转换成一系列 JPEG?有人做过吗? 我尝试过 AForge.NET FFMpeg 包装器,但只能从 MP4 文件转到 JPEG 文件? 还看了 DirectShow。

我似乎找不到一个甚至接近这样做的例子?

谢谢

【问题讨论】:

  • 所以你得到一个 h264 流并且你想把每一帧都转换成 jpeg?
  • 嗨,是的,所以我得到了一系列原始 h264 数据帧(首先是 SPS 和 PPS),然后是 I 和 P 帧。它是别人的代码,它可以根据需要将某些部分保存到 mp4 文件中,但我需要将每帧的解码添加到静止帧 JPEG(C# 中的位图),可以保存到磁盘或丢弃。跨度>

标签: c# ffmpeg jpeg h.264


【解决方案1】:

在 Directshow 中,听起来您需要在过滤器图中引入 SampleGrabber 过滤器。在 H264 解码器之后插入它。

这是一个直通过滤器,可以接收包含每个视频帧的回调。然后,您显然可以选择对框架执行的操作,将其作为 jpeg 等保存到磁盘。

这里有一个很棒的页面解释了它的用法,而不是反刍 MSDN:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd407288(v=vs.85).aspx

考虑到 Roman 的 cmets 进行更新:

SampleGrabber 作为 Directshow 编辑服务的一部分已被弃用。然而,它是完全自给自足的。如果它从更高版本的 Windows 中删除,则可以直接替换为替代过滤器。我仍然在我的一个消费者应用程序中使用它。 Roman 是正确的 - 它有一个陡峭的学习曲线。

【讨论】:

  • Sample Grabber 已弃用,因为它是 DirectShow 编辑服务的一部分。 DirectShow 本身并没有被弃用并且保持良好的信誉。文档对此非常准确。此外,作为旁注,甚至可以按照您提到的方式使用股票 DirectShow 过滤器压缩为 JPEG。 C# 开发人员不愿意为此使用 DirectShow,但这是为 H.264 视频解码器付出的代价:不知何故,它必须使用,而且它不是很简单的因素。可以使用 Media Foundation H.264 解码器,但无论如何这并不容易。
猜你喜欢
  • 2015-08-10
  • 1970-01-01
  • 2020-08-12
  • 2012-07-06
  • 2012-10-29
  • 1970-01-01
  • 2014-01-26
  • 2014-02-06
  • 2013-12-03
相关资源
最近更新 更多