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源码彻底解密(RTP解包)

庖丁解牛-----Live555源码彻底解密(RTP解包)

对live555封装的比较好的一个类,网上找到的,觉得不错,给大家共享

对live555封装的比较好的一个类,网上找到的,觉得不错,给大家共享,也不记得从哪里下载的了,版权归原作者!   文件如下: #pragma once #include "BasicUsageEn...

live555简介、整体框架 、openRTSP客户端流程

live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码...

live555中openRTSP用法

openRTSP openRTSP是一个命令行程序,它sk

live555 分析—— OpenRtsp

通过分析live库提供的例子程序 OpenRTSP,可以清晰地了解客户端接收来自网络上媒体数据的过程。注意,RTP协议和RTCP协议接收的数据分别是视音频数据和发送/接收状况的相关信息,其中,RTP协...

庖丁解牛-----Live555源码彻底解密(根据OpenRTSP讲解)

OpenRtsp中写H264文件注意的地方:   1)接受buffer保存到文件 void H264VideoFileSink::afterGettingFrame(unsigned frameSi...

流媒体Live555(五)——openRTSP流程分析

openRTSP是对RTSPClient的实现,与服务器对应的客户端功能 1、初始化 BasicTaskschedular::createNew() BasicUsageEnvironment:...
  • xu_fu
  • xu_fu
  • 2013年07月13日 15:34
  • 6193

live555 分析- openRtsp

通过分析live库提供的例子程序 OpenRTSP,可以清晰地了解客户端接收来自网络上媒体数据的过程。注意,RTP协议和RTCP协议接收的数据分别是视音频数据和发送/接收状况的相关信息,其中,RTP协...

[RTSP]live555-openRTSP客户端流程

1、创建TaskScheduler和BasicUsageEnvironment类; 2、命令行解析,获取流媒体地址和其他选项; 3、创建RTSPClient对象; 4、如果需要,RTSPClie...
  • faihung
  • faihung
  • 2017年06月03日 07:21
  • 462
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:live555之openRTSP----- continueAfterSETUP()视频接收并存储
举报原因:
原因补充:

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