1、rtmp协议

rtmp协议出自adobe公司的设计,该设计非常精良,级联转发等也是设计良好,整体架构是非常产品化的,而adobe公司自身的fms,ams等服务器产品遵循该协议发布。性能优异,稳定。rtmp协议里面又包含了flv容器,而flv格式非常合适网络传输,这一点和实时传输协议rtp【realtime transfer protocol】协议类似,rtp协议的包头12个字节,简单却又融汇了传输的精髓。为了深刻理解协议,我们必须从发布端,服务器端,接收端三个端编写代码,从而能够让协议了然于心。在编写的过程中也许几经困难,因为三方调试并不知道哪一端出了问题,多忍,多分析,会造就自己分析问题得能力。

2 时间戳问题

时间戳问题一直是一个大的问题,该问题遍布了发布端,服务器端,接收播放端。

2.1 发布端

例如比较出名的obs studio,该发布端做得非常精彩,很多教师,学生,以及网络工作者喜爱该产品,尤其是在时间戳上面,做得非常到位,服务器在接收的时候包少,尤其是控制了音频包,熟悉rtmp协议的人知道rtmp是分trunk发送的,而每个trunk得时间戳是属于该帧得时间戳,是一样得。

2.2 服务端得相对和绝对

服务端接收得时间戳第一个是绝对时间戳,后面的都是相对时间戳,出家人不打诳语。像ffmpeg这样得发送方可能将第一个时间戳指定为0,这也是对得,ffmpeg并不期望直接是一个产品化得东西,而是我们自己必须理解时间戳,自己去改变。原则是:
当我们收到绝对时间戳是,整个时钟周期必须重新置位,重新开始,否则就是简单得相对时间戳累加成为真正得时间戳。

3 发布端

我们自己做了一个发布端,用于测试,该时间戳,预览、发送等等使用了最简单的方式,发布的方法大体又有三种
1 使用ffmpeg
2 使用librtmp
3 自己编写代码

如果说熟悉ffmpeg,那大可以使用ffmpeg来直接推流,方便简单,如果说熟悉librtmp,大可以使用librtmp来做,这两项都非常简单,但是时间戳还是稍复杂,最重要的还是理解。音频时间戳我们从服务端接收的时候,发现大约每隔23毫秒会发送一个,下图是自己的服务器打印时间戳,自已写一个服务器有利于理解协议,这个是值得的,虽然有很多开源的,例如nginx的rtmp模块开创了第一个服务器端的

3.1 音频时间戳得问题是

23 毫秒是从哪里来得?当然这和我们得采集得模式有关系,我们采集音频得时候用44100HZ,也就是采样时间间隔是1/44100, 而每次采样得数据叫sample,是可以设定得,比如每次sample设置为1024,我们知道一般aac音频我们都喜欢设定这个值,ok,那帧间隔就可以计算出来了,把时间换算成毫秒, 每一个数据需要得时间是 1000/44100,那1024个数据需要多少时间呢?
1000*1024 / 44100 = 23.2
所以我们从服务器上打印就是23毫秒得间隔trunk时间,而因为这个trunk 又是小于我们设定得值如最大trunk为4096,实际上这一个trunk为一帧。
注意23是不精确得,所以每隔一定得时间,像ffmpeg这种方式会调整时间戳,偶尔输出一个不一样得时间。

3.2 视频时间戳得问题是

100毫秒是哪里来得?从我们得服务器打印可以看出,9是flv容器中视频得typeid, 8是音频,每个9之间得相隔为100.
视频很直白,就是1秒钟采集10帧,1000/10 = 100.
在ffmpeg中发送得pts一定是这种值,在编码得时候,我们让视频得pts为每次加1,而发送得时间戳却必须调整为服务器接收到得时间戳,ffmpeg中得函数av_packet_rescale_ts就是这个作用

av_packet_rescale_ts(pkt, inAVCodecContext->time_base, _rtmp_video_stream->time_base);

这个函数让pkt里面得pts从单一得值转化到我们发送得频率值计算出真正得相对时间戳,注意是相对时间戳。

librtmp得时间戳使用绝对和相对得直接值,不像ffmpeg那样,所以我们简单得拿时间去做减法就行,所以,我们如果理解了时间戳,那就没有烦恼了。

3.3 排序问题

音频包和视频包是否需要排序输出,答案是不一定得,我们可以使用两种方式来做:
1 争抢发送
2 排序发送

服务器端

未完待续

接收端

未完待续

rtmp服务器 协议之同步相关推荐

  1. JavaScript学习笔记(五)---cookie、Proxy、服务器、PHP语言、http协议、同步异步、事件轮循机制、ajax编写、接口

    JavaScript学习笔记(五)---cookie.Proxy.服务器.PHP语言.http协议.同步异步.事件轮循机制.ajax编写.接口 1.cookie 1.1cookie概念 1.2cook ...

  2. H264 推流到RTMP服务器

    这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以 ...

  3. Mac使用nginx+rtmp服务器

    一.安装Homebrow 已经安装了brow的可以直接跳过这一步. 执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/ ...

  4. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

  5. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...

  6. rtmp服务器与播放器的交互

    转载于:http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html RTMP(Real Time Messaging Protoc ...

  7. java 直播服务器_MyLive--使用JAVA实现的直播RTMP服务器

    MyLive 使用JAVA实现的直播RTMP服务器 介绍 MyLive 是一个我用业余时间使用Java实现的RTMP直播服务器,它并不是一个全功能的RTMP实现,也就是说不支持seek和play2命令 ...

  8. 将h.264裸码流推送到RTMP服务器

    h.264裸码流的格式,参考"H.264-AVC-ISO_IEC_14496-10.pdf, page 211.",这个文档的下载地址:https://github.com/win ...

  9. linux人脸识别视频推流,RTMP推流协议视频智能分析/人脸识别/直播点播平台EasyDSS接口调用注意事项介绍...

    TSINGSEE青犀视频目前推出了前端支持不同协议设备接入的视频智能分析平台,包括RTSP协议的EasyNVR.GB28181协议的EasyGBS,RTMP推流协议的EasyDSS,还有能够进行人脸识 ...

最新文章

  1. uedit修改文件上传路劲,支持api文件接口
  2. 使用babel编译es6
  3. 大脑如何编码视觉信息?动态电极到图像(DETI) 映射技术也许有助于我们揭示其原理...
  4. c++ opencv roi
  5. 关于对 NUMA 理解(学习笔记,便于以后查阅)
  6. 前端和后端哪个工资高_新媒体运营和网络运维哪个好,哪个工资待遇高,门槛低?...
  7. 原生js简单实现双向数据绑定原理
  8. kodexplorer开源网盘php程序配置解析
  9. 备案php代码,备案查询API PHP代码
  10. react 绑定 箭头函数_为什么箭头函数和React渲染中的绑定有问题
  11. request和response的中文乱码问题
  12. Python笔记:0
  13. Socket与拔掉网线
  14. AndroidStudio与eclipse打包的时候报错。Error:(4) Error: ssdk_instapager_login_html is not translated in......
  15. 打印机扫描显示计算机故障或繁忙,打印机无法扫描_如何用打印机进行扫描,如何用打印机扫描文件...
  16. 为什么变形兄弟只有四人拿到bilibili百大UP主?【B站数据分析】
  17. 网站服务器怎么做防御?遇到攻击如何解决?
  18. java 错误:The public type *** must be defined in its own file***
  19. java将map转json字符串
  20. SQL Server提权之xp_cmdshell

热门文章

  1. python数据挖掘学习笔记】十九.鸢尾花数据集可视化、线性回归、决策树花样分析
  2. python读取html文件正则替换_Python使用正则表达式过滤或替换HTML标签的方法详解...
  3. 图片像QQ有消息闪动的代码:
  4. 上海理工大学菜鸟驿站把无人车送进社区 协助解决抗疫物资“最后100米”配送...
  5. 快手2021年营收810亿元 经调整净亏损188亿元
  6. 京东开通数字人民币“硬件钱包”线上消费功能
  7. 小鹏汽车回应“非法收集人脸数据被罚10万”:误购第三方设备 数据已删除
  8. 体验完23万的小鹏P5,凯美瑞不香了 | 视频
  9. 太畅销了!AirTag送货时间延长至4-5周
  10. 蛋壳公寓回应破产传闻:没有破产 也不会跑路