灵动的指针


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
Jacob.wang

Jacob.wang

58 日志
16 分类
36 标签
CSDN GitHub

rtmp数据封装四-音频(AAC&G711)

置顶 | 发表于 2018-08-21 | 分类于 RTMP , 音视频 | 阅读次数:

前面文章《rtmp数据封装一-块(chunk)》中讲到rtmp传输媒体数据时是把一整帧数据拆分成chunk的形式发送的。其实一帧媒体数据在拆分成chunk之前还需要进行必要的头部信息封装,本文介绍rtmp协议中AAC/G.711音频数据的头部信息封装。

第一个byte包含音频的编码参数:

  • 1-4bit: audioCodeId
  • 5-6bit: 采样率 00 5.5KHZ, 01 11KHZ, 10 22KHZ, 11 44KHZ
  • 7 bit: 采样长度 0 8bit, 1 16bit
  • 8 bit: 立体声 0 单声道, 1 双声道
阅读全文 »

rtmp数据封装三-视频(H264&H265)

置顶 | 发表于 2018-08-21 | 分类于 RTMP , 音视频 | 阅读次数:

前面文章《rtmp数据封装一-块(chunk)》中讲到rtmp传输媒体数据时是把一整帧数据拆分成chunk的形式发送的。其实一帧媒体数据在拆分成chunk之前还需要进行必要的头部信息封装,本文介绍rtmp协议中H.264/H.265视频数据的头部信息封装。

H.264 rtmp头部信息封装

SPS PPS

AVCDecoderConfigurationRecord

  • frame type (1 byte)
  • fixed 0x00 0x00 0x00 0x00 (4 byte)
  • configurationVersion (1 byte)
  • AVCProfileIndication (1 byte)
  • profile_compatibility (1 byte)
  • AVCLevelIndication (1 byte)
  • lengthSizeMinusOne (1 byte)
阅读全文 »

rtmp数据封装二-AMF

置顶 | 发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

简介

rtmp协议在传输script数据onMetaData时使用AMF(Action Message Format)格式封装。

AMF_TYPE对应的编号:

阅读全文 »

rtmp数据封装一-块(chunk)

置顶 | 发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

简介

由于一帧音视频数据有时候会很大,比如几十M甚至更大。但是为了方便在网络上传输,需要把数据拆分成一个个较小的块,这里称之为消息块(Chunk)。常见的是每块大小为4000 byte左右。

Chunk的结构如下:

  • [Chunk Basic Header]
  • [Chunk Message Header]
  • [Extended TimeStamp]
  • [Chunk Data]

[Chunk Basic Header][Chunk Message Header][Extended TimeStamp] 3个合在一起都是 Chunk Header。

阅读全文 »

rtmp信令交互过程分析七-音视频数据(video audio data)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

概述

在传输完元数据onMetaData之后就开始传输音视频数据了,如视频是H.264编码,第一帧视频帧需要是SPS和PPS,后面才是I帧和P帧。

如果是发布端向服务器推流,方向是C->S,如果是播放器向服务器拉流,方向是S->C。

音视频数据包的封装后面的文章在详谈,这里只是讲信令交互。

阅读全文 »

rtmp信令交互过程分析六-元数据(onMetaData)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

概述

在publish或者play之后就是开始传输媒体数据了,媒体数据分为3种,script脚本数据、video视频数据、audio音频数据。首先需要传输的是脚本数据onMetaData,也称为元数据。onMetaData主要描述音视频的编码格式的相关参数。

如果是发布端向服务器推流,则onMetaData的方向是C->S,如果是播放器向服务器拉流,则onMetaData的方向是S->C。

  • videocodecid=7对应的视频编码是H.264
  • audiocodecid=7对应的音频编码是G711A
  • audiocodecid=8对应的音频编码是G711U
  • audiocodecid=10对应的音频编码是AAC
阅读全文 »

rtmp信令交互过程分析五-播放(play)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

概述

连接成功之后由客户端选择publish还是play,这里讲的是play。

1、C->S : createStream

2、S->C : _result

服务端对客户端createStream请求的反馈

阅读全文 »

rtmp信令交互过程分析四-发布(publish)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

概述

连接成功之后由客户端选择publish还是play,这里讲的是publish。

1、C->S : releaseStream、FCPublish、createStream

  • releaseStream:释放stream,这一步的作用是通知服务端释放对应的stream,以便接下来重新创建stream。
  • FCPublish
  • createStream
阅读全文 »

rtmp信令交互过程分析三-连接(connect)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

概述

握手之后就是连接(connect),由客户端发起,服务端响应,connect指定的app。

1、C->S : connect

  • app:需要connect的app名称
  • flashVer
  • tcUrl
  • fpad
  • capabilities
  • audioCodecs
  • videoCodecs
  • videoFunction
阅读全文 »

rtmp信令交互过程分析二-握手(Handshake)

发表于 2018-08-20 | 分类于 RTMP , 音视频 | 阅读次数:

rtmp信令第一步是握手(Handshake),握手有Simple Handshake和Complex Handshake,Simple Handshake为简单握手,不需要使用加密算法校验,Complex Handshake为复杂握手,需要使用openssl的算法校验。

一、Simple Handshake

概述

1) C0 1 byte,表示客户端RTMP的版本号。

2) C1 1536 bytes (4-time + 4-zero + 1528-random)

  • 时间:4 bytes。时间戳。
  • 零:4 bytes。本字段必须是全零。
  • 随机数据:1528 bytes。随即数据用于区分身份,应充分的随机性。
阅读全文 »
12…6
Jacob.wang

Jacob.wang

一名音视频行业的程序员

58 日志
16 分类
36 标签
RSS
CSDN GitHub
友情链接
  • 暂无
© 2017 — 2023 Jacob.wang
粤ICP备18047603号