以下内容源于朱有鹏课程,如有侵权,请告知删除。

一、ORTP库源码分析

1、ORTP库概览

(1)库提供一堆功能函数(本身没有main),都在src目录下

(2)库的使用给了案例(有main),在src/tests目录下

(3)相关数据结构和头文件,在include/ortp目录下

(4)ortp实现了rtp和rtcp协议,前者负责传输,后者负责控制和同步协调

2、ORTP库的使用案例分析

src/tests/rtpsend.c的函数调用关系

  • ortp_init
  • av_profile_init(&av_profile)初始化全局变量av_profile(该变量记录了可以识别哪些profile,如果你要用哪部分,要添加进来。有的本来已经添加,有的没有但你要用的话,要自己添加。这也是为什么“第三季1二2”中为何要添加那行代码的原因)。
  • ortp_scheduler_init    ORTP调度器:即仲裁机构(一段代码),功能是在一个任务中完成多个会话的发送和接收,类似于select。
  • rtp_session_new  会话创建

3、rtp的session

(1)rtp通过会话来管理数据发送和接收,会话的本质是一个结构体的实例化,该结构体管理很多信息。

(2)创建会话用rtp_session_new

(3)rtp发送用rtp_session_send_with_ts

(4)底层真正干活的还是socket接口那一套,参考rtpsession_inet.c

4、ORTP的一些小细节

(1)port.c中对OS的常用机制(任务创建和销毁、进程管理和信号量等)进行了封装,便于将ortp移植到不同平台中。

(2)utils.c中实现了一个双向链表

(3)str_util.c中实现了一个队列管理

(4)rtpparse.c和rtcpparse.c文件实现了解析收到的rtp数据包的部分

(5)jitterctl.c中实现了jitter buffer来防抖。jitter buffer技术是ip 音视频通信里相对比较高级的主题,jitter buffer模块好坏通常是衡量一个voip客户端/服务器好坏的技术点之一,尤其是在网络抖动比较严重,如3g, wifi环境,数据包的rtt值不均衡往往会导致语音卡顿,丢字等现象,jitter buffer 模块通过缓存一段数据包,把数据包重排,并均匀的送给播放端,一个好的jitter buffer实现通长是动态调整缓存大小的,在网络延迟大,抖动严重时会动态增加缓存大小,在网络恢复时动态减小缓存大小以减少端到端的播放延迟。

二、RTP发送实验的源码分析

注意:

1、这里的RTP发送实验的源码,是指修改后两个文件

mpp/sample/venc/sample_venc.c

common/sample_common_venc.c

修改的内容以及源文件见“第三季1:ORTP库的移植与局域网视频传输”中的第三内容。

2、回忆起之前学过的关sample_venc.c文件,其中函数SAMPLE_VENC_1080P_CLASSIC有7个步骤。RTP发送实验与之前学的,相同点在于前五个步骤是一样的,不同点在于之前的sample_venc.c在第六步骤将数据一包一包地写到文件里,而RTP发送实验是将数据一包一包地发送出去。

1)第六步的代码如下。

RTP发送实验源码的具体的改动,在SAMPLE_COMM_VENC_GetVencStreamProc函数以及它所调用的函数中:

1)SAMPLE_COMM_VENC_GetVencStreamProc函数代码

2)SAMPLE_COMM_VENC_SaveStream函数,以及调用的函数。

1、ortp库相应API

  • 通过分析追踪RTP发送源码的第六步骤的SAMPLE_COMM_VENC_GetVencStreamProc函数中的rtpInit函数,发现其和src/tests/rtpsend.c中main函数部分代码很类似。

2、发送函数的重点讲解

即rtpSend函数,在修改后的common/sample_common_venc.c中。

3、可能的拓展方向

(1)裁剪sample到最简化

(2)修改一些参数做实验(譬如每包字节数、IP地址、端口号等)

4、VLC的sdp文件格式

第三季2:ORTP库的源码分析、RTP发送实验的源码分析相关推荐

  1. 第三季1:ORTP库的移植与局域网视频传输

    以下内容源于朱有鹏课程,如有侵权,请告知删除. 本季课程重点在于使用ORTP库来实现局域网视频实时传输. 一.ORTP的介绍 1.视频网络传输的两种方式 (1)基于下载 比如http(Hyper Te ...

  2. Android源码分析(十一)-----Android源码中如何引用aar文件

    一:aar文件如何引用 系统Settings中引用bidehelper-1.1.12.aar 文件为例 源码地址:packages/apps/Settings/Android.mk LOCAL_PAT ...

  3. 2018年排名Top 100的Java类库——在分析了277,975份源码之后得出的结论

    最近,OveOps公布了The Top 100 Java Libraries in 2018 - Based on 277,975 Source Files,Hollis查看了这份榜单,做了翻译和补充 ...

  4. 计算机毕业设计ssm动漫交流与推荐分析系统633g7系统+程序+源码+lw+远程部署

    计算机毕业设计ssm动漫交流与推荐分析系统633g7系统+程序+源码+lw+远程部署 计算机毕业设计ssm动漫交流与推荐分析系统633g7系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B ...

  5. Python新冠疫情可视化分析系统 计算机专业毕业设计源码08504

    摘 要 文中首先对新冠疫情可视化分析的项目需求进行了背景分析,接着介绍了项目的总体设计思路,然后具体阐述了疫情数据库的设计.疫情数据的查询.疫情数据的展示,并分析了核心代码.文中利用MySQL数据库存 ...

  6. 红黑树分析与JDK8中HashMap源码解析

    红黑树分析与JDK8中HashMap源码解析 BST O(1), O(n), O(logn), O(nlogn) 的区别 红黑树-RBTree 插入数据 HashMap中红黑树的插入操作 HashMa ...

  7. 【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode

    1.转码流程 1)转码前初始化:打开输入输出文件,初始化编码器.解码器.过滤器,创建多线程,设置串口终端等: 2)while循环处理每一包数据,核心函数 transcode_step(稍后分析): 3 ...

  8. 【OkHttp】OkHttp 源码分析 ( 同步 / 异步 Request 请求执行原理分析 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  9. jdk源码分析书籍 pdf_如何阅读源码?

    点击上方"IT牧场",选择"设为星标" 技术干货每日送达! 阅读源码是每个优秀开发工程师的必经之路,那么这篇文章就来讲解下为什么要阅读源码以及如何阅读源码. 首 ...

最新文章

  1. 智能车竞赛计时系统感应线圈放在节能充电线圈上输出电压会多大?
  2. SharePoint 2013 配置HTTPS(SSL)
  3. python下载的文件放在哪里的-Python下载文件的方法
  4. Python入门:常用模块—logging模块
  5. java Web发布的两种方式
  6. 【CV】一文看懂目标检测神器YOLO5
  7. 你最擅长哪种数学思维?
  8. Java @Transient 注解使用
  9. SQL注入漏洞修复办法
  10. php 二维数组 根据值 找,PHP编程根据二维数组某个字段的值查找值所在的一维数组...
  11. (转)开发监控Linux 内存 Shell 脚本
  12. java wait 执行顺序_JAVA 的wait(), notify()与synchronized同步机制
  13. Spring IOC注入详解
  14. 基于android p的miui,小米8青春版终于迎来基于AndroidP的MIUI10系统,米粉欢呼
  15. 二分插入排序(折半插入排序)--排序算法(六)
  16. 印象笔记如何分享链接_【记录】试用印象笔记最新的笔记分享出页面的功能
  17. 明尼苏达大学计算机工程,关于美国明尼苏达大学电气与计算机工程系洪明毅博后学术报告的通知...
  18. 要坚信自己可以变成白天鹅的事实
  19. 将QMessageBox对话框中按钮的“Yes/No”转换成中文的“是/否”
  20. Vagrant安装和使用

热门文章

  1. Django框架之Filters(过滤器)、母版的使用
  2. Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)
  3. 编译安装 zbar 时两次 make 带来的惊喜
  4. 注解(一)- 基础知识与运行时注解
  5. 泛型算法(二十三)之排列算法
  6. 存储过程——介绍(一)
  7. 一道关于比赛胜负的Sql查询题目
  8. as3调用外部swf里的类的方法
  9. HDOJ树形DP专题之Centroid
  10. (String) 和 String.valueOf() 两种字符串转换的区别