news 2026/11/1 12:13:45

直播推流方案2026

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直播推流方案2026

目录

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/Debug
sudo ./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/stream

vlc可以播放:

vlc 播放器可以播放: http://127.0.0.1/live/stream.live.flv

html可以播放:

<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语言实现,部署极简,适合快速搭建小型直播服务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 15:47:20

C语言文件操作实战:持久化存储GME-Qwen2-VL-2B生成的图像特征向量

C语言文件操作实战&#xff1a;持久化存储GME-Qwen2-VL-2B生成的图像特征向量 最近在折腾一个图像检索的小项目&#xff0c;用上了GME-Qwen2-VL-2B模型来提取图片特征。模型跑得挺快&#xff0c;但问题来了&#xff1a;每次启动都要重新提取特征&#xff0c;太浪费时间。特别是…

作者头像 李华
网站建设 2026/10/31 19:49:19

蓝桥杯EDA竞赛全攻略

蓝桥杯EDA设计与开发竞赛全面解析 一、比赛概况与基本规则 蓝桥杯EDA设计与开发组是蓝桥杯大赛中的重要竞赛类别&#xff0c;主要考察参赛者在电子设计自动化领域的综合能力。根据历届比赛经验&#xff0c;该竞赛具有以下显著特点&#xff1a; 比赛特征具体说明比赛时长通常…

作者头像 李华
网站建设 2026/11/1 12:13:44

2026年文必过降AI靠谱吗?对比3款后告诉你答案

2026年文必过降AI靠谱吗&#xff1f;对比3款后告诉你答案 先给结论&#xff1a;文必过的降AI功能勉强能用&#xff0c;但横向对比之后&#xff0c;我更推荐嘎嘎降AI&#xff08;aigcleaner.com&#xff09;。通过率更高、性价比更好、售后也更有保障。下面用数据说话。 我是今…

作者头像 李华
网站建设 2026/10/28 15:32:26

linux入门第九章,grep查找,wc查询,管道符

grep从文件中通过关键字过滤文件行&#xff0c;大白话翻译就是查找某个单词在文件的哪一行。语法&#xff1a; grep [-n] 关键字 文件路径 -n 可选&#xff0c;表示在结果中显示匹配行的行号 关键字必填&#xff0c;表示过滤的关键字&#xff0c;建议使用双引号将关键字包围起来…

作者头像 李华
网站建设 2026/10/19 23:06:14

层次分析法AHP在论文案例分析中的应用指南

引言 在撰写管理学、经济学、工程学等领域的学术论文时&#xff0c;我们经常需要对多个指标进行权重分析和综合评价。层次分析法&#xff08;Analytic Hierarchy Process&#xff0c;简称AHP&#xff09;作为一种经典的多准则决策方法&#xff0c;因其理论严谨、操作简便而被广…

作者头像 李华
网站建设 2026/10/20 21:53:10

CogVideoX-2b效果展示:同一Prompt下不同采样步数的动态质量对比

CogVideoX-2b效果展示&#xff1a;同一Prompt下不同采样步数的动态质量对比 本文基于智谱AI开源的CogVideoX-2b模型&#xff0c;在AutoDL环境中进行了显存优化和依赖冲突解决&#xff0c;为您展示不同采样步数下的视频生成效果对比。 1. 认识CogVideoX-2b&#xff1a;本地化视频…

作者头像 李华