rtmp协议格式:
RTMP — Real Time Messaging Protocol,TCP/IP五层体系结构中应用层协议(流媒体协议),基于TCP传输,在TCP通道上传输命令和数据,一般传输的是 flv,f4v 格式流。
RTMP协议中基本的数据单元称为消息(Message),消息会被拆分成更小的单元,称为消息块(Chunk),以适合在相应的网络环境上传输。

RTMP发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。
接收端通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据,然后再去做其它进行相应。

librtmp:
RTMP_SetupURL():设置会话。
RTMP_Connect(): 建立网络连接(NetConnection)
RTMP_ConnectStream():建立网络流(NetStream,可以有多个NetStream)

1、
message:
message header + message body

message header:
head type + time stamp + playload length + message type id + stream id

messag type: 不同种类的消息包含不同的messag type id,代表不同的功能,RTMP协议中一共规定了十多种消息类型,有着不同的作用。
ID在1-7的消息用于协议控制,一般是RTMP协议自身管理要使用的消息
ID为8,9的消息分别用于传输音频和视频数据。
ID为15-20的消息用于发送AMF编码的命令,负责用户与服务器之间的交互,比如播放,暂停等

2、
chunk: RTMP是按照chunk size对message body进行分块,chunk size指的是chunk的payload(即chunk data)部分的大小,
chunk header + chunk data(默认128字节大小)

chunk header:
chunk basic header + chunk message header + extended timestamp

如:360 字节的消息被分割成128字节的消息块,360 = 2 × 218 + 104,则该message可分为3个chunk,而且最后一个chunk的 chunk data只有104字节

flv协议格式:
音视频RTMP消息的payload中都放的是FLV-TAG格式封装的音视频

flv文件主要由两部分组成:
header + body
header: flv的类型、版本等信息,是flv的开头,一般都差不多,占9bytes

body:
由一个个Tag组成,每个Tag的下面有一块4bytes的空间,用来记录这个tag的长度

Tag:
Tag Header + Tag Data

Tag Header: 存放当前Tag的类型、数据区(Tag Data)长度等信息, 11 bytes
名称 长度 内容
Tag类型 1 bytes 8:音频
9:视频
18:脚本
其他:保留
数据区长 3 bytes 数据区的长度
时间戳 3 bytes 整数,单位是毫秒。对于脚本型的tag总是0
时间戳扩展 1 bytes 将时间戳扩展为4bytes,代表高8位。很少用到
StreamsID 3 bytes 总是0
数据区(data) 由数据区长度决定 数据实体

Tag Data:音频数据、视频数据、脚本数据
Audio Tag:
音频参数(8bits):
音频格式(4bits, SourceFormat=10, aac则包含AACPacketType字节等)、采样率(2bits)、采样的长度(1bit)、音频类型(1bit)

AACPacketType(8bits, 包的类型):
AACPacketTyp e= 0x00,AAC sequence header(即对应AudioSpecificConfig结构信息);
AACPacketType = 0x01,AAC raw;

CompositionTime(24bits 相对时间戳):
AACPacketType = 0x01,相对时间戳;
其它,均为0x00;

Data(负载数据):
AACPacketType = 0x00,Data为AudioSpecificConfig;
AACPacketType = 0x01,Data为AAC raw;

AudioSpecificConfig:
(AAC Profile 5bits | 采样率 4bits | 声道数 4bits | 其他 3bits |)
5bits baudioObjectType
4bits samplingFrequencyIndex
4bits channelConfiguration
1bit frameLengthFlag
1bit dependsOnCoreCoder
1bit extensionFlag

Video Tag:
视频参数(8bits):
帧类型(4bits)、编码ID(4bits,CodecID=7,则包含AVCPacketType 字节等)

AVCPacketType (8bits, 包的类型):
AVCPacketType = 0x00,AVC Sequence Header(即对应AVCDecorderConfigurationRecord结构信息);
AVCPacketType = 0x01,AVC NALU;
AVCPacketType = 0x02,AVC end ofsequence

CompositionTime(24bits 相对时间戳):
AVCPacketType = 0x01,相对时间戳;
其它,均为0x00;

Data(负载数据):
AVCPacketType = 0x00,Data为AVCDecorderConfigurationRecord;
AVCPacketType = 0x01,Data为NALUs;
AVCPacketType = 0x02,Data为空。

AVCDecorderConfigurationRecord 具体格式如下:
| cfgVersion(8) | avcProfile(8) | profileCompatibility(8) | avcLevel(8)
| reserved(6)
| lengthSizeMinusOne(2)
| reserved(3)
| numOfSPS(5) |spsLength(16) | sps(n) | numOfPPS(8) | ppsLength(16) | pps(n) |

rtmp flv协议笔记相关推荐

  1. 趣谈网络协议笔记-二(第十六讲上)

    趣谈网络协议笔记-二(第十六讲上) 流媒体协议:如何在直播里看到美女帅哥? 自勉 给岁月以文明,而不是给文明以岁月!--<三体> 在触不到的獠牙上点火--就像不必仰望那星星就能够解决--就 ...

  2. python解析flv协议(AMF数据)

    学习python也有1周了,因为之前学习了golang,所以觉得python和golang有很多类似的地方,比如切片和语法,python的确是一门很好的语言,至少你了解了之后才会发现其实它很强大,编写 ...

  3. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

  4. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

  5. 趣谈网络协议笔记-二(第十七讲)

    趣谈网络协议笔记-二(第十七讲) P2P协议:我下小电影,99%急死你 自勉 逃离舒适区! 正文 一. P2P协议 整个篇章讲的就是这两个协议之间的区别.P2P协议就是迅雷下载数据时所用的协议, 众所 ...

  6. 趣谈网络协议笔记-二(第十三讲)

    趣谈网络协议笔记-二(第十三讲) 套接字Socket:Talk is cheap, show me the code 前言 这只是笔记,是为了整理刘超大神的极客时间专栏的只是而存在的! 经常会在网络上 ...

  7. 趣谈网络协议笔记-二(第十二讲)

    趣谈网络协议笔记-二(第十二讲) TCP协议(下):西行必定多妖孽,恒心智慧消磨难 前言 哈哈哈,越当我看刘超的通俗讲解,我就越感觉自己的无能.每次当我看了讲解之后,每次当我感觉到这个东西原来是这么简 ...

  8. 趣谈网络协议笔记-二(第十一讲)

    趣谈网络协议笔记-二(第十一讲) TCP协议(上):因性恶而复杂,先恶后善反轻松 自勉 我似乎天性不擅长争斗,但是有些时候,我也必须砥砺前行. 强大是和平的前提,而善良不是. 前言 今天回到家里已经是 ...

  9. 趣谈网络协议笔记-二(第十讲)

    趣谈网络协议笔记-二(第十讲) UDP协议:因性善而简单,难免碰到"城会玩" 自勉 如果手上没有剑,我就无法保护你.如果我一直握着剑,我就无法抱紧你.--<Bleach> ...

最新文章

  1. (转)layoutSubviews总结
  2. HTML特殊字符编码对照表
  3. dedecms织梦专题节点列表内容怎么实现分页
  4. 数据结构关键路径_数据结构与算法之关键路径_一点课堂(多岸学院)
  5. 15、java中的集合(2)
  6. Hihocoer 1336 - Matrix Sum 二维树状数组
  7. 产品经理应该mysql_数据库对产品经理的重要性
  8. 遍历磁盘扩展分区_win7系统如何创建磁盘管理扩展分区【图文教程】
  9. jupyter notebook 某个cell 一直在运行
  10. 什么是php渲染,php数据渲染输出
  11. 3.算法通关面试 --- 哈希表和集合
  12. atmega 128 单片机 智能风扇控制器 PWM 串口 DS18B20 PROTEUS 仿真
  13. mysql查询登录端口_mysql查看、修改端口、指定端口登录
  14. java 地铁线路_个人项目-地铁出行路线规划(Java代码实现)
  15. 人生有三重境界:看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水
  16. python中等好用什么表示_描写中等的词语
  17. 如何将视频从横屏转为竖屏?
  18. 用ps羽化图片边缘(两种羽化图片边缘的方法)
  19. 跟我一起学MiniOA:第一章 1.4 Richfaces控件(连载)
  20. 过了技术面却在HR面被刷?必备40问!从容应对HR,斩获N多大厂offer!

热门文章

  1. Vue小应用之在线网易云(支持mv播放)
  2. outlook 日历共享_在Outlook 2003 / Exchange环境中共享日历
  3. QDockWidget去掉标题栏
  4. IOS网络第二天 - 05-黑酷-NSXMLparser解析(略)
  5. 又一新能源车企上市:九紫新能由热转冷,张水波身价三天缩水32亿
  6. BZOJ 2388--旅行规划(分块单调栈二分)
  7. linux 连接投影仪软件,linux连接投影机方法介绍
  8. IE 桌面图标无法删除急救法!!
  9. 优化OpenCV视频的读取速度
  10. Java | interface 和 implements 关键字【接口,看这篇就够了】