流媒体服务器
觅光者
毕业于河海大学,15年+流媒体技术研发管理,熟悉安防和视频会议行业;熟悉onvif、gb28181规范,以及rtsp/rtp/rtcp协议族、sip/sdp等协议。对视频编解码和传输技术比较熟悉。
展开
-
基于rtsp协议实现媒体资源发布或者视频直播
互联网直播业务,除私有协议外,大多采用rtmp协议进行媒体发布或推流,而很少选择使用rtsp协议推流和发布;而rtsp协议也是一个很好的协议,可以分别支持rtpoverudp和rtpoverrtsp,媒体控制更加灵活。下面简单介绍一下如何采用rtsp协议进行推流或媒体资源发布。1、rtsp支持标准的推流扩展,通过扩展announce消息后,可以使用rtspclient主动将媒体流发布到服务器,然后在服务器提供直播或点播服务,不过live555等大多开源项目默认并不支持该扩展;早年间,跟华为、上...原创 2020-05-21 11:30:49 · 1235 阅读 · 0 评论 -
基于live555实现sip-rtsp媒体网关或媒体服务器
前面的文章我们已经实现了rtsp->sip;ES<->PS媒体互转的流媒体服务器,或者媒体网关功能,可以支持媒体转发和分发功能;如果是做视频监控的流媒体服务器或者网关的话,通常还需要补充sip->rtsp协议实现;这边文章就干脆补充完整。要实现sip->rtsp协议的媒体转发服务器,其实方案很多,随便移植一个开源的sip协议栈,然后集成一个rtspclient进去就可以实现了,例如osip做UAS + live555做rtspclient,或者pjsip +rtsp...原创 2020-05-18 12:51:29 · 1409 阅读 · 0 评论 -
基于live555实现流媒体代理服务器(7)-终结篇
前面已经讲了基于live555实现rtsp流媒体代理服务器的完整的流程,以及高性能改造;核心的内容已经讲完了,这篇文章就做一个总结。看看这样做出来的服务器是否还有一些缺陷或者可能的问题。总体上来说,按照前面的方法你已经可以实现了一个高性能的rtsp流媒体代理服务器了,或者叫rtsp协议媒体网关了;那么他还可能存在哪些问题呢?1、live555递归问题:函数递归调用比较费cpu,而且不是一个推荐的处理方式,很多公司甚至直接禁止在代码中出现递归调用,不过live555中无法避免;我们怎么办呢? 1.原创 2020-05-15 16:17:36 · 617 阅读 · 4 评论 -
基于live555实现流媒体代理服务器(6)-epoll实现
前面的文章中,将live555改造成了多线程服务器或代理服务器;本来在live555中,单线程select性能是足够的,fd资源通常情况下也够用;但是改成多线程后,select可能就不够用了,得换成epoll;或者如果你在同一个项目中,其他线程使用了过多的fd资源,不管是文件fd还是socketfd,都会导致fd值增大而超过1024,出现FD_SET溢出;这个时候,就需要epoll出场了,live555改epoll实现比较简单,不多讲,直接给出可以运行的源代码cpp。#include "BasicUs.原创 2020-05-15 11:20:20 · 678 阅读 · 0 评论 -
基于live555实现流媒体代理服务器(5)-多线程
基于live555实现多线程代理服务器或点播服务器,其实是一个比较复杂的流程,为了方便后续的讲述,这里首先给出架构设计,或者说是思路吧!1、首先需要找到创建多线程的点,或说时机;一般来说,至少有两种思路:一种是,单线程处理所有的rtsp消息或信令;使用多线程处理rtp/rtcp媒体流,类似信令和媒体分开处理,这种方法对于rtpoverudp应该没有问题,但是rtpoverrtsp的话,就有些复杂了,或者是否能够实现,我还不太确定;另一种就相对简单了,使用线程池的思路,在live555初始化时候,...原创 2020-05-15 10:47:38 · 787 阅读 · 4 评论 -
基于live555实现流媒体代理服务器(4)-多线程
基于live555实现rtsp代理服务器,前面的三篇文章已经讲完了,如果你只是实现小规模的rtsp代理,其实已经足够,后续的文章就不用看了。前面的文章已经可以确保代理几十路流转发和分发都已经戳戳有余了。不过,前面几篇文章如果想要都理解透彻的话,还是需要一定的live555代码阅读功力的。如果你本来就对live555原理熟悉,并且也基于他开发过项目,应该不难,如果是初学者,估计够呛!那么下面要讲的内容,会更加复杂一些,至少需要对live555有一个全面的认识,才能够看得懂并能够用起来;初步估计应该至少有l原创 2020-05-14 18:20:51 · 918 阅读 · 0 评论 -
基于live555实现流媒体代理服务器(3)
基于live555实现rtsp代理服务器总体业务逻辑流程,现在就可以梳理一下了,参见协议流程图:注意几点即可:1、在rtsp代理服务器收到describe消息的时候,通过streamId首先查询前向的rtspurl;然后通过rtsp代理客户端发送options、describe等消息,都是需要异步通信的,通过上一篇文章的介绍的异步通信方式即可;直到等到了前向的sdp,我们才能给后向回复带sdp的200 OK响应;2、setup消息无需关系顺序,原流程无需修改,上面图片可能少画了一个setu.原创 2020-05-14 16:50:14 · 839 阅读 · 0 评论 -
基于live555实现流媒体代理服务器(2)
基于live555单线程实现异步通信的方式,live555提供了两种异步通信的方式:一种是事件触发机制,可参考MAX_NUM_EVENT_TRIGGERS的定义或调用;另一种是递归。事件触发的方式比较简单,不过live555里面触发的事件最多只能32个,当然,你也可以自己扩展,这里就不多讲了;今天要说的是递归,这个方式效率不高,很多公司的代码中甚至明文禁止使用递归,我估计这个也是live555经常被评估为不适合做服务器的原因吧!使用递归来进行异步通信在live555中的一些例程中可以找到,不过可能很原创 2020-05-14 15:41:00 · 636 阅读 · 0 评论 -
基于live555实现流媒体代理服务器(1)
live555是一个高效简单且优秀的流媒体开源项目,我们可以轻松的基于他开发rtspclient或rtspserver,分别实现rtsp播放器或rtsp点播服务器,但是如果想基于他开发rtsp代理服务器就没有那么简单了,接下来,我会分享一系列的文章来介绍如何实现,欢迎感兴趣的同学关注!好了,关子卖完了,讲一下实现的方法。其实live555项目默认自带了一个rtsp代理服务器:live555ProxyServer.cpp,打开这个文件看一下,或者调试一下,在启动参数里面设置需要代理的前向rtspurl..原创 2020-05-14 15:05:22 · 1216 阅读 · 0 评论 -
IPC网络摄像机rtsp视频流web上H5播放方法
最近因为项目需要,预研了一下rtsp视频流在web上通过H5播放的解决方案,通过网上大量搜索和删减,最终确定一个比较理想且实现较为简单的方案:websocket rtsp proxy + streamdian.js播放器组合;1、H5播放器使用开源的streamdian.js,该公司开源了播放器,不过只实现了aac+h264视频流的解码,对于大多数应用场景来说,基本够用;2、streamdian公司发布的后端websocket rtsp proxy是收费的,根据媒体代理数进行计费,计费单位$,对我大原创 2020-05-14 10:43:56 · 8973 阅读 · 26 评论