EasyDarwin使用udp方式推流实现摄像头直播代码流程分析

EasydDarwin作为当前国内主要开源流媒体服务器之一,支持RTSP流(传输RTP包)的两种传输方式

  • RTP/AVP/UDP
  • RTP/AVP/TCP

采用哪种传输方式是由客户端决定。

用ffmpeg便可向EasyDarwin推流,本文主要分析ffmpeg以UDP方式向EasyDarwin推流时服务器主要代码流程。

ffmpg以UDP方式推流指令:

 

ffmpeg -i rtsp://admin0515@192.168.1.64:554/h264/ch1/main/av_stream -vcodec copy -acodec copy -rtsp_transport udp -f rtsp rtsp://192.168.1.134/test.sdp



图片显示,ffmpeg使用UDP方式向EasyDarwin服务器推流成功,接下来开始分析EasyDarwin服务器代码主要流程。

待续;继续

EasyDarwin服务器启动等待交互


RunServer.cpp void RunServer(){

QTSS_ServerState theServerState = sServer->GetServerState();//获取服务器状态

........

   while ((theServerState != qtssShuttingDownState) &&
            (theServerState != qtssFatalErrorState))
           {//服务器状态正常,while等待

.............

}

}


 

EasyDarwin接收到推流请求,在socket监听中分析


socket监听类为TCPListenerSocket,其有RTSPListenerSocket及HTTPListenerSocket分别对应RTSP和HTTP请求

进入监听

 

每一个请求都触发事件处理函数ProcessEvent(),在ProcessEvent()中调用GetSession()获取RTSPSession

            

RTSP请求进入RTSPListenerSocket::GetSessionTask();

新建RTSPSession后返回给TCPListenerSocket::ProcessEvent(),将获得的RTSPSession theTask加入线程执行

至此进入线程RTSPSession的执行,开始读取数据,theTask will get an kReadEvent event;


 

RTSPSession在Run方法中状态机形式处理RTSP请求中的各种报文


while循环中分析当前RTSP会话状态先后进入各种case对报文内容进行分析处理,实现对RTSPSession中重要属性QTSS_RoleParams fRoleParams的相关初始化。

case kReadingFirstRequest:// 第一次对请求报文进行处理

case kHTTPFilteringRequest://对报文内容进行过滤

case kReadingRequest:

case kHaveNonTunnelMessage:// 说明请求报文格式是正确的,请求已进入受理状态

其中进入case kPreprocessingRequest:才是调用相关模块,此时调用的便是QTSSReflectorModule转发模块。

CallDispatch调用的便是QTSSReflectorModuleDispatch函数

传入的QTSS_Role为QTSS_RTSPPreProcessor_Role,进入ProcessRTSPRequest(&inParams->rtspRequestParams)函数

获取当前请求的方法,分析调用对应的函数DoAnnounce,DoSetup其中UDP推流方式不会调用DoDescribe,最终调用DoPlay方法。

在DoAnnounce中判断SDP信息,获取RTSP流信息并保存相关内容以便后续使用

在DoSetup中才是真正构建UDPSocketPair,RTP数据流

主要有下面两点

获取转发会话ReflectorSession

为推流端 创建RTPStream并进行设置(AddRTPStream)

在DoPlay方法为推送端中保持会话连接

 


至此EasyDarwin完成ffmpeg以UDP方式推送RTSP流的接收,并将RTP流放入转发会话。等待客户端访问转发流。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值