1.Live555介绍
Live555是一个开源的C++库,实现RTSP/RTP/RTCP协议,常用于构建流媒体服务器和客户端。它支持MPEG、H.264、H.265等多种编码的实时传输。Live555设计为单线程、事件驱动,适合嵌入式设备和高性能服务器。
参考:https://wkmsa.cn/category/sleep-environment.html
2.核心架构
Live555的核心是BasicTaskScheduler(事件循环)和UsageEnvironment(日志)。开发者需继承OnDemandServerMediaSubsession并实现createNewRTPSink和createNewStreamSource,以提供特定的媒体源(如从文件、摄像头读取)。通过调用RTSPServer::createNew创建RTSP服务。
3.实现自定义媒体源
假设要从网络摄像头读取H.264裸流,需要:
继承FramedSource类,重写doGetNextFrame方法。
在doGetNextFrame中填充fTo(缓冲区),设置fFrameSize,并调用afterGetting(this)。
使用TaskScheduler的延时或事件触发下次读取。
创建H264VideoStreamDiscreteFramer将裸流转换为NAL单元帧。
4.案例:低延迟直播系统
某监控厂商使用Live555搭建RTSP直播服务。摄像头推流到C++服务器,服务器使用Live555转发给多个客户端。优化:
关闭RTCP部分以减少带宽。
使用OutPacketBuffer调小缓冲区降低延迟(但需防丢包)。
使用MultiFramedRTPSink的setPacketSizes优化MTU。
最终实现端到端延迟<1秒,支持500路并发。
5.与FFmpeg对比
FFmpeg可以处理更多的编码和封装格式,但Live555专注于RTSP/RTP,代码更简洁,适合嵌入式。两者可以结合:FFmpeg解码,Live555推流。
参考:https://wkmsa.cn
6.总结
Live555证明了C++在流媒体协议栈中的高效性。对于需要定制RTSP服务的项目,Live555是成熟的基础库。掌握它,可以快速构建广播系统、视频会议等实时应用。