作为一个使用这些实时流媒体服务的初学者,我花了几个小时试图弄清楚这是如何实现的,但似乎无法解决,我会准确地去做。
我正在制作一个个人基本网络应用程序的原型,该应用程序可以执行以下操作:
-
在web浏览器中,web应用程序有一个按钮,上面写着"流式麦克风"-当按下时,它会将音频从用户的麦克风(用户显然必须同意允许发送麦克风音频(流式传输到服务器,我认为该服务器将运行node.js(目前没有具体原因,只是认为这就是我要做的(。
-
服务器以某种方式接收到足够接近实时的音频(不确定我会怎么做(。
-
然后,我可以在命令行上运行ffmpeg,获取实时音频,并将其作为声音添加到我想要播放的视频文件(假设我要播放testmovie.mp4(中。
我研究过各种解决方案,例如使用WebRTC、RTP/RTP、将音频管道传输到ffmpeg、Gstreamer、Kurento、Flashphoner和/或Wowza,但不知何故,它们看起来过于复杂,通常似乎侧重于视频和音频。我只需要处理音频。
正如您所发现的,有许多不同的选项可以从启用WebRTC的浏览器接收音频。从最简单到更困难的选项可能是:
-
使用支持WebRTC的服务器,如Janus、Kurento、Jitsi(不确定wowzer(等。这些服务器往往具有插件系统,其中一个可能已经具有您需要的音频混合功能。
-
如果您对node感到满意,您可以使用werift库来接收WebRTC音频流,然后将其转发到FFmpeg。
-
如果你想完全控制WebRTC管道,并可能进行音频混合,你可以使用
gstreamer
。根据您所描述的,它应该能够完成完整的任务,而不必涉及单独的FFmpeg进程。
我们做到这一点的方法是用Java创建一个Wowza模块,该模块将从传入流中获取音频,从任何需要的地方获取视频,并将它们混合在一起。
没有理由在混合中引入像ffmpeg这样的三次聚会。
Wowza甚至提供了一个样本:https://github.com/WowzaMediaSystems/wse-plugin-avmix