live555 h264 videostream 数据流和时间戳的分析
2016-04-06 10:06
681 查看
rtsp客户端发送播放请求后,rtsp服务器调用流程如下
h264 video rtsp
1.ServerMediaSubsession::startStream -> OnDemandServerMediaSubsession::startStream
2.startStream -> StreamState::startPlaying
3.MediaSink::startPlaying
4.MediaSink::continuePlaying->MultiFramedRTPSink::continuePlaying
5.MultiFramedRTPSink::buildAndSendPacket
6.MultiFramedRTPSink::packFrame() fSource->getNextFrame fSource type is H264FUAFragmenter
7.FramedSource::getNextFrame
8.FramedSource::doGetNextFrame ->H264FUAFragmenter::doGetNextFrame -> fInputSource->getNextFrame fInputSource type is H264VideoStreamFramer
9.H264VideoStreamFramer::getNextFrame -> MPEGVideoStreamFramer::doGetNextFrame
10.MPEGVideoStreamFramer::continueReadProcessing -> fParser->parse() fParser type is H264VideoStreamParser
11.H264VideoStreamParser::parse() -> ByteStreamFileSource::doGetNextFrame -> ByteStreamFileSource::doReadFromFile
时间戳生成流程
1.MultiFramedRTPSink::buildAndSendPacket 中组建rtp包头时,获取时间戳的位置fTimestampPosition,然后等待获取数据与时间戳后写入
2.MultiFramedRTPSink::afterGettingFrame1 ->H264VideoRTPSink::doSpecialFrameHandling->MultiFramedRTPSink::setTimestamp 将时间戳写入到rtp包中
3.H264VideoStreamParser::parse 中调用H264VideoStreamFramer::setPresentationTime { fPresentationTime = fNextPresentationTime; } 此fPresentationTime最终将传到步骤2中
4.fNextPresentationTime 初始化由构造函数获取当前时间戳 ,后续在H264VideoStreamParser::parse 当thisNALUnitEndsAccessUnit=TRUE后,根据帧率计算帧duration,然后计算下一帧的时间戳
h264 video rtsp
1.ServerMediaSubsession::startStream -> OnDemandServerMediaSubsession::startStream
2.startStream -> StreamState::startPlaying
3.MediaSink::startPlaying
4.MediaSink::continuePlaying->MultiFramedRTPSink::continuePlaying
5.MultiFramedRTPSink::buildAndSendPacket
6.MultiFramedRTPSink::packFrame() fSource->getNextFrame fSource type is H264FUAFragmenter
7.FramedSource::getNextFrame
8.FramedSource::doGetNextFrame ->H264FUAFragmenter::doGetNextFrame -> fInputSource->getNextFrame fInputSource type is H264VideoStreamFramer
9.H264VideoStreamFramer::getNextFrame -> MPEGVideoStreamFramer::doGetNextFrame
10.MPEGVideoStreamFramer::continueReadProcessing -> fParser->parse() fParser type is H264VideoStreamParser
11.H264VideoStreamParser::parse() -> ByteStreamFileSource::doGetNextFrame -> ByteStreamFileSource::doReadFromFile
时间戳生成流程
1.MultiFramedRTPSink::buildAndSendPacket 中组建rtp包头时,获取时间戳的位置fTimestampPosition,然后等待获取数据与时间戳后写入
2.MultiFramedRTPSink::afterGettingFrame1 ->H264VideoRTPSink::doSpecialFrameHandling->MultiFramedRTPSink::setTimestamp 将时间戳写入到rtp包中
3.H264VideoStreamParser::parse 中调用H264VideoStreamFramer::setPresentationTime { fPresentationTime = fNextPresentationTime; } 此fPresentationTime最终将传到步骤2中
4.fNextPresentationTime 初始化由构造函数获取当前时间戳 ,后续在H264VideoStreamParser::parse 当thisNALUnitEndsAccessUnit=TRUE后,根据帧率计算帧duration,然后计算下一帧的时间戳
相关文章推荐
- 图解opengl 3D 图形绘制实例
- android activity显示不出布局
- JMX 提供的虚拟机检测 API
- Swift快速入门之开始吧
- 正则表达式解释
- Eclipse使用技巧 - 1. 自动添加getter和setter
- jetty idle timeout expired:30000/30000 ms
- Eclipse 安装插件后不显示的解决办法
- 如何成为PHP程序员?
- Linux常用命令之scp
- PHP版本的区别与用法详解
- 单选框 change 事件 。 单选框点击事件,切换不同的table。
- JS中六种数据类型(一)——undefined
- python pexpect 学习与探索
- 【matlab】将matlab中数据输出保存为txt或dat格式
- symlink函数和readlink函数,以及得到当前运行程序本身的路径
- 开发环境配置-weblogic的安装、配置与使用-8
- NTFS For Mac 超强兼容性表现在哪些地方
- char*,const char*,string的相互转换
- exec函数族