媒体协议层 RTMP/RTP/RTSP/HLS/RTCP/HTTP-FLV/WebRTC/GB28181
libmedia_transfer_protocol 是一个功能强大的媒体传输协议库,提供了完整的流媒体传输解决方案。该库支持多种主流的流媒体协议和封装格式,包括 RTSP、RTP/RTCP、HTTP、HLS、FLV、MPEG-TS、GB28181、SIP 等,适用于音视频流的推拉、分发和处理场景。
libmedia_transfer_protocol/
├── libnetwork/ # 网络层
│ ├── tcp_server.h/cpp # TCP 服务器
│ ├── udp_server.h/cpp # UDP 服务器
│ └── connection.h/cpp # 连接管理
├── libhttp/ # HTTP 协议
│ ├── http_server.h/cpp # HTTP 服务器
│ ├── http_request.h/cpp # HTTP 请求解析
│ └── http_session.h/cpp # HTTP 会话
├── librtsp/ # RTSP 协议
│ ├── rtsp_server.h/cpp # RTSP 服务器
│ └── rtsp_session.h/cpp # RTSP 会话
├── librtp/ # RTP 协议
│ ├── rtp_packetizer.h # RTP 打包
│ └── rtp_depacketizer.h # RTP 解包
├── librtcp/ # RTCP 协议
│ └── rtcp_packet.h/cpp # RTCP 包处理
├── libhls/ # HLS 支持
│ ├── chls_muxer.h/cpp # HLS 复用器
│ ├── cfragment.h/cpp # TS 切片
│ └── cfragment_window.h/cpp # 切片窗口
├── libflv/ # FLV 支持
│ ├── cflv_encoder.h/cpp # FLV 编码器
│ └── amf0.h/c # AMF0 编码
├── libmpeg/ # MPEG-TS 支持
│ ├── cvideo_encoder.h/cpp # 视频编码器
│ ├── caudio_encoder.h/cpp # 音频编码器
│ ├── cpat_writer.h/cpp # PAT 表写入
│ ├── cpmt_writer.h/cpp # PMT 表写入
│ └── mpeg_decoder.h/cpp # TS 流解析
├── libgb28181/ # GB28181 协议
│ ├── gb28181_server.h/cpp # GB28181 服务器
│ └── gb28181_session.h/cpp # GB28181 会话
├── libsip/ # SIP 协议
│ └── sip_parser.h/cpp # SIP 解析器
├── librtc/ # WebRTC 接口
├── congestion_controller/ # 拥塞控制
├── pacing/ # 数据包调度
├── remote_bitrate_estimator/ # 码率估计
└── crypto/ # 加密支持
git clone https://github.com/chensongpoixs/libmedia_transfer_protocol
cd libmedia_transfer_protocol
mkdir build
cd build
cmake .. \
-DWEBRTC_ROOT=/path/to/webrtc \
-DLIBYUV_ROOT=/path/to/libyuv \
-DABSEIL_ROOT=/path/to/abseil \
-DJSONCPP_ROOT=/path/to/jsoncpp
cmake --build . --config Release
#include "libmedia_transfer_protocol/librtsp/rtsp_server.h"
using namespace libmedia_transfer_protocol;
// 创建 RTSP 服务器
RtspServer server;
server.Start("0.0.0.0", 554);
// 服务器会自动处理 RTSP 请求
// 客户端可以通过 rtsp://localhost:554/stream 访问
#include "libmedia_transfer_protocol/libhttp/http_server.h"
#include "libmedia_transfer_protocol/libflv/cflv_encoder.h"
// 创建 HTTP 服务器
HttpServer http_server;
http_server.Start("0.0.0.0", 8080);
// 注册 FLV 流处理器
http_server.RegisterHandler("/live.flv", [](HttpRequest& req, HttpResponse& resp) {
// 创建 FLV 编码器
FlvEncoder encoder;
// 处理视频帧
encoder.WriteVideoFrame(h264_data, timestamp);
// 发送 FLV 数据
resp.SetBody(encoder.GetData());
});
#include "libmedia_transfer_protocol/libhls/chls_muxer.h"
// 创建 HLS 复用器
HLSMuxer hls_muxer;
hls_muxer.SetStreamName("live");
hls_muxer.SetMinFragmentSize(64 * 1024); // 64KB
hls_muxer.SetMaxFragmentSize(2 * 1024 * 1024); // 2MB
// 处理媒体包
hls_muxer.OnPacket(video_packet, timestamp);
// 获取 M3U8 播放列表
std::string playlist = hls_muxer.GetPlayList();
#include "libmedia_transfer_protocol/libmpeg/cvideo_encoder.h"
#include "libmedia_transfer_protocol/libmpeg/caudio_encoder.h"
#include "libmedia_transfer_protocol/libmpeg/cpat_writer.h"
#include "libmedia_transfer_protocol/libmpeg/cpmt_writer.h"
// 创建 TS 流写入器
StreamWriter writer;
// 写入 PAT 表
PatWriter pat_writer(0x0000, 0x1000); // PAT PID=0x0000, PMT PID=0x1000
pat_writer.WritePat(&writer);
// 写入 PMT 表
PmtWriter pmt_writer(0x1000);
pmt_writer.AddProgramInfo(0x1001, 0x1B); // 视频 PID=0x1001, H.264
pmt_writer.AddProgramInfo(0x1002, 0x0F); // 音频 PID=0x1002, AAC
pmt_writer.WritePmt(&writer);
// 编码视频
VideoEncoder video_encoder;
video_encoder.SetPid(0x1001);
video_encoder.EncodeVideo(&writer, h264_data, pts, dts);
// 编码音频
AudioEncoder audio_encoder;
audio_encoder.SetPid(0x1002);
audio_encoder.EncodeAudio(&writer, aac_data, pts);
提供底层网络通信能力,包括 TCP 和 UDP 服务器的实现。
主要类:
TcpServer: TCP 服务器UdpServer: UDP 服务器Connection: 连接管理TcpSession: TCP 会话特性:
完整的 HTTP 协议实现,支持 HTTP 服务器和客户端功能。
主要类:
HttpServer: HTTP 服务器HttpRequest: HTTP 请求解析HttpResponse: HTTP 响应生成HttpSession: HTTP 会话管理特性:
完整的 RTSP 协议实现,支持 RTSP 服务器和客户端。
主要类:
RtspServer: RTSP 服务器RtspClient: RTSP 客户端RtspSession: RTSP 会话支持的方法:
RTP 数据包封装和 RTCP 控制协议实现。
主要类:
RtpPacket: RTP 数据包RtpPacketizer: RTP 打包器RtpVideoFrameAssembler: RTP 视频帧重组RtcpPacket: RTCP 控制包支持的功能:
HTTP Live Streaming 支持,包括 TS 切片生成和 M3U8 播放列表管理。
主要类:
HLSMuxer: HLS 复用器Fragment: TS 切片FragmentWindow: 切片窗口管理特性:
Flash Video 格式支持,包括 FLV 文件封装和 HTTP-FLV 流媒体传输。
主要类:
FlvEncoder: FLV 编码器AMF0: AMF0 数据编码特性:
MPEG Transport Stream 支持,包括 TS 流封装和解析。
主要类:
VideoEncoder: 视频编码器(TS 格式)AudioEncoder: 音频编码器(TS 格式)PatWriter: PAT 表写入PmtWriter: PMT 表写入MpegDecoder: TS 流解析器特性:
国标 28181 视频监控协议支持。
主要类:
Gb28181Server: GB28181 服务器Gb28181Session: GB28181 会话特性:
Session Initiation Protocol 支持。
主要类:
SipParser: SIP 消息解析器特性:
网络拥塞控制算法实现。
主要算法:
特性:
数据包发送节奏控制。
特性:
远程码率估计算法。
特性:
libmedia_transfer_protocol 可用于构建高性能的流媒体服务器:
// 支持 RTSP、HTTP-FLV、HLS 等多种协议的流媒体服务器
支持 GB28181 协议,可用于构建视频监控平台:
// GB28181 设备接入和管理
支持 RTSP 推流、HTTP-FLV 推流等:
// 多协议推流支持
支持 HLS、FLV 等多种格式的点播:
// 多格式点播支持
# CMake 配置选项
option(ENABLE_RTSP "Enable RTSP support" ON)
option(ENABLE_HLS "Enable HLS support" ON)
option(ENABLE_FLV "Enable FLV support" ON)
option(ENABLE_GB28181 "Enable GB28181 support" ON)
option(ENABLE_WEBRTC "Enable WebRTC support" ON)
各模块支持通过配置文件或 API 进行运行时配置。
详细的 API 文档请参考:
库支持多线程并发处理,可充分利用多核 CPU:
// 配置线程池大小
server.SetWorkerThreads(4);
WEBRTC_ROOT 路径欢迎贡献代码!请遵循以下步骤:
git checkout -b temp)git commit -m 'Add some New ')git push origin temp)本项目采用 BSD 许可证,详情请查看 LICENSE 文件。
如果遇到问题或有建议,请通过以下方式反馈:
最后更新:2025-01-XX
版本:1.0.0