【问题标题】:Stream images with h.264 encoding [closed]使用 h.264 编码流式传输图像
【发布时间】:2020-05-26 19:12:57
【问题描述】:

我正在从相机中提取帧并对提取的帧进行处理。处理完成后,我想将这些带有 h.264 编码的帧流式传输到其他系统。我该怎么做?

【问题讨论】:

  • 这个问题太宽泛了,无法回答。您至少需要提供您需要使用的平台或语言。如果你谷歌这个,你可以找到很多我认为的资源。
  • 感谢您的回复。我正在使用 python 语言和 jetson nano 进行处理。我可以在使用套接字连接处理后流式传输帧。但我需要以 h.264 格式编码。我检查了谷歌,但无法得到我正在寻找的解决方案。

标签: streaming gstreamer h.264


【解决方案1】:

您通常希望将 H.264 放入 MP4 或 AVI 等视频容器中。

例如,从原始帧到在线视频流协议的包装可能是:

  • 原始像素位图
  • 原始像素编码(例如 h.264 编码)
  • 编码的视频流打包到带有音频流、字幕等的容器中(例如 mp4 容器)
  • 容器分成“块”或分段以进行流式传输(在 iOS 上使用 HLS 流式传输格式)。

另一种常见的方法是让摄像机将内容流式传输到专用流式服务器,然后服务器使用 HLS 或 MPEG DASH 等流式传输协议向终端设备提供流式传输。一个示例(在撰写本文时,它似乎一直在更新)显示从使用 RTSP 的相机到服务器的流,然后是来自服务器的 HLS 或 MPEG DASH:

如果您的用例很简单,您可能不想使用像 HLS 或 MPEG-DASH 这样的分段 ABR 流式传输协议,因此您可以只从常规 HTTP 服务器流式传输 mp4 文件。

一种允许您在其他示例的基础上构建的方法是在 Python 中使用 openCV - 您可以在将视频帧写入 AVI 或 MP4 容器的问题和答案中查看示例:Writing an mp4 video using python opencv

创建 MP4 文件后,您可以将其放在一个文件夹中并使用常规 HTTP 服务器使其可供用户下载或流式传输。

请注意,如果您想将帧作为实时流进行流式传输,即在您逐一创建它们时,那​​么这会比较棘手,因为您不会简单地拥有完整的 MP4 文件来流式传输。如果您确实想这样做,那么利用现有实现将是一个不错的起点 - 这是一个基于点对点 Web 套接字的实时流的示例,我基于开源和 Python:

【讨论】:

  • 感谢您的回复。我需要将帧写入容器然后流式传输?您是这个意思吗?
【解决方案2】:

如果您想通过 UDP 套接字流式传输数据 - 使用 RTP 协议进行流式传输。

请看RFC 6184的rfc规范

用于处理相机数据的Media Pieline:

Camera RAW data (RGB/YUV/NV12) -> H.264 encoder -> NALU packet RTP packetization-> Socket通信。

你可以使用ffmpeg python接口来实现这个目标。

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 2020-08-18
    • 2012-04-25
    • 1970-01-01
    • 2011-12-03
    • 2011-05-20
    • 2014-05-10
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多