您的位置 首页 > 腾讯云社区

RTMP播放流媒体过程---音视频_李超

前言

RTMP协议规定,播放一个流媒体需要执行以下几个步骤:

建立一个网络连接(NetConnection),网络连接代表RTMP服务器端和客户端之间建立真正的网络连接。建立一个网络流(NetStream)。网络流代表了发送多媒体数据的通道。这是一个逻辑连接,有点像 http协义中的 session。播放流。

服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:

播放网络流

在RTMP服务器端对于每一个网络媒体流都建立了一个状态机,包括以下几个状态:

握手态;连接态;媒体流已建立态;播放态;

RTMP通过命令来变更状态机。并在每个状态下做相应的工作。

握手(HandShake)

一个RTMP网络流的建立是以握手开始的,双方分别发送大小固定的三个数据块

握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。当客户端和服务器分别收到S2和C2后,握手完成。连接(NetConnection)客户端发送命令消息“连接”(connect)到服务器。服务器接收到“连接”消息后,发送确认窗口大小(Window Acknowledgement Size)消息到客户端。服务器发送“设置带宽”消息到客户端。客户端处理“设置带宽”消息后,发送确认窗口大小(Window Acknowledgement Size)消息到服务器端。服务器发送消息“流开始”(Stream Begin)到客户端。服务器发送消息“结果”,通知客户端连接的状态。建立网络流(NetStream)客户端发送消息“创建流”(createStream)到服务器端。服务器端接收到“创建流”命令后,发送“结果”消息,通知客户端流的状态。播放(Play)客户端发送消息“播放”(play)到服务器。接收到“播放”消息后,服务器发送设置块大小(ChunkSize)消息。服务器发消息“streambegin”,告知客户端流ID。服务器收到"播放"消息后,发送消息“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。之后,服务器发送客户端要播放的音频和视频数据。小结

以上就是 RTMP协议的播放过程。建立一个网络流的播放就是以下这几步。

握手;连接;建立网络流;播放;

目前,已经有很多开源库实现了 RTMP 协议。其中比较著名的是 librtmp 库,它是 rtmpdump 工具的一部分。

如果我们想实现简单的音视频直接可以直接使用 librtmp库作为我们的流媒体传输库。

---来自腾讯云社区的---音视频_李超

关于作者: 瞎采新闻

这里可以显示个人介绍!这里可以显示个人介绍!

热门文章

留言与评论(共有 0 条评论)
   
验证码: