简单的流媒体服务器

本文作者分享了自己实现的一个简单流媒体服务器,该服务器支持RTSP发流和接收,包括RTSP、GB28181和RTMP协议。服务器基于优化的Linux多线程网络框架,RTSP部分由作者自行实现,RTP利用ffmpeg代码。GB28181协议借助osip2和tinyxml2,而RTMP则基于LIBRTMP,FLV解析部分也部分使用ffmpeg代码。作者强调在实现协议时应阅读规范文档,理解其原理。
摘要由CSDN通过智能技术生成

本文描述的代码位于https://github.com/greenjim301/pmedia

一直以来都希望能把自己平时工作中积累的东西分享出来,这个简单的流媒体服务器算是一次重要的尝试。这个流媒体服务器支持RTSP发流,收流协议支持RTSP、GB28181和RTMP。下面对这个流媒体服务器的实现做一个简要的介绍。

整个服务器的基座是一个多线程网络、消息通信框架。之前写的几个项目我也封装了一个类似的框架,而且是跨平台的,支持Windows、Linux和Android。但我对这个跨平台的框架不是太满意,为了跨平台做了太多妥协。所以在写这个服务器的时候,把这个框架做了精简与优化,只支持Linux,我对这个框架满意多了。

RTSP发流与收流都是我自己实现的,之前写过RTSP的服务器和客户端,这次做了一个整合。RTP的解析与构建都是用ffmpeg的代码实现的。

GB28181的实现借助了osip2和tinyxml2。osip2用于SIP消息的解析与构建,tinyxml2用于XML消息体的解析。国标实现最大的难点在于PS流解析提取ES流,这部分代码挪用了ffmpeg的PS解析代码。由于应用场景不一样,ffmpeg的PS解析代码并不是直接拿过来就能用,期间调试校订了好久才能正确工作。得到ES流后,从ES流提取NALU、拆分RTP包的代码基本都是照搬ffmpeg的代码。GB28181协议内容很多,我只实现了注册和取流部分,满足这个服务器的基本要求。网上我见比较多写GB28181协议的可能是要付费才给看代码的,每个人的选择不一样,我是倾向于分享的,但受限于时间和精力,我也很难去补全GB28181的实现。唯希望我的代码能起到抛砖引玉的作用,为想实现国标的人提供一个思路。

RTMP的实现基于LIB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值