nginx rtmp 直播直播能达到毫秒级别吗

rtmp规范中文版1.0_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
rtmp规范中文版1.0
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩30页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢43740人阅读
一般做rtmp编程的时候,需要用到rtmp视频源地址,通常可以自己搭建Red5等服务器到自己的机器配置好后,编写客户端,但是这样有点麻烦;
为了方便,可以直接用电视台的rtmp直播地址:
rtmp://live.hkstv./live/hks & &测试可用;
rtmp://www.planeta-online.tv:1936/live/channel_4
香港卫视 rtmp://live.hkstv./live/hks
香港卫视 http://live.hkstv./live/hks/playlist.m3u8
香港卫视 http://124.160.184.137:80/live/5 ... a4?type=tv
香港卫视精品台 http://221.120.177.59/hls/i3d7ragr.m3u8
香港卫视精品台 rtmp://221.120.177.59/livestream/ucagm8kk &
香港9DTV &mmsh://.hk:8088/9DTVBroadCast & & & & & &
酷六V音乐 http://main./broadcast/sub?channel=910
东森新闻 & rtsp://adelivery_s.emome.net:554 ... ;at=1&mc=d2d58c
东森新闻亚洲 rtsp://adelivery_s.emome.net:554 ... ;at=1&mc=d2d58c
东森幼儿 &http://119.147.242.8:14207 & & & & & &
华娱卫视 &rtsp://116.199.127.68/huayu
阳光卫视 &http://wzfree./tvtest/182tv.php/live/id/suntv.m3u8
& & & & & &http://proxy.myvst.net/live/7167 ... D4F.m3u8
本港卫视 & rtsp://116.199.127.68/bengang
本港卫视 & http://119.147.242.7:14075
本港卫视 & rtsp:///bengang
本港台 & & //stream/
本港亚洲台 http://119.147.242.7:14083
本港国际台 http://119.147.242.7:14082
健康生活台 http://wzfree./tvtest/182tv.php/live/id/hlc.m3u8
TVB &http://rtsp.:193 ... ream/chunklist.m3u8
TVB8 http://202.102.79.114:554/live/tvb8.stream/playlist.m3u8
TVB8 http://122.192.35.76:554/live/tvb8.stream/playlist.m3u8
TVB 互动新闻台 &http://119.147.242.7:14078
TVB 互动新闻台 &http://rtsp./tvb ... ream/chunklist.m3u8
TVB 互动新闻台 &http://rtsp.:193 ... ream/chunklist.m3u8
TVB 互动新闻台 &http://rtsp.:554 ... ream/chunklist.m3u8
TVB 互动新闻台 &http://rtsp.:554 ... ream/chunklist.m3u8
TVB 互动新闻台 &http://rtsp.:554 ... ream/chunklist.m3u8
TVB 互动新闻台 &rtsp://rtsp./tvblive/mobile_inews_200.stream
TVB 翡翠台 &http://119.147.242.7:14076
TVB 翡翠台 &mmsh://222.84.226.99:88/333
高清翡翠台 &http://119.147.242.7:14119
高清翡翠台 &http://119.147.242.7:14120
高清翡翠台 &http://119.147.242.7:14164
高清翡翠台 &http://119.147.242.7:14076
翡翠台2 & & http://119.147.242.7:14076
翡翠台-珍藏 &mmsh://222.84.226.99:88/333
翡翠台-珍藏 &http://119.147.242.7:14076
互动新闻台1 &rtsp://rtsp./tvblive/mobile_inews_200.stream
互动新闻台1 &http://rtsp.:554 ... ream/chunklist.m3u8
互动新闻台1 &http://rtsp.:554 ... ream/chunklist.m3u8
互动新闻台2 &http://rtsp.:193 ... ream/chunklist.m3u8
互动新闻台2 &http://rtsp./tvb ... ream/chunklist.m3u8
互动新闻台2 &http://rtsp.:554 ... ream/chunklist.m3u8
互动新闻台2 &http://rtsp.:554 ... ream/chunklist.m3u8
互动新闻台2 &http://rtsp.:554 ... ream/chunklist.m3u8
TVB明珠台 & &http://119.147.242.7:14080
无线J2 & & & http://119.147.242.7:14079
新娱乐 & & & http://live-/channels/tvie/ylpd/flv:sd/live
龙翔时代 & & mms://mtv.smallsun.biz/m64
龙翔时代 & & rtsp://mtv.smallsun.biz/m3
卡通卫视 & &rtsp://adelivery_s.emome.net:554 ... ;at=1&mc=d2d58c
天映频道 & &rtmp://victorynet.tv:1935/live/mvcelesx01
TVBS & &rtsp://211.79.36.213/tvbs_gphone.sdp
TVBS新闻台 &rtsp://211.79.36.213/tvbsn_gphone.sdp
TVBS新闻台 &rtsp://211.79.36.213:554/tvbsn_gphone.sdp
台视 &rtsp://210.61.68.145/m50
台视 &rtsp://adelivery_s.emome.net:554 ... ;at=1&mc=d2d58c
台视 &http://202.76.72.141:30080/Entry/
台视 &rtsp://211.79.36.213:554/ttv_gphone.sdp
星空卫视 &http://proxy.myvst.net/live/5335 ... A1763C7.flv
星空卫视 &rtsp://stream13.gzcbn.tv:554/app_2/ls_7.stream
星空制作 &/live/star.m3u8
凤凰卫视中文 &rtsp://116.199.127.68/fenghuang
凤凰卫视中文 &/?uu ... E5DVSDNSOOONERCOM00
凤凰视频 & & &http://live./live/zhongwen.m3u8
凤凰视频 & & &http://live./live/zhongwen.m3u8?fmt=x264_0k_mpegt
凤凰视频 & & &http://live./live/z ... ts&size=320x240 & & & & &
凤凰视频 & & &rtsp://live./live/2256
凤凰视频 & & &http://live./live/hls/
凤凰视频 & & &http://live./live/FHZXHD.m3u8 & & & & & &&
凤凰资讯台 & &http://live./live/z ... ts&size=320x240
凤凰资讯台 & &http://live./live/hls/
凤凰资讯台 & &/s/aa15.phps ... .php?flvid=
凤凰资讯台 & &http://http://live./live/zixun.m3u8?fmt=x264_0k_mpegts&size=320x240/s/aa15.php?s=234
凤凰资讯台 & &http://ims.veryhd.net/ty/fh_flv.php?flvid=&
凤凰资讯高清 &rtsp://live./live/71
凤凰卫视香港台 &http://live./live/hongkong.m3u8
凤凰卫视香港台 &http://119.147.242.7:14137
凤凰卫视香港台 &/a8c513fb0aff3ae509101ef
凤凰卫视香港台 &http://proxy.myvst.net/live/5335 ... BB5507.flv
凤凰卫视香港台 &http://live./live/3128
凤凰卫视宽屏 & /ty/fh_flv.php?flvid=
资讯卫视 & & & http://58.221.254.33:1935/live/zhongwen.sdp/playlist.m3u
SCN TV & & & http://zb.:1863/?progid=&ostype=ios
@TV选美频道 &:1935/live/shijiexiaojie/playlist.m3u8
@TV综艺频道 &:1935/live/izongyi/playlist.m3u8
@tv写真频道 &:1935/live/meixingxiezhen/playlist.m3u8
@TV娱乐频道 &:1935/live/xuanhanyu/playlist.m3u8
@TV卡通频道 &:1935/live/eyule/playlist.m3u8
@TV体育频道 &:1935/live/chaotiyu/playlist.m3u8
@tv火星视频 &:1935/live/huoxingshipin/playlist.m3u8
@TV新闻频道 &:1935/live/news/playlist.m3u8
@TV美尚生活 &:1935/l ... nghuo/playlist.m3u8
@TV动漫频道 &:1935/live/dongman/playlist.m3u8
@tv健康频道 &:1935/live/meilizhongguo/playlist.m3u8
@TV影视频道 &:1935/live/xinyingshi/playlist.m3u8
@TV幸福频道 &:1935/live/jidongpindao/playlist.m3u8
亚太卫视 rtmp://58.61.150.198/live/Livestream
东方电影 http://112.117.210.8:80/live/5/4 ... bb534ec7d253cc0ed14
亚太第一卫视 rtmp://v1./live/mpegts.stream
希望电视台 rtmp://203.69.85.37/livepkgr/hopestream1?adbe-live-event=hopetv
台湾TVBS新闻 rtsp://adelivery_s.emome.net:554 ... ;at=1&mc=d2d58c
GOOD TV 1 &rtmp://l.jdjys.net/livefy/livestream
GOOD TV 1 &rtsp://live.jdjys.net/tv1
GOOD TV 1 &http://210.59.248.53/hls-live/li ... ent/live-ch1-1.m3u8
GOOD TV 1 &mms://122.226.102.202:1755/tv1
GOOD TV 2 &rtmp://l.jdjys.net/livefy2/livestream
GOOD TV 2 &rtsp://live.jdjys.net/tv2
GOOD TV 2 &http://210.59.248.53/hls-live/li ... ent/live-ch2-1.m3u8
GOOD TV 2 &mms://122.226.102.202:1755/tv2
台湾民视 & rtmp://202.39.43.80:80/live_hich/BC
台湾民视 & http://202.76.72.141:30080/Entry/ &&
台湾民视 & rtsp://adelivery_s.emome.net:554/ftv_gphone.sdp
如果有测试可用的,可以添加到评论中;
星空卫视 ,
华娱卫视,&
凤凰卫视中文台,&
凤凰卫视咨询台,&
channel v ,
香港卫视, rtmp://live.hkstv./live/hks
卫视国际电影台 ,rtmp://202.117.80.19:1935/live/live2
卫视国际电影台 ,
卫视合家欢,&
卫视合家欢 ,
澳门莲花 ,
澳亚卫视, rtmp://live.mastv.cc:1935/live/live1
澳视体育,&
澳视澳门 ,
澳视生活,&
澳门卫视,&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:954008次
积分:12125
积分:12125
排名:第757名
原创:300篇
转载:275篇
评论:119条
(2)(3)(10)(3)(3)(12)(8)(12)(13)(5)(3)(1)(11)(5)(9)(12)(1)(1)(1)(12)(19)(20)(5)(9)(13)(15)(19)(21)(9)(1)(6)(16)(23)(17)(7)(11)(12)(6)(4)(3)(5)(14)(8)(9)(10)(10)(13)(3)(14)(9)(5)(5)(10)(9)(4)(3)(11)(12)(11)(11)(7)(3)(6)(3)(4)(1)(3)(3)(2)(2)8773人阅读
标准规范学习:rtmp消息结构,包括几个部分:时戳:4 &byte,单位毫秒。超过最大值后会翻转。长度:消息负载的长度。类型ID:Type Id 一部分ID范围用于rtmp的控制信令。还有一部分可以供上层使用,rtmp只是透传。这样可以方便的在rtmp上进行扩展。消息流ID:Message Stream ID,用于区分不同流的消息。&两个ID的区别:Message&stream:传输消息的逻辑通道。Message&stream&ID:每个消息都有一个流id,用于指明属于哪个流。&Chunk:是更底层的一个概念。Message有可能过大,需要分割成一个个碎片,chunk就是一个消息的部分碎片。Chunk&stream:传输chunk的逻辑通道。Chunk&stream&ID:用于标示chunk属于哪个逻辑通道。message stream和chunk stream应该属于不同的层次,message属于应用层次消息,chunk属于更底层rtmp协议层次。一个chunk stream 上能够跑多个message stream。message stream id在一个chunk stream下要不相等。&消息会切分成一个个小的块进行传输。&rtmp的时戳单位是毫秒。连接握手流程图:握手过程:服务器和客户端各自发送三个包:c0,c1,c2,s0,s1,s2,服务器必须在收到c0后才发送s0和s1,也可以等到c1才发送;服务端必须收到c1才能够发送s2,客户端必须收到s2才能够发送c2&c0和s0就是一个字节:表示协议版本号。现在是03。01 234567+-+-+-+-+-+-+-+-+| & &version && |+-+-+-+-+-+-+-+-+& C0&and&S0&bits&c1和s1长度1536,抓包发现,zero字段不一定为0。&c2和s2的长度也是1536通过vlc和nginx rtmp抓的包发现和规范不对应。安装规范,time和time2应该是为了计算带宽和延迟。&&交互过程:一般客户端一起发生c0和c1,然后服务器直接发送s0,1,2。客户端收到后发送c2,握手完成。三次交互就可以了。&块流:一个连接可以穿输多个块流。每个块流有不同的id来区分。块传输运行将大的消息包切割为小的消息包。防止大的数据比如视频阻塞连接,导致音频和信令也无法传递。小的消息也可以成本更加低的传输,包头会压缩.&块流大小可以配置。有一个消息:set chunk size可以协商大小。大的块可以降低cpu 负载,但是可能会阻塞重要消息;小的块不利于传输,特别是在低带宽的情况下。&块允许 层协议将大的消息 解 更小的消息,例如,防 体积大的但优先级小的消 息 (比如视频) 阻碍体积较小但优先级高的消息 (比如音频或者控制命 )——传送过程,音频和控制的优先级较高。&块的大小是& 配置的 它& 使用一个设置块大小的控制消息 行设置 (参考 5.4.1) 更大的块大小& 降& CPU 开销,但在& 宽 接时因 它的大量的写入也会延 & 他内容的传递 更小的块不利于高比特率的流化 所 块的大小设置 决于 体情况。——这是使用tcp必须要考虑的问题。块过大会影响音频和控制的发送。过小会影响效率和比特率。&块类型:&块基本头:&&&第一个字节都是这样。其中fmt用来指示Message Header。cs id:cs id是chunk stream id的缩写。范围是3——65599。可变字节,后面可以跟一个字节,也可以跟两个字节。跟几个字节是有第一个字节的后面6位的值决定的。这一点中文翻译写的不完整。64 - 65599,其实就是0——65535,计算方法比较特殊:(第三 个 节) * 256 + 第二 个 节 + 64&块流id应该是区分每一个流,比如,一个视频通话,包括视频和音频两个流。这里的意思应该是一个连接可以传递多个流,通过块流id进行区分。&块消息头块消息头格式由块基本头的fmt字段决定。共四种。&fmt:四种类型:0 1 2 3包头必须尽可能的压缩。&type 0:用在流开始,或者时戳重置的时候。message header消息头共11byte。三字节时戳:表示范围为0——xffffff),如果大于等于,则表示还有一个字节的扩展时戳。chunk header的第三部分就是extend timestamp。这一本部分是否存在由三个字节的值决定。注意,这个是绝对时戳,而后面的几种类型trunk都是时戳的增量;区分消息截止是根据消息的长度来进行的。那么输入处理主动丢弃包的情况?&&&type 1:message header有7byte,比type 0少了4个字节的message stream id,使用上一个块的id。大小可变的消息(比如视频的每一帧数据)往往会在第一帧(第一帧的第一个chunk需要用type0)后面的帧的第一个chunk中使用type1。为什么?因为可变数据,必须有长度信息记录。&type2:只有三个字节。没有message stream id和message 长度。全部使用同一个chunk stream的上一个chunk的。适用于长度不变的步伐传输。&type 3:0个字节的message header。时戳,长度,消息流id全部使用同一个chunk stream的上一个chunk。当一个消息切分后划分到多个chunk的时候,除了带个chunk,所有的其他chunk应该使用type3。——如何判断包结束?根据消息的长度,第一个chunk中的长度应该是一个消息完成的长度。&四种格式的使用:第一个消息的第一个chunk 使用type0,携带全部的信息;后面的chunk使用type3;第二个消息,如果是视频消息,长度可变,则第一个chunk使用type1,值丢弃message stream id即可。第二个消息的其他chunk使用type3。&如果是音频,且长度相同,则第一个消息用type0+type3,第二个消息用type2+type3。如果音频消息,长度,消息间时戳增量(delta)都相同,则第一个消息可以用type0+type3,后面的所有消息全部用type3即可。这样的话也要求第一个消息的时戳必须和消息间的时戳增量相同。&&注意:除type0外,其他的全部是时戳的增量。而不是时戳绝对值。从上面来看,音频和视频的chunk id应该是不一样的。否则无法区分。因为有些块是没有message stream id,只有chunk stream id的。&公共字段定义:1、timestamp delta:表示的是上一个chunk 和当前chunk的时戳差。不是消息的时间差。如果大于等于,则表示还有一个字节的扩展时戳。chunk header的第三部分就是extend timestamp。2、消息长度:消息的长度。他和chunk的payload的大小是不同的。chunk size length是所有chunk的大小再加最后一个大小。——消息长度是消息实际的大小。。3、message&type&id:标示消息类型,比如音频,视频,控制等。4、message&stream&id:以小端序存储。Extended&Timestamp:当时戳大于&play2:可以实现比特率的切换。&message length,chunk size,tcp分包和消息的切割终于弄明白其中的原理了。本来这几个概念和方法在规范中描述不是很清楚,结合抓包终于弄清楚 了。message length:及时消息本身的大小。这个消息要在chunk中进行传输。chunk size:chunk的大小。chunk的大小默认是128。可以通过消息设置chunk size 的最大值。每个chunk的大小最大不能够超过max chunk size。明白上面两点后进行分析:1、如果message length小于等于max chunk size,则一个chunk中就包含着一个message。2、如果message length大于max chunk size,则需要将这个message切分为多个chunk。前面几个chunk size必须是max&size,最后一个就是剩余的大小。&tcp分包过程:1、收到chunk,明确chunk stream id,对一个chunk stream的数据进行处理。2、判断fmt类型,确定消息长度。3、如果长度小于等于max chunk size,则这个chunk body的大小就是message length。4、处理完这个chunk,跳过chunk header 和chunk body,就是下一个chunk。5、如果长度大于max chunk size,则chunk body的大小就是max chunk size。处理这一部分数据,然后跳过max chunk size找到下一个chunk的头。有消息长度减去max chunk size计算剩余的数据长度,判断剩余长度是否大于max chunk size,如果大于,则表明这个chunk 大小还是max chunk size。以此类推,直到最后一个长度小于等于max chunk size,那么这个长度就是这个chunk的实际长度,并且是这个消息的最后一个消息切片。然后把所有的有效切片拼接起来,就是完整的消息。后面收到的将是另外一个消息。&协议控制消息:RTMP使用1,2,3,4,5,6的message type id作为控制消息。控制协议的message stream id必须是0, chunk stream id必须是2(2的作用。0,1用来表示字节个数,2是信令,3-6xxxx是实际的。)。控制信令一收到就生效——就是没有协商过程。。。——时戳可以忽略。&set chunk size (1):设置chunk的最大sizemessage type id 为1。共四个字节:第一位必须为0。&默认值是128,服务端和客户端都可以设置chunk size。注意,一个交互中chunk size是相互独立的,也就是,客户端可以设置他发送过去的chunk size,服务端也可以设置他发送过去的chunk size。两个是没有影响的。chunk size最小建议128,必须大于等于1。chunk size的范围是1到0x7fffffff(),但是因为message header中message length只有三个字节,所以chunk size的最大值是& 如果大于此,就去他。&Abort&Message (2)message type id为2,四个字节,携带的内容是chunk stream id。用于通知对端,如果这个chunk stream还有消息正在等待接收未到达的消息内容,则停止,并丢弃原先接受的内容。可以用在带宽有限是优先发送音频和信令,丢弃视频。&Acknowledgement&(3)&Window&Acknowledgement&Size&(5)Window&Acknowledgement&Size用于设置窗口确认大小,Acknowledgement是窗口确认消息。会话开始时,双方都要先对端发送Window&Acknowledgement&Size,用于指明期望获得确认的大小。当一端收到内容大小超过Window&Acknowledgement&Size,就要像对方发送Acknowledgement。1、会话开始计算收到byte个数的时间点是收到Window&Acknowledgement&Size消息开始。2、byte size不包括tcp包头,应该是chunk的大小,即从tcp 的recv函数中获得的内容大小。3、双方都要向对方发送Window&Acknowledgement&Size和Acknowledgement。4、发送端发送完Window&Acknowledgement&Size消息后,没有收到Acknowledgement是不再发送进一步的消息的——这样会容易引起错误,导致再也发送不出消息了。&&Set&Peer&Bandwidth&(6)&设置对端输出带宽。对端是通过设置Window&Acknowledgement&Size来实现流量控制的。超过Window&Acknowledgement&Size后未确认发送端将不再发送消息。所以对端收到set peer bandwidth后,如果之前发送的Window&Acknowledgement&Size和这里写的的Window&Acknowledgement&Size不一样,一般会发送一个Window&Acknowledgement&Size。&&message format&上面的协议控制消息的type id是1,2,3,5,6(这些是chunk stream的控制),没有4。4是另外一个类型:User&Control&Messages&(4):用户控制协议,是RTMP stream的控制协议。同样,chunk stream id要设置为2,message stream id要设置为0。&消息体格式:两个字节的event type,后面跟可变长度的event data,&RTMP&Command&Messages客户端和服务器之间可以发送的消息包括:音频消息,视频消息,数据消息,命令消息。命令消息采用AMF编码。&command message type 20,17表示是命令消息。20表示使用AMF0编码,17表示使用AMF3编码。命令消息包括connect,&createStream,&publish,&play,&pause ,响应消息使用onstatus,result。&Data&Message&(18,&15):数据消息,用于传输Metadata或用户数据。18表示AMF0,15是AMF3。&Shared&Object&Message&(19,&16):19表示AMF0,16是AMF3。&Audio&Message&(8):音频消息Video&Message&(9):视频消息&Aggregate&Message&(22):一个消息中包含多个消息。&Types&of&Commands( 20,17)netConnetion 命令:connect :请求连接到服务器的应用实例。&call:请求一个远程调用。&creatStream:创建一个逻辑通道,用于客户端来发送音频,视频,描述数据。netConnection是默认通道,message stream id是0,creatStream使用0作为message stream id。&NetStream&Commands:多个Netstream可以共用一个netconnection。但是stream的id是在什么时候确定的???——疑问&play2:切换到不同的比特率的流上,而不用更改播放时间。这是一个有用的功能。这个消息是在paly之后再发送。&deleteStream:删除流。&receiveAudio:是否接受音频。如果为false,服务器不用回复。如果为true,服务器回复两个状态:NetStream.Seek.Notify&and&& NetStream.Play.Start&receiveVideo:同样。&publish:发布一个流到server。需要onStatus响应。&seek:偏移。毫秒为单位。&pause:暂停。&example:首先,connect是连接的服务器端的应用(nginx rtmp有配置多个应用。)&视频裸数据是如何打包进rtmp包的?ffmpeg在flv和h264文件将的转换是有问题的。&视频性格的数据包格式和flv的格式非常的像,基本上就是flv格式的变种。参考flv文件格式官方协议详解。视频相关包包括:onMetaData,AVCDecoderConfigurationRecord,h264数据。和flv文件中的区别是flv文件用tag头,rtmp中相关信息是放在rtmp头中。至于内部内容是一样的。&&AMF0编码格式*AMF数据类型:&&*Type&&&&&&Byte&code&&*Number&&&&0x00&&*Boolean&&&0x01&&*String&&&&0x02&&*Object&&&&0x03&&*MovieClip&0x04&&*Null&&&&&&0x05&&*Undefined&0x06&&*Reference&0x07&&*MixedArray&&&&0x08&&*EndOfObject&&&0x09&&*Array&&&&&&&&&0x0a&&*Date&&&&&&&&&&0x0b&&*LongString&&&&0x0c&&*Unsupported&&&0x0d&&*Recordset&&&&&0x0e&&*XML&&&&&&&&&&&0x0f&&*TypedObject&(Class&instance)&&0x10&&*AMF3&data&0×11&&amf编码:对个数据的合集,数据的边界通过不同的类型,以及不同类型的长度来区分。第一个字节是数据类型,然后根据数据类型确定数据的长度。其中,string是可变长度,两个字节长度值。如果是object,则object内部是个字典,key是字符串,value是数据,这里还要对数据根据类型对数据解析,同上。&&我 的公众号
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1143339次
积分:16147
积分:16147
排名:第410名
原创:295篇
转载:37篇
评论:3683条
(2)(1)(2)(1)(1)(2)(2)(3)(6)(1)(1)(7)(5)(6)(3)(2)(5)(4)(1)(2)(5)(5)(7)(15)(9)(9)(16)(9)(6)(5)(29)(10)(2)(5)(2)(11)(7)(3)(5)(10)(31)(54)(14)(6)?您当前的位置: >
[RTMP协议]实时消息传输协议 (RTMP) 常识性介绍
时间: 10:40来源:酷播  极酷网页播放器
[路由器技术]飞鱼星路由器花生壳动态域名解决方法
& & & & Adobe 公司的实时消息传输协议 (RTMP) 通过一个可靠地流传输提供了一个双向多通道消息服务,比如 TCP
[RFC0793],意图在通信端之间传递带有时间信息的视频、音频和数据消息流。实现通常对不同类型的消息分配不同的优先级,当运载能力有限时,这会影 响等待流传输的消息的次序。
& & & & 本文档将对实时流传输协议 (Real Time Messaging Protocol) 的语法和操作进行描述。
& & & & 1.1. 术语
& & & & 本文档中出现的关键字,&MUST&、&MUST NOT&、&REQUIRED&、&SHALL&、&SHALL
NOT&、&SHOULD&、&SHOULD NOT&、&RECOMMENDED&、&NOT RECOMMENDED&、&MAY&
、&OPTIONAL&,都将在 [RFC2119] 中进行解释。
& & & & 2. 贡献者
& & & & Rajesh Mallipeddi,Adobe Systems 原成员,起草了本文档原始规范,并提供大部分的原始内容。
& & & & Mohit Srivastava,Adobe Systems 成员,促成了本规范的开发。
& & & & 3. 名词解释
& & & & Payload (有效载荷):包含于一个数据包中的数据,例如音频采样或者压缩的视频数据。payload 的格式和解释,超出了本文档的范围。
& & & & Packet (数据包):一个数据包由一个固定头和有效载荷数据构成。一些个底层协议可能会要求对数据包定义封装。
& & & & Port (端口):&传输协议用以区分开指定一台主机的不同目的地的一个抽象。TCP/IP 使用小的正整数对端口进行标识。& OSI 传输层使用的运输选择器 (TSEL) 相当于端口。
& & & & Transport address (传输地址):用以识别传输层端点的网络地址和端口的组合,例如一个 IP 地址和一个 TCP 端口。数据包由一个源传输地址传送到一个目的传输地址。
& & & & Message stream (消息流):通信中消息流通的一个逻辑通道。
& & & & Message stream ID (消息流 ID):每个消息有一个关联的 ID,使用 ID 可以识别出流通中的消息流。
& & & & Chunk (块):消息的一段。消息在网络发送之前被拆分成很多小的部分。块可以确保端到端交付所有消息有序 timestamp,即使有很多不同的流。
& & & & Chunk stream (块流):通信中允许块流向一个特定方向的逻辑通道。块流可以从客户端流向服务器,也可以从服务器流向客户端。
& & & & Chunk stream ID (块流 ID):每个块有一个关联的 ID,使用 ID 可以识别出流通中的块流。
& & & & Multiplexing (合成):将独立的音频/视频数据合成为一个连续的音频/视频流的加工,这样可以同时发送几个视频和音频。
& & & & DeMultiplexing (分解):Multiplexing 的逆向处理,将交叉的音频和视频数据还原成原始音频和视频数据的格式。
& & & & Remote Procedure Call (RPC 远程方法调用):允许客户端或服务器调用对端的一个子程序或者程序的请求。
& & & & Metadata (元数据):关于数据的一个描述。一个电影的 metadata 包括电影标题、持续时间、创建时间等等。
& & & & Application Instance (应用实例):服务器上应用的实例,客户端可以连接这个实例并发送连接请求。
& & & & Action Message Format (AMF 动作消息格式协议):一个用于序列化 ActionScript 对象图的紧凑的二进制格式。AMF 有两个版本:AMF 0 [AMF0] 和 AMF 3 [AMF3]。
& & & & 4. 字节序、对齐和时间格式
& & & & 所有整数型属性以网络字节顺序传输,字节 0
代表第一个字节,零位是一个单词或字段最常用的有效位。字节序通常是大端排序。关于传输顺序的更多细节描述参考 IP 协议
[RFC0791]。除非另外注明,本文档中的数值常量都是十进制的 (以 10 为基础)。
& & & & 除非另有规定,RTMP 中的所有数据都是字节对准的;例如,一个十六位的属性可能会在一个奇字节偏移上。填充后,填充字节应该有零值。
& & & & RTMP 中的 Timestamps 以一个整数形式给出,表示一个未指明的时间点。典型地,每个流会以一个为 0 的
timestamp 起始,但这不是必须的,只要双端能够就时间点达成一致。注意这意味着任意不同流 (尤其是来自不同主机的) 的同步需要 RTMP
之外的机制。
& & & & 因为 timestamp 的长度为 32 位,每隔 49 天 17 小时 2 分钟和 47.296
秒就要重来一次。因为允许流连续传输,有可能要多年,RTMP 应用在处理 timestamp 时应该使用序列码算法
[RFC1982],并且能够处理无限循环。例如,一个应用假定所有相邻的 timestamp 都在 2^31 - 1 毫秒之内,因此 10000 在
& & & & timestamp 也可以使用无符整数定义,相对于前面的 timestamp。timestamp 的长度可能会是 24 位或者 32 位。
& & & & 5. RTMP 块流
& & & & 本节介绍实时消息传输协议的块流 (RTMP 块流)。 它为上层多媒体流协议提供合并和打包的服务。
& & & & 当设计 RTMP 块流使用实时消息传输协议时,它可以处理任何发送消息流的协议。每个消息包含 timestamp 和
payload 类型标识。RTMP 块流和 RTMP 一起适合各种音频-视频应用,从一对一和一对多直播到点播服务,到互动会议应用。
& & & & 当使用可靠传输协议时,比如 TCP [RFC0793],RTMP 块流能够对于多流提供所有消息可靠的 timestamp
有序端对端传输。RTMP
块流并不提供任何优先权或类似形式的控制,但是可以被上层协议用来提供这种优先级。例如,一个直播视频服务器可能会基于发送时间或者每个消息的确认时间丢 弃一个传输缓慢的客户端的视频消息以确保及时获取其音频消息。
& & & & RTMP 块流包括其自身的带内协议控制信息,并且提供机制为上层协议植入用户控制消息。
& & & & 5.1 消息格式
& & & & 可以被分割为块以支持组合的消息的格式取决于上层协议。消息格式必须包含以下创建块所需的字段。
& & & & Timestamp:消息的 timestamp。这个字段可以传输四个字节。
& & & & Length:消息的有效负载长度。如果不能省略掉消息头,那它也被包括进这个长度。这个字段占用了块头的三个字节。
& & & & Type Id:一些类型 ID 保留给协议控制消息使用。这些传播信息的消息由 RTMP
块流协议和上层协议共同处理。其他的所有类型 ID 可用于上层协议,它们被 RTMP 块流处理为不透明值。事实上,RTMP
块流中没有任何地方要把这些值当做类型使用;所有消息必须是同一类型,或者应用使用这一字段来区分同步跟踪,而不是类型。这一字段占用了块头的一个字节。
& & & & Message Stream ID:message stream (消息流) ID
可以使任意值。合并到同一个块流的不同的消息流是根据各自的消息流 ID 进行分解。除此之外,对 RTMP
块流而言,这是一个不透明的值。这个字段以小端格式占用了块头的四个字节。
& & & & 5.2 握手
& & & &&一个 RTMP 连接以握手开始。RTMP 的握手不同于其他协议;RTMP 握手由三个固定长度的块组成,而不是像其他协议一样的带有报头的可变长度的块。
& & & & 客户端 (发起连接请求的终端) 和服务器端各自发送相同的三块。便于演示,当发送自客户端时这些块被指定为 C0、C1 和 C2;当发送自服务器端时这些块分别被指定为 S0、S1 和 S2。
酷播技术服务
技术与代码}

我要回帖

更多关于 rtmp 直播 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信