一个可商用级高性能流媒体网关:支持RTSP/GB28181/WebRTC等多协议互通与转换

132 阅读4分钟

前言

流媒体技术已成为连接世界的桥梁。从在线教育到远程医疗,从视频会议到直播娱乐,流媒体服务的需求呈现爆炸式增长。然而,市场上的流媒体解决方案往往存在功能单一、扩展性差、协议支持有限等问题,难以满足日益复杂的业务场景。

今天推荐一个基于C++11开发的高性能、高可扩展开源流媒体服务器,为开发提供一站式解决方案。

项目介绍

项目致力于打造一个既适合商业部署,又便于开发学习的开源平台。该服务器支持RTSP、RTMP、WEBRTC、GB28181、HTTP-FLV、HLS、JT1078等主流流媒体协议,并创新性地实现了协议间的独立运行与动态转换。这种设计不仅提升了系统的灵活性,还为未来协议的扩展预留了充足空间。目前,项目已稳定运行于Linux环境。

项目功能

1、RTSP模块

无论是作为服务端接收客户端推流,还是作为客户端向其他服务器推送流,均支持RTP over UDP/TCP传输及PS封装格式。

2、RTMP模块

兼容Adobe标准,支持推拉流操作,为直播场景提供低延迟保障。

3、GB28181模块

针对安防行业定制,实现与国标设备的无缝对接。

4、WEBRTC模块

突破浏览器限制,支持点对点音视频通信,适用于视频会议等实时交互场景。

5、HTTP-FLV/HLS模块

流畅的HTTP流媒体体验,其中HLS模块经魔改后可在Android微信中直接播放,极大拓展了应用场景。

6、特色协议支持

包括SRT(低延迟传输)、EHOME2(安防领域专用)、HTTPS(安全通信)、WEBSOCKET(实时数据推送)及JT1078(车载视频标准)等,覆盖了从传统安防到新兴车载市场的全方位需求。

项目框架

协议转封装流程

项目特点

每个协议均可独立编译运行,开发可根据实际需求灵活组合功能模块。

这种设计不仅降低系统复杂度,还显著提升开发效率。

例如,若项目仅需支持RTMP与HLS,开发可轻松剥离其他协议模块,减少资源占用。同时,项目提供了详尽的API接口与配置文件,使得二次开发变得简单可行。

项目使用

1、创建并进入构建目录

mkdir buildcd build

2、配置项目

cmake ..

3、编译项目(建议使用多线程加快编译速度)

make -j4

4、可选配置

若需启用 SSL 功能,请将 conf 目录下的 sms.com.crt 和 sms.com.key 文件拷贝到 build 目录。

若需使用前端页面示例,请将 research 目录拷贝至 build 目录下。默认 HTTP 根目录为 build

5、编译器要求

建议使用 GCC 8 或更高版本,以确保完整支持 C++11 特性。

6、获取二进制文件

编译源码

7、FFmpeg 库说明

由于 FFmpeg 库体积较大,无法直接上传至 GitHub。如需将 FFmpeg 静态编译进项目,请前往 Gitee 下载完整源码包:gitee.com/inyeme/simp…

使用说明

1、配置准备

请检查项目根目录下的 server.conf 配置文件,并将其拷贝到 build 目录中,程序运行时会从此目录加载配置。

2、启动服务

./SimpleMediaServer

3、推流示例(使用 FFmpeg)

ffmpeg -re -i inputfile -c copy -f flv rtmp://ip:port/live/test

4、播放地址列表(使用 VLC 或其他播放器测试)

RTSP 播放地址:rtsp://ip:port/live/test

RTSP 播放地址(RTP 封装为 PS 格式):rtsp://ip:port/live/test?type=ps

RTMP 播放地址:rtmp://ip:port/live/test

HTTP-FLV 播放地址:http://ip:port/live/test.flv

HLS 播放地址:http://ip:port/live/test.m3u8

实时 HLS 播放地址(魔改支持微信播放):http://ip:port/live/test.sms.m3u8

WebRTC 获取 SDP 接口:http://ip:port/api/v1/rtc/play

SRT 拉流地址格式srt://ip:port?streamid=|path:/live/test|request:pull|

注意:请将 ip 和 port 替换为实际部署服务器的 IP 地址和端口号。

项目源码

Gitee:gitee.com/inyeme/simp…

总结

其全协议支持、模块化设计及高性能表现,使其成为开发现代流媒体应用的理想选择。不管想搭建一套私有流媒体平台,还是希望深入学习音视频处理原理,这个项目都值得一试。

关键词

#流媒体服务器#开源项目、C++11、#协议转换#模块化设计#高性能#音视频技术#Linux#FFmpeg

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!