七 RTP打包与发送
rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。
看一下这个函数:
为了进一步封装(让继承类少写一些代码),搞出了一个虚函数continuePlaying()。让我们来看一下:
MultiFramedRTPSink是与帧有关的类,其实它要求每次必须从source获得一个帧的数据,所以才叫这个name。可以看到continuePlaying()完全被buildAndSendPacket()代替。看一下buildAndSendPacket():
继续看packFrame():
可以想像下面就是source从文件(或某个设备)中读取一帧数据,读完后返回给sink,当然不是从函数返回了,而是以调用afterGettingFrame这个回调函数的方式。所以下面看一下afterGettingFrame():
没什么可看的,只是过度为调用成员函数,所以afterGettingFrame1()才是重点:
看一下发送数据的函数:
可以看到为了延迟包的发送,使用了delay task来执行下次打包发送任务。
sendNext()中又调用了buildAndSendPacket()函数,呵呵,又是一个圈圈。
总结一下调用过程:
最后,再说明一下包缓冲区的使用:
MultiFramedRTPSink中的帧数据和包缓冲区共用一个,只是用一些额外的变量指明缓冲区中属于包的部分以及属于帧数据的部分(包以外的数据叫做overflow data)。它有时会把overflow data以mem move的方式移到包开始的位置,有时把包的开始位置直接设置到overflow data开始的地方。那么这个缓冲的大小是怎样确定的呢?是跟据调用者指定的的一个最大的包的大小+60000算出的。这个地方把我搞胡涂了:如果一次从source获取一个帧的话,那这个缓冲应设为不小于最大的一个帧的大小才是,为何是按包的大小设置呢?可以看到,当缓冲不够时只是提示一下:
当然此时不会出错,但有可能导致时间戳计算不准,或增加时间戳计算与source端处理的复杂性(因为一次取一帧时间戳是很好计算的)。
分享到:
相关推荐
整理过的live555学习笔记,相比较网上其他资源更易阅读学习
很不错的live555入门资料
只传有用的,鄙视上传垃圾。项目之后的总结 live555 RTSP RTCP RTP。包括live555类关系结构图,客户端/服务器传输流程,RTSP学习笔记,及RFC中文规范,H264流传输等。 还有项目之后的代码在我的上传空间中,支持移植
总结了RTSP源码框架,解析非常详细,相关的知识也在文档中有介绍,非常推荐下载学习,提高C++代码阅读能力 分析源码整体结构,讲解相关知识,文档质量高,欢迎下载
rtsp协议学习笔记,可供研究RTSP的人初学使用。
这是本人多年积累的学习笔记,记录详细、内容宽广,对新手高手都会有所帮助 作者: 冯万里(Holemar) 邮箱: daillow@gmail.com QQ: 292598441 MSN: daillo@live.cn 更新日期: 2011-12-21 文档都可以用文本编辑器...
总结了一些深度学习实习的经验和心得,希望能够帮助到你,总结了一些深度学习实习的经验和心得,希望能够帮助到你
Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用 本文件中只有程序,不含笔记和注释,笔记和注释请到空间察看http://giddyandyang.spaces.live.com/
Windows编程 C++ DLL编程 学习笔记 (二)动态链接库的创建 动态调用 静态调用 本文件中只有程序,不含笔记和注释,笔记和注释请到空间察看http://giddyandyang.spaces.live.com/
在Hacktiv8的全栈新手训练营期间,进行个人学习笔记(每日挑战,实时代码等)。 工具: 文本编辑器:Visual Studio Code 终端机:Git bash,MacOS终端机,iTerm 版本控制:Git 回购经理:Github 包管理器:NPM...
学习资源 基本 复杂 数据结构 解决方案模式 问题模式 前 K 和 Kth 顶K 第 K 个 LeetCode-215 数组中第 K 大的元素 LeetCode-703 流中第 K 大的元素 LeetCode-BST 中第 230 K 个最小的元素 LeetCode-378 排序矩阵中的...
立即学习:https://edu.csdn.net/course/play/24756/280662?utm_source=blogtoedu cookie:某些网站为了辨别用户身份、进行session跟踪而存储再本地终端上的数据,cookie存储的数据量有限。 NAME:cookie的名字 VALUE...
机器智能1:监督学习-教程笔记 这是我为柏林工业”课程所做的笔记的集合。 机器智能1是由柏林工业大学Klaus Obermayer教授教授的有关机器学习和人工神经网络的两门连续课程的第一部分。 本课程涵盖的主题: 人工...
7. 不同性别网上学习时浏览其他网页的对比情况 8. 不同性别网上学习时整理笔记的对比情况 9. 不同性别上网课类型的对比情况 10. 不同性别网上学习的原因的对比情况 11. 不同性别网上学习方式的对比情况 12. 不同性别...
3.Angular4学习笔记2 Angular 2 TypeScript Live Template Angular 4.0 架构详解 Angular 4.0 内置指令全攻略 Angular 4.0从入门到实战 angular 如何操作 DOM angular4 cli命令大全 angular4官方教程 Angular4官方...
该存储库包含文件和资源,以补充Codecademy Live:Python主数据系列。 如果您想和我们一起编码,我们建议您在每个直播之前下载数据和代码文件! 我们还建议您下载 ,该工具将同时下载Python,Jupyter笔记本和许多...