zoukankan      html  css  js  c++  java
  • RTMP流媒体播放过程


     

    RTMP协议规定:第一步,建立一个网络连接(NetConnection):客户端和服务端的基础连通关系 第二步:建立一个网络流(NetStream)发送多媒体的通道(只能建立一个网络连接,可以建立多个网络流)

    播放一个RTMP协议的流媒体:1.握手 2.建立连接 3.建立流 4.播放 RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输视音频数据。

    1.握手(HandShake)

    一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块

    a)握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。

    b)当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。

    c)当客户端和服务器分别收到S2和C2后,握手完成。


     

    2.建立网络连接(NetConnection)

    a)客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。

    b)服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。

    c)服务器发送设置带宽()协议消息到客户端。

    d)客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。

    e)服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。

    f) 服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。


     

    3.建立网络流(NetStream)

    a) 客户端发送命令消息中的“创建流”(createStream)命令到服务器端。

    b)服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。


     

    4 播放(Play)

    a) 客户端发送命令消息中的“播放”(play)命令到服务器。

    b)接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。

    c)服务器发送用户控制消息中的“streambegin”,告知客户端流ID。

    d)播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。

    e) 在此之后服务器发送客户端要播放的音频和视频数据。


     

    网络视音频服务主要包括两种方式:点播和直播。点播意即根据用户的需要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了。点播服务。直播意即互联网视音频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。

    直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。封装格式,视频编码,音频编码方面,无一例外的使用了FLV + H.264 +AAC的组合。FLV是RTMP使用的封装格式,H.264是当今实际应用中编码效率最高的视频编码标准,AAC则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器

    点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP作为点播协议有以下两点优势:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器

  • 相关阅读:
    【服务器】Https服务配置
    【小程序】模拟请求加载数据(本地数据(无服务器))
    BlockingQueue深入解析
    通过maven下载源码和javadoc方法
    运维随笔
    Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载
    java写卷积神经网络---CupCnn简介
    使用tcmalloc替换系统的malloc
    Java 进程占用 VIRT 虚拟内存超高的问题研究
    Java8 jvm参数
  • 原文地址:https://www.cnblogs.com/bodhitree/p/6184291.html
Copyright © 2011-2022 走看看