【问题标题】:Record H264 packets over RTP通过 RTP 记录 H264 数据包
【发布时间】:2014-09-17 22:44:23
【问题描述】:

我已经阅读了几篇关于 H264 录制的帖子,但没有一篇能真正回答我的问题,所以这就是我想要做的。

服务器正在向我发送 H264 编码的视频数据包,我想捕获这些数据包并将其转换为视频文件(.mpeg 或 .avi)

这是我对设置的设想: 我需要设置 UDP 侦听器来捕获视频数据包,然后将数据包有效负载发送到 DirecShow 图进行处理。 DirectShow 图形应该由一个 H264 解码器和一个 MPEG 编码器组成。

我在正确的轨道上吗?

谢谢

【问题讨论】:

  • 问题格式不正确。对于初学者,您需要知道协议数据是在线编码的。然后您可能希望避免重新编码。那么 DirectShow 不是唯一的选择,使用 DirectShow,您将需要第三方过滤器,因为库存过滤器不能完全覆盖任务。
  • 嗨 Roman,我认为有效载荷是用 H264 编码的,每秒 90000 个样本。你能告诉我还有什么其他选择吗?我想对这些可能性做更多的研究。谢谢
  • 也许你想告诉它是 H.264 over RTP - 只是一个猜测,暗示你确实需要对协议进行研究,然后 - 揭示选项。
  • 对不起,我忘了提到协议。是的,它是 H264 over RTP。

标签: c# directshow h.264


【解决方案1】:

如果您只想捕获 h.264 流并将其放入容器中,我会使用 FFmpeg。我不知道确切的命令行,所以这是未经测试的,但尝试类似...

ffmpeg -i - -f mp4 output.mp4

然后,通过 STDIN 写入它。它应该在几个数据包后检测您的流类型,并开始写入 MP4 文件。

【讨论】:

  • 有多个视频流同时进入,我需要将它们记录到不同的文件中。在我看来,我无法同时录制多个视频流。对吗?
  • @LexL 当然可以。每个流一个进程。
  • 你提到我设置好ffmpeg后,我会将H264的payload写入STDIN,然后ffmpeg会提取payload。如果我有多个带有 ffmpeg 实例的视频流,那么 ffmpeg 如何知道哪个有效负载是针对它而不是针对其他 ffmpeg 实例的?
  • @LexL 每个 FFmpeg 进程都有自己的 STDIN,您将分别写入。
猜你喜欢
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多