我目前正在构建一个类似于 Bigo Live、FancyLive 的直播应用程序。我试图决定是使用 Node.js/Express.js 和 Laravel 作为后端,还是使用除 laravel 或 node js 之外的任何其他技术。我的前端是 React Native 框架。我主要关心的是性能、可扩展性、易用性和第三方库集成。
我希望收到社区关于构建具有流畅、快速和实时数据通信功能的直播应用程序的最佳技术堆栈的见解和建议。任何个人经验、案例研究或实现类似功能的最佳实践都非常有价值。如果您有疑问或我遗漏了一些需要补充的内容,请告诉我。
这个问题似乎很模糊,但我会尽力从头开始回答。
如果您要构建直播应用程序,则必须首先考虑媒体服务器。媒体服务器是您需要考虑的关键部分。我假设您不是从头开始构建它,因此您必须使用开源或第 3 方平台(Wowza、Antmedia 服务器、Kurento、Red5 服务器等)。您还可以在 github 上找到媒体服务器(例如 https://github.com/bluenviron/mediamtx、https://github.com/ireader/media-server)。
直播的基本步骤是:
应用程序 -> (RTMP | SRT | RTSP | 其他) -> 媒体服务器 -> (HLS | SRT | RTMP | RTSP | 其他) -> 应用程序
我已经在上面解释了媒体服务器。您可以使用 url 和流名称连接媒体服务器。
例如:
rtmp://<your ip>:1935/<streamname>
或
srt://IP:port?option1=value1&option2=value2
在移动端,您必须负责发布(摄取)和播放(流式传输)视频。要发布到媒体服务器,您可以使用选择多个协议,如上面的流程。 React Native 的一些库是 https://github.com/ezranbayantemur/react-native-rtmp-publisher 或 https://github.com/apivideo/api.video-reactnative-live-stream 对于流式传输,您可以使用react-native-video 或 VLC 播放器 https://github.com/razorRun/react-native -vlc-媒体播放器。
库的选择取决于您要使用的协议类型。
您可以在此处添加向客户端、身份验证和其他 API 端点提供媒体服务器 URL 的逻辑。我不会告诉您在 Node.js/Express.js 和 Laravel 之间使用哪种后端技术,因为两者都可以处理它,这完全取决于您的偏好。
我建议您使用云服务提供商来部署您的媒体服务器,以便轻松实现自动扩展和负载平衡目的。