问题描述
在简短中,我有一个有趣的问题:如何在NodeJS(12+)中的线程之间共享信息。
技术栈-简而言之:
。
我使用的模块:
- NodeJS 12 +
- 请求/获取/ https模块
- 快递模块
- 流模块
故事: 我有一个应用程序,它在两个不同的系统之间具有网关/中继角色。一个提供实时媒体流(简单的MP4(h264)流),另一个提供通过HTTP作为RTSP使用。奇怪的是,消费者客户端的行为不像其他任何播放器(例如VLC或网络播放器),有时-看似随机-重新发送请求,有时关闭当前请求并重新发送。因此,直接管道在此用例中并非真正有效。
我从worker_threads中创建了一个工作程序,该工作程序保存一个可读流对象,并且当客户端发出请求时,我开始将MP4流填充到该工作程序中的可读对象中,因此即使该流确实得到了一个关闭或重新发送,将不会中断实时媒体流的消费过程。 无论客户端连接到哪里,我都只想为它传递可读对象。
最初,尽管从request / fetch / http.get或FFMPEG这样的简单管道就足够了,但是客户端可以在3秒到2分钟之间拨打电话。
。
所以,我的问题是,什么是最好的解决方案,将工作人员的数据传递回主服务器并进行HTTP路由?
我有一些想法,例如:
- 我知道,我可以在线程之间拥有自己的通道,并且可以传递来回信息,但是据我所知,等待消息并保持进程确实阻止了应用程序({{1} )。
- 使用Socket.io将数据从工作线程传回,在主体中填充可读内容,并在http级别通过管道传输可读内容(基本上是伪共享对象)
- 创建辅助HTTP服务器以提供媒体流,然后我将其中继到响应中(例如:网关/代理)
- 查找一些代理解决方案,我可以在其中简单地重定向和重塑内容,例如将输入mp4转换为RTSP流并将其通过管道传递给消费者响应
- 我应该只是“记住”活动流,并且如果它是由远程服务器流式传输的,始终仅使用相同的URL,传递给FFMPEG并继续通过管道传输到res?
注意:
- 我设置了所有标头以保持连接状态,但客户端软件似乎保持原样。
- 默认情况下,它使用RTSP和RTP / TCP来消耗视频流,但可以选择通过http进行RTSP。
- 可能我忽略了从远程实时MP4提供RTSP视频的一些琐碎任务,但是我在任何地方都找不到任何好的示例或来源(基本上在同一地方转载了3篇文章)
- 我没有找到任何类似的问题,也没有在任何地方找到文章(但签出了nodejs ffmpeg play video at specific time and stream it to client)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)