live555之openRTSP----- continueAfterSETUP()视频接收并存储

原创 2016年08月31日 15:22:47

发送SETUP之后,接受到返回信息,然后就是创建Sink,没有其他的操作了。

SETUP
客户端提醒服务器建立会话,并确定传输模式:
SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
//uri中 带有trackID=0, 表示对该通道进行设置. Transport参数设置了传输模式, 包的结构. 接下来的数据包头部第二个字节位置就是 interleaved, 它的值是每个通道都不同的, trackID=0的interleaved值有两个0或1, 0表示rtp包, 1表示rtcp包, 接 受端根据interleaved的值来区别是哪种数据包.

服务器回应信息:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 3
Session: 6310936469860791894 //服务器回应的会话标识符
Cache-Control: no-cache
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

在这里面我们可以根据自己的需求定制不同的sink。
setupStream()
|—foreach subsession, setupSubsession()
……….|—foreach subsession, fileSink = H264VideoFileSink::createNew
……….|—subsession->sink->startPlaying(readSource,subsessionAfterPlaying, subsession)
……….|—startPlayingsession(continueAfterPLAY)发送Play请求

play的流程如下
sink->startPlaying(*(subsession->readSource()), subsessionAfterPlaying,subsession);
…………|–continuePlaying()//虚函数,根据你的sink是否重写,动态调用
……………….|–fSource->getNextFrame(fBuffer, fBufferSize,afterGettingFrame,this,onSourceClosure, this);
…………………….|–doGetNextFrame()//虚函数
………………………….|–fRTPInterface.startNetworkReading(networkReadHandler);//将networkReadHandler读取rtp包的操作添加到任务队列。
…………………….|–doGetNextFrame1();
………………………….|–taskScheduler().scheduleDelayedTask(afterGetting);//将afterGetting添加到任务队列

上面流程可以看出添加了两个任务。一个是read 一个是afterGetting(读取完数据之后,消费数据)
networkReadHandler()
……|–bPacket->fillInData()//在里面调用了read操作,将rtp包读到BufferedPacket中

因为

Boolean XXXSink::continuePlaying() {
  if (fSource == NULL) return False;

  fSource->getNextFrame(fBuffer, fBufferSize,
            afterGettingFrame, this,
            onSourceClosure, this);

  return True;
}

所以
afterGetting()
…..|–afterGettingFrame
………….|–addData(fBuffer, frameSize, presentationTime);//在这里你就可以随意处理视频数据了。我的视频源采用的h264,fBuffer就,是es流可以直接解码播放,也可以封装后存储成文件

Live555测试rtsp实时性延迟代码

稍微修改了下,可以直接使用
  • luopeiyuan1990
  • luopeiyuan1990
  • 2014年09月11日 20:13
  • 2984

live555之openRTSP----- continueAfterDESCRIBE()

openrtsp在发送完DISCRIBE之后,server端就会返回描述信息SDP。 DISCRIBE请求报文格式 响应报文格式 例如: > DESCRIBE rtsp://192.16...
  • sstya
  • sstya
  • 2016年08月31日 14:19
  • 529

live555接收实时视频流+ffmpeg解

本人视频监控行业的码农一枚,将平时快速学习的内容进行记录和分享,因水平有限,没学过音视频的高深理论和技术,所写内容多侧重开源库的使用,比较肤浅,如果文中有什么不足,希望大家多多指点。         ...
  • dzhuang123
  • dzhuang123
  • 2015年04月14日 18:00
  • 7787

live555之openRTSP-----流程分析

流程分析也可参照 http://blog.csdn.net/xu_fu/article/details/9318905 ,这篇博客的排版很清晰。 下面是我自己总结的内容:(我这个rtsp客户端实现结...
  • sstya
  • sstya
  • 2016年08月31日 11:58
  • 509

live555 client 接收rtp数据

2014-03-08  22:05:58   描述live555 client即openRTSP的流程,简单点说,playCommon.cpp,流为h264和g726。在实际项目中已成功应用...
  • angelzyb
  • angelzyb
  • 2014年03月11日 22:13
  • 1793

Live555接收h264使用ffmpeg解码为YUV420 .

本文概要:                 本文介绍了一种常用成熟的多媒体解码方案。使用live555作为流媒体数据源,建立rtsp会话请求h264数据流。后端使用ffmpeg解码h264流并保存为...
  • mrwangwang
  • mrwangwang
  • 2014年02月22日 11:56
  • 9779

LIVE555研究之五:RTPServer(二)

LIVE555研究之五:RTPServer(二)      接上文,main函数的几行代码创建了RTSPServer类的子类DynamicRTSPServer对象。RTPServer类是服务器类的基类...
  • ithzhang
  • ithzhang
  • 2014年08月28日 20:17
  • 6670

Live555研究之一mediaServer主循环

mediaServer工程中的live555MediaServer.cpp提供一个main函数,里面创建了一个DynamicRTSPServer对象,DynamicRTSPServer从RTSPSer...
  • u010164551
  • u010164551
  • 2013年07月10日 20:51
  • 704

live555对于实时音视频的支持

live555本身,可以支持将文件作为源,提供RTSP播放服务器功能。 为了使live555能够支持实时流的播放,需要进行改造。 有两种方式: 1,一个比较简单,可以使用管道文件的方式。缺点是当...
  • taixinlfx
  • taixinlfx
  • 2013年04月26日 14:58
  • 3346

LIVE555研究之三:LIVE555基础

LIVE555基础      LIVE555是为流媒体提供解决方案的跨平台C++开源项目。从今天起我们将正式开始深入LIVE555代码。 一、各库简要介绍     LIVE555下包含LiveMedi...
  • ithzhang
  • ithzhang
  • 2014年08月16日 14:54
  • 10098
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:live555之openRTSP----- continueAfterSETUP()视频接收并存储
举报原因:
原因补充:

(最多只允许输入30个字)