使用任何协议/编解码器的实时流媒体如何从端到端工作?
我一直在搜索google,youtube,FFMPEG文档,OBS源代码,堆栈溢出,但仍然无法从视频中了解实时视频流的工作方式。因此,我试图捕获桌面屏幕截图,并将其转换为H.264编码的实时视频流。
我知道该怎么做:
- 在某些循环上使用带有C#的Graphics.CopyFromScreen捕获屏幕快照图像
- 对位进行编码并将图像保存为JPEG文件
- 一次一次在base64中发送JPEG图像并将其写入命名管道服务器
- 从nodejs服务器上的命名管道读取图像缓冲区
-
通过套接字向客户端发送base64 jpeg图像,以每帧显示在网页上
我想做的事:
- 我假设将大块的图像编码为某种H.264格式,以便使用其中一种协议(RTMP,RTSP,HLS,DASH)进行实时流传输
- 将编码的视频块连续不断地推到服务器(例如RTMP服务器)上(我想是1-2秒吗?)
- 从客户端访问服务器以流式传输和显示实时视频
我尝试使用FFMPEG将.mp4文件连续发送到RTMP服务器上,但这似乎不起作用,因为它会在每个视频后关闭连接。我还研究了使用ffmpeg concat列表,但这只是结合了视频,无法将实时流读取的视频附加到我的理解中,并且可能不是为此而制作的。
所以我最好的线索来自this stackoverflow answer,它表明:
- 在FLV容器中编码,将持续时间设置为任意长(根据答案,youtube使用了此方法)
- 使用ffmpeg或其他开源rtmp多路复用器将流编码为RTMP
- 将流转换为HLS
此编码和转换如何完成?可以使用ffmpeg命令完成所有操作吗?