版权声明:本文为博主原创文章,转载请注明原地址。 https://blog.csdn.net/Jacob_job/article/details/81866239
概述
在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
举例
发布端向服务器推流 C->S
AMF0 Data onMetaData()
RTMP Header
01.. .... = Format: 1
..00 0011 = Chunk Stream ID: 3
Timestamp delta: 0
Timestamp: 0 (calculated)
Body size: 219
Type ID: AMF0 Data (0x12)
RTMP Body
String 'onMetaData'
ECMA array (10 items)
AMF0 type: ECMA array (0x08)
Array length: 10
Property 'title' String 'ipc'
Property 'width' Number 640
Property 'height' Number 480
Property 'framerate' Number 25
Property 'videocodecid' Number 7
Property 'audiocodecid' Number 8
Property 'audiodatarate' Number 64
Property 'audiosamplerate' Number 8000
Property 'audiosamplesize' Number 16
Property 'stereo' Boolean true
End Of Object Marker
播放器向服务器拉流 S->C
AMF0 Data onMetaData()
RTMP Header
00.. .... = Format: 0
..00 0101 = Chunk Stream ID: 5
Timestamp: 0
Body size: 387
Type ID: AMF0 Data (0x12)
Stream ID: 1
RTMP Body
String 'onMetaData'
Object (14 items)
AMF0 type: Object (0x03)
Property 'Server' String 'NGINX RTMP (github.com/arut/nginx-rtmp-module)'
Property 'width' Number 640
Property 'height' Number 480
Property 'displayWidth' Number 640
Property 'displayHeight' Number 480
Property 'duration' Number 0
Property 'framerate' Number 25
Property 'fps' Number 25
Property 'videodatarate' Number 0
Property 'videocodecid' Number 7
Property 'audiodatarate' Number 64
Property 'audiocodecid' Number 8
Property 'profile' String ''
Property 'level' String ''
End Of Object Marker