目录
ZLMediaKit
🚀 更便捷的方法:vcpkg 包管理器
·SRS (Simple Realtime Server):国产主流开源服务器
·OvenMediaEngine:专注于子秒级超低延迟直播
ZLMediaKit
ZLMediaKit(C++)高性能运营级框架,支持WebRTC、RTMP、HLS等协议互转,延迟最低可达100毫秒,全平台兼容。
# 1. 克隆代码 (国内用户推荐使用 Gitee 镜像) git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit # 2. 更新子模块 (必须!) git submodule update --init # 3. 编译 mkdir build && cd build cmake .. make -j$(nproc) # 4. 进入运行目录并启动服务器 cd ../release/linux/Debugsudo ./MediaServer🚀 更便捷的方法:vcpkg 包管理器
如果你觉得手动编译依赖和项目本身比较繁琐,那么vcpkg是一个更便捷的安装方式 -3-9。它是 C/C++ 的包管理工具,可以自动处理所有依赖关系。
你可以像使用
apt或yum一样,通过几条命令就完成安装:bash
复制
下载
# 1. 下载并安装 vcpkg git clone https://github.com/microsoft/vcpkg ./vcpkg/bootstrap-vcpkg.sh # 2. 使用 vcpkg 安装 zlmediakit (会自动安装所有依赖) ./vcpkg/vcpkg install zlmediakit使用 vcpkg 可以省去手动安装依赖和编译的步骤,非常方便 -9。
编译过程报错了,但是编译结果说成功了
CMakeFiles/zlmediakit.dir/Shell/ShellSession.cpp.o -MF CMakeFiles/zlmediakit.dir/Shell/ShellSession.cpp.o.d -o CMakeFiles/zlmediakit.dir/Shell/ShellSession.cpp.o -c /data/lbg/project/ZLMediaKit/src/Shell/ShellSession.cpp
/data/lbg/project/ZLMediaKit/src/Rtcp/RtcpFCI.cpp: In function ‘void mediakit::appendDeltaString(std::string&, mediakit::FCI_TWCC::TwccPacketStatus&, int)’:
/data/lbg/project/ZLMediaKit/src/Rtcp/RtcpFCI.cpp:508:32: warning: this statement may fall through [-Wimplicit-fallthrough=]
508 | delta_str.push_back((it->second.second >> 8) & 0xFF);
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/data/lbg/project/ZLMediaKit/src/Rtcp/RtcpFCI.cpp:511:9: note: here
511 | case SymbolStatus::small_delta:
| ^~~~
In file included from /data/lbg/project/ZLMediaKit/3rdpart/media-server/libmpeg/include/mpeg-muxer.h:8,
from /data/lbg/project/ZLMediaKit/src/Record/MPEG.cpp:17:
/data/lbg/project/ZLMediaKit/3rdpart/media-server/libmpeg/include/mpeg-ts-proto.h:4:90: note: ‘#pragma message: This file is deprecated. Please use "mpeg-ts.h" or "mpeg-ps.h" only’
4 | #pragma message("This file is deprecated. Please use \"mpeg-ts.h\" or \"mpeg-ps.h\" only")
| ^
In file included from /data/lbg/project/ZLMediaKit/src/Rtsp/Rtsp.h:19,
from /data/lbg/project/ZLMediaKit/src/Extension/Track.h:17,
from /data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.h:19,
from /data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.cpp:11:
/data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.cpp: In function ‘mediakit::CodecId mediakit::parseVideoRtmpPacket(const uint8_t*, size_t, mediakit::RtmpPacketInfo*)’:
/data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.cpp:332:28: warning: comparison of unsigned expression in ‘>= 0’ is always true [-Wtype-limits]
332 | CHECK(size >= 0, "Invalid rtmp buffer size: ", size);
| ~~~~~^~~~
/data/lbg/project/ZLMediaKit/src/Common/macros.h:37:55: note: in definition of macro ‘CHECK’
37 | #define CHECK(exp, ...) ::mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
| ^~~
/data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.cpp:337:28: warning: comparison of unsigned expression in ‘>= 0’ is always true [-Wtype-limits]
337 | CHECK(size >= 0, "Invalid rtmp buffer size: ", size);
| ~~~~~^~~~
/data/lbg/project/ZLMediaKit/src/Common/macros.h:37:55: note: in definition of macro ‘CHECK’
37 | #define CHECK(exp, ...) ::mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
| ^~~
/data/lbg/project/ZLMediaKit/src/Rtmp/Rtmp.cpp:342:28: warning: comparison of unsigned expression in ‘>= 0’ is always true [-Wtype-limits]
342 | CHECK(size >= 0, "Invalid rtmp buffer size: ", size);
| ~~~~~^~~~
/data/lbg/project/ZLMediaKit/src/Common/macros.h:37:55: note: in definition of macro ‘CHECK’
37 | #define CHECK(exp, ...) ::mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
| ^~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-predefined-identifier-outside-function’ may have been intended to silence earlier diagnostics
In file included from /data/lbg/project/ZLMediaKit/src/Rtsp/Rtsp.h:19,
from /data/lbg/project/ZLMediaKit/src/Extension/Track.h:17,
from /data/lbg/project/ZLMediaKit/src/Record/MPEG.h:20,
from /data/lbg/project/ZLMediaKit/src/Record/MPEG.cpp:12:
/data/lbg/project/ZLMediaKit/src/Record/MPEG.cpp: In member function ‘virtual bool mediakit::MpegMuxer::inputFrame(const Ptr&)’:
/data/lbg/project/ZLMediaKit/src/Common/macros.h:37:52: warning: this statement may fall through [-Wimplicit-fallthrough=]
37 | #define CHECK(exp, ...) ::mediakit::Assert_ThrowCpp(!(exp), #exp, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/data/lbg/project/ZLMediaKit/src/Record/MPEG.cpp:71:13: note: in expansion of macro ‘CHECK’
71 | CHECK(frame->prefixSize(), "Mpeg muxer required aac frame with adts header");
| ^~~~~
/data/lbg/project/ZLMediaKit/src/Record/MPEG.cpp:74:9: note: here
74 | default: {
| ^~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-predefined-identifier-outside-function’ may have been intended to silence earlier diagnostics
/data/lbg/project/ZLMediaKit/src/Rtmp/RtmpProtocol.cpp: In member function ‘const char* mediakit::RtmpProtocol::handle_rtmp(const char*, size_t)’:
/data/lbg/project/ZLMediaKit/src/Rtmp/RtmpProtocol.cpp:741:41: warning: this statement may fall through [-Wimplicit-fallthrough=]
741 | chunk_data.stream_index = load_le32(header->stream_index);
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/data/lbg/project/ZLMediaKit/src/Rtmp/RtmpProtocol.cpp:742:13: note: here
742 | case 8:
| ^~~~
/data/lbg/project/ZLMediaKit/src/Rtmp/RtmpProtocol.cpp:744:36: warning: this statement may fall through [-Wimplicit-fallthrough=]
744 | chunk_data.type_id = header->type_id;
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/data/lbg/project/ZLMediaKit/src/Rtmp/RtmpProtocol.cpp:745:13: note: here
745 | case 4:
| ^~~~
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-predefined-identifier-outside-function’ may have been intended to silence earlier diagnostics
At global scope:
cc1plus: note: unrecognized command-line option ‘-Wno-predefined-identifier-outside-function’ may have been intended to silence earlier diagnostics
[ 67%] Linking CXX static library ../../release/linux/Debug/libzlmediakit.a
cd /data/lbg/project/ZLMediaKit/build/src && /usr/bin/cmake -P CMakeFiles/zlmediakit.dir/cmake_clean_target.cmake
cd /data/lbg/project/ZLMediaKit/build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/zlmediakit.dir/link.txt --verbose=1
/usr/bin/ar qc ../../release/linux/Debug/libzlmediakit.a CMakeFiles/zlmediakit.dir/Codec/AACEncoder.cpp.o CMakeFiles/zlmediakit.dir/Codec/H264Encoder.cpp.o CMakeFiles/zlmediakit.dir/Codec/Transcode.cpp.o CMakeFiles/zlmediakit.dir/Common/Device.cpp.o CMakeFiles/zlmediakit.dir/Common/JemallocUtil.cpp.o CMakeFiles/zlmediakit.dir/Common/MediaSink.cpp.o CMakeFiles/zlmediakit.dir/Common/MediaSource.cpp.o CMakeFiles/zlmediakit.dir/Common/MultiMediaSourceMuxer.cpp.o CMakeFiles/zlmediakit.dir/Common/Parser.cpp.o CMakeFiles/zlmediakit.dir/Common/Stamp.cpp.o CMakeFiles/zlmediakit.dir/Common/config.cpp.o CMakeFiles/zlmediakit.dir/Common/macros.cpp.o CMakeFiles/zlmediakit.dir/Common/strCoding.cpp.o CMakeFiles/zlmediakit.dir/Extension/CommonRtmp.cpp.o CMakeFiles/zlmediakit.dir/Extension/CommonRtp.cpp.o CMakeFiles/zlmediakit.dir/Extension/Factory.cpp.o CMakeFiles/zlmediakit.dir/Extension/Frame.cpp.o CMakeFiles/zlmediakit.dir/Extension/Track.cpp.o CMakeFiles/zlmediakit.dir/Http/HlsParser.cpp.o CMakeFiles/zlmediakit.dir/Http/HlsPlayer.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpBody.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpChunkedSplitter.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpClient.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpClientImp.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpConst.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpCookie.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpCookieManager.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpDownloader.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpFileManager.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpRequestSplitter.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpRequester.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpSession.cpp.o CMakeFiles/zlmediakit.dir/Http/HttpTSPlayer.cpp.o CMakeFiles/zlmediakit.dir/Http/TsPlayer.cpp.o CMakeFiles/zlmediakit.dir/Http/TsplayerImp.cpp.o CMakeFiles/zlmediakit.dir/Http/WebSocketSplitter.cpp.o CMakeFiles/zlmediakit.dir/Onvif/Onvif.cpp.o CMakeFiles/zlmediakit.dir/Onvif/SoapUtil.cpp.o CMakeFiles/zlmediakit.dir/Onvif/pugixml.cpp.o CMakeFiles/zlmediakit.dir/Player/MediaPlayer.cpp.o CMakeFiles/zlmediakit.dir/Player/PlayerBase.cpp.o CMakeFiles/zlmediakit.dir/Player/PlayerProxy.cpp.o CMakeFiles/zlmediakit.dir/Pusher/MediaPusher.cpp.o CMakeFiles/zlmediakit.dir/Pusher/PusherBase.cpp.o CMakeFiles/zlmediakit.dir/Pusher/PusherProxy.cpp.o CMakeFiles/zlmediakit.dir/Record/HlsMaker.cpp.o CMakeFiles/zlmediakit.dir/Record/HlsMakerImp.cpp.o CMakeFiles/zlmediakit.dir/Record/HlsMediaSource.cpp.o CMakeFiles/zlmediakit.dir/Record/MP4.cpp.o CMakeFiles/zlmediakit.dir/Record/MP4Demuxer.cpp.o CMakeFiles/zlmediakit.dir/Record/MP4Muxer.cpp.o CMakeFiles/zlmediakit.dir/Record/MP4Reader.cpp.o CMakeFiles/zlmediakit.dir/Record/MP4Recorder.cpp.o CMakeFiles/zlmediakit.dir/Record/MPEG.cpp.o CMakeFiles/zlmediakit.dir/Record/Recorder.cpp.o CMakeFiles/zlmediakit.dir/Rtcp/Rtcp.cpp.o CMakeFiles/zlmediakit.dir/Rtcp/RtcpContext.cpp.o CMakeFiles/zlmediakit.dir/Rtcp/RtcpFCI.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/FlvMuxer.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/FlvPlayer.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/FlvSplitter.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/Rtmp.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpDemuxer.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpMediaSourceImp.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpMuxer.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpPlayer.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpProtocol.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpPusher.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/RtmpSession.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/amf.cpp.o CMakeFiles/zlmediakit.dir/Rtmp/utils.cpp.o CMakeFiles/zlmediakit.dir/Rtp/Decoder.cpp.o CMakeFiles/zlmediakit.dir/Rtp/GB28181Process.cpp.o CMakeFiles/zlmediakit.dir/Rtp/PSDecoder.cpp.o CMakeFiles/zlmediakit.dir/Rtp/PSEncoder.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RawEncoder.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpCache.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpProcess.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpSender.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpServer.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpSession.cpp.o CMakeFiles/zlmediakit.dir/Rtp/RtpSplitter.cpp.o CMakeFiles/zlmediakit.dir/Rtp/TSDecoder.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtpCodec.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtpMultiCaster.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtpReceiver.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/Rtsp.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspDemuxer.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspMediaSourceImp.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspMuxer.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspPlayer.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspPusher.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspSession.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/RtspSplitter.cpp.o CMakeFiles/zlmediakit.dir/Rtsp/UDPServer.cpp.o CMakeFiles/zlmediakit.dir/Shell/ShellSession.cpp.o
/usr/bin/ranlib ../../release/linux/Debug/libzlmediakit.a
make[2]: Leaving directory '/data/lbg/project/ZLMediaKit/build'
[ 67%] Built target zlmediakit
make -f ext-codec/CMakeFiles/ext-codec.dir/build.make ext-codec/CMakeFiles/ext-codec.dir/depend
make -f srt/CMakeFiles/srt.dir/build.make srt/CMakeFiles/srt.dir/depend
make[2]: Entering directory '/data/lbg/project/ZLMediaKit/build'
cd /data/lbg/project/ZLMediaKit/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /data/lbg/project/ZLMediaKit /data/lbg/project/ZLMediaKit/ext-codec /data/lbg/project/ZLMediaKit/build /data/lbg/project/ZLMediaKit/build/ext-codec /data/lbg/project/ZLMediaKit/build/ext-codec/CMakeFiles/ext-codec.dir/DependInfo.cmake --color=
make[2]: Entering directory '/data/lbg/project/ZLMediaKit/build'
cd /data/lbg/project/ZLMediaKit/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /data/lbg/project/ZLMediaKit /data/lbg/project/ZLMediaKit/srt /data/lbg/project/ZLMediaKit/build /data/lbg/project/ZLMediaKit/build/srt /data/lbg/project/ZLMediaKit/build/srt/CMakeFiles/srt.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/data/lbg/project/ZLMediaKit/build'
make -f ext-codec/CMakeFiles/ext-codec.dir/build.make ext-codec/CMakeFiles/ext-codec.dir/build
make[2]: Entering directory '/data/lbg/project/ZLMediaKit/build'
make[2]: Leaving directory '/data/lbg/project/ZLMediaKit/build'
make -f srt/CMakeFiles/srt.dir/build.make srt/CMakeFiles/srt.dir/build
make[2]: Entering directory '/data/lbg/project/ZLMediaKit/build'
[ 68%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/AAC.cpp.o
cd /data/lbg/project/ZLMediaKit/build/ext-codec && /usr/bin/c++ -DENABLE_HLS -DENABLE_MP4 -DENABLE_RTPPROXY -DENABLE_SRT -DENABLE_VERSION -DHAVE_MMSG_HDR -DHAVE_RECVMMSG_API -DHAVE_SENDMMSG_API -DSOCKET_DEFAULT_BUF_SIZE=262144 -I/data/lbg/project/ZLMediaKit/build -I/data/lbg/project/ZLMediaKit/3rdpart -I/data/lbg/project/ZLMediaKit/ext-codec -I/data/lbg/project/ZLMediaKit/ext-codec/.. -I/data/lbg/project/ZLMediaKit/src -I/data/lbg/project/ZLMediaKit/3rdpart/jsoncpp/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libflv/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libmov/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libmpeg/include -I/data/lbg/project/ZLMediaKit/3rdpart/ZLToolKit/src -g -fPIC -fPIC -Wall -Wextra -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable -Wno-deprecated-declarations -Wno-error=extra -Wno-error=missing-field-initializers -Wno-error=type-limits -Wno-comment -g3 -Wno-predefined-identifier-outside-function -std=gnu++11 -MD -MT ext-codec/CMakeFiles/ext-codec.dir/AAC.cpp.o -MF CMakeFiles/ext-codec.dir/AAC.cpp.o.d -o CMakeFiles/ext-codec.dir/AAC.cpp.o -c /data/lbg/project/ZLMediaKit/ext-codec/AAC.cpp
[ 68%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/AACRtmp.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/AACRtp.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/AV1Rtp.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/G711Rtp.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/H264Rtp.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/AV1.cpp.o
[ 70%] Building CXX object ext-codec/CMakeFiles/ext-codec.dir/H264.cpp.o
cd /data/lbg/project/ZLMediaKit/build/ext-codec && /usr/bin/c++ -DENABLE_HLS -DENABLE_MP4 -DENABLE_RTPPROXY -DENABLE_SRT -DENABLE_VERSION -DHAVE_MMSG_HDR -DHAVE_RECVMMSG_API -DHAVE_SENDMMSG_API -DSOCKET_DEFAULT_BUF_SIZE=262144 -I/data/lbg/project/ZLMediaKit/build -I/data/lbg/project/ZLMediaKit/3rdpart -I/data/lbg/project/ZLMediaKit/ext-codec -I/data/lbg/project/ZLMediaKit/ext-codec/.. -I/data/lbg/project/ZLMediaKit/src -I/data/lbg/project/ZLMediaKit/3rdpart/jsoncpp/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libflv/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libmov/include -I/data/lbg/project/ZLMediaKit/3rdpart/media-server/libmpeg/include -I/data/lbg/project/ZLMediaKit/3rdpart/ZLToolKit/src -g -fPIC -fPIC -Wall -Wextra -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable -Wno-deprecated-declarations -Wno-error=extra -Wno-error=missing-field-initializers -Wno-error=type-limits -Wno-comment -g3 -Wno-predefined-identifier-outside-function -std=gnu++11 -MD -MT ext-codec/CMakeFiles/ext-codec.dir/AACRtmp.cpp.o -MF CMakeFiles/ext-codec.dir/AACRtmp.cpp.o.d -o CMakeFiles/ext-codec.dir/AACRtmp.cpp.o -c /data/lbg/project/ZLMediaKit/ext-codec/AACRtmp.cpp
五、如果你坚持 mp4 方式(推荐命令)
最稳定推流命令:
ffmpeg -re -stream_loop -1 \ -i input.mp4 \ -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/streamvlc可以播放:
vlc 播放器可以播放: http://127.0.0.1/live/stream.live.flvhtml可以播放:
<script src="https://cdn.jsdelivr.net/npm/flv.js@latest"></script> <video id="videoElement" controls></video> <script> if (flvjs.isSupported()) { var videoElement = document.getElementById('videoElement'); var flvPlayer = flvjs.createPlayer({ type: 'flv', url: 'http://127.0.0.1/live/stream.live.flv' // 你的地址 }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); } </script>·SRS (Simple Realtime Server):国产主流开源服务器
,支持WebRTC、SRT等,提供云原生支持与丰富的API,适合企业级部署。
·OvenMediaEngine:专注于子秒级超低延迟直播
支持WebRTC和LLHLS,自带播放器,配置相对简单。
· LiveGo (Go语言):轻量级,基于Go语言实现,部署极简,适合快速搭建小型直播服务。