首页 > 解决方案 > 将图像流转换为 H.264 实时视频流的过程是什么?

问题描述

使用任何协议/编解码器的实时流如何从端到端工作?

我一直在搜索 google、youtube、FFMPEG 文档、OBS 源代码、堆栈溢出,但仍然无法从视频中了解实时视频流的工作原理。因此,我正在尝试捕获桌面屏幕截图并将其转换为 H.264 编码的实时视频流。

我知道该怎么做:

  1. 在某个循环上使用带有 C# 的 Graphics.CopyFromScreen 捕获屏幕截图图像
  2. 对位进行编码并将图像保存为 JPEG 文件
  3. 一次发送一个 base64 格式的 JPEG 图像并将其写入命名管道服务器
  4. 从 nodejs 服务器上的命名管道读取图像缓冲区
  5. 通过套接字将base64 jpeg图像发送到客户端以显示在网页上,每一帧

我想能够做什么:

  1. 使用其中一种协议(RTMP、RTSP、HLS、DASH)将块、图像编码为某种 H.264 格式以进行实时流式传输
  2. 将编码的视频块连续推送到服务器(例如 RTMP 服务器)(我假设 1-2 秒?)
  3. 从客户端访问服务器以流式传输和显示实时视频

我尝试使用 FFMPEG 将 .mp4 文件连续发送到 RTMP 服务器,但这似乎不起作用,因为它会在每个视频后关闭连接。我也研究过使用 ffmpeg concat 列表,但这只是结合了视频,它不能将直播读取的视频附加到我的理解范围内,并且可能不是为此而制作的。

所以我最好的线索来自这个stackoverflow的答案,它建议:

  1. 在 FLV 容器中编码,将持续时间设置为任意长(根据答案,youtube 使用了这种方法)
  2. 使用 ffmpeg 或其他开源 rtmp 多路复用器将流编码为 RTMP
  3. 将流转换为 HLS

这种编码和转换是如何完成的?这一切都可以用 ffmpeg 命令完成吗?

标签: ffmpegvideo-streamingh.264http-live-streamingrtmp

解决方案


推荐阅读