live555 接收rtsp视频流流程分析

RTSP交互流程(http://blog.sina.com.cn/s/blog_6da4642d0100quwa.html)

C
表示RTSP客户端,S表示RTSP服务端

 C->S: OPTION request            //询问S有哪些方法可用

S->C: OPTION response        //S
回应信息中包括提供的所有可用方法

 C->S: DESCRIBE request      //要求得到S提供的媒体初始化描述信息

S->C: DESCRIBE response      //S
回应媒体初始化描述信息,主要是sdp

 C->S: SETUP request         //设置会话属性,以及传输模式,提醒S建立会话

S->C: SETUP response         //S
建立会话,返回会话标识符及会话相关信息

 C->S: PLAY request          //C请求播放

S->C: PLAY response          //S
回应请求信息

S->C:
 发送流媒体数据

 C->S: TEARDOWN request     //C请求关闭会话

S->C: TEARDOWN response     //S
回应请求

上述的过程是标准的RTSP流程,其中第3步和第4步是必需的。

OpenCore
在执行完PLAYER_SET_DATASOURCEprepare之后,执行PLAYER_INIT时,如果发现datasourcertsp流,则进入rtsp模块。

OpenCore
RTSP模块实现在Pvrtsp_client_engine_node.cpp中,PVRTSPEngineNode::SendRtspDescribe()描述了连接建立过程中的状态变化过程。

需要注意的时,opencore在发出OPTION request后,并不会等着收response,而是直接发DESCRIBE request,然后才开始收OPTION responseDESCRIBE response

Live555
RTSPServer.cpp中用RTSPServer::RTSPClientSession::incomingRequestHandler()来处理来自client端的request

 

 

RTSP源码接收端使用样例:

// RtstClientTest.cpp

#include "stdafx.h"

#include "RtspRequest.h"

#include "Rtp.h"

 

RtspRequest g_RtspRequest;

int _tmain(int argc, _TCHAR* argv[])

{

 // 接收

  string url = "rtsp://192.168.1.1:554/aacAudioTest";

  string setupName = "aacAudioTest";

  INT rtpPort = 8080;

  INT rtcpPort = rtpPort + 2;

  string sdp;

  INT64 sess;

  g_RtspRequest.Open(url.c_str(), "127.0.0.0", 0);

  g_RtspRequest.RequestOptions();

  g_RtspRequest.RequestDescribe(&sdp);

  g_RtspRequest.RequestSetup(setupName.c_str(), transportModeRtpUdp, rtpPort , rtcpPort , &sess);

  g_RtspRequest.RequestPlay();

  Rtp* pRtp = new Rtp();

  pRtp->Open("127.0.0.0", rtpPort);

  PBYTE pBuffer = new BYTE[1024*1024*10];

  int iRead;

  INT payloadType;

  WORD sequenceNumber;

  INT32 timeStamp;

  INT32 ssrc;

  while(TRUE)

  {

      iRead = pRtp->Read(pBuffer, 1024*1024*10, &payloadType, &sequenceNumber, &timeStamp, &ssrc);

      if (iRead > 0)

      {

           // save buff   

      }

 

  }

  delete pRtp;

  g_RtspRequest.RequestPause();

  g_RtspRequest.RequestTeardown();

  g_RtspRequest.Close();

  delete []pBuffer;

  return 0;

 

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值