rtmp服务器(RTMP流媒体播放过程及协议学习)

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信详细教程资料关注+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。下载 在librtmp的官网上面可以下载:http://rtmpdump.mplayerhq.hu,如果观望无法访问,也可以在GitHub上面找到相应的代码。最新的版本是:rtmpdump-2.3.tgz。编译 解压rtmpdump-2.3.tgz,可以查看README来获取编译方法:To compile type “make” with SYS=, e.g.
make SYS=posix
for Linux, MacOSX, Unix, etc. or
make SYS=mingw
for Windows.
You can cross-compile for other platforms using the CROSS_COMPILE variable:
make CROSS_COMPILE=arm-none-linux- INC=-I/my/cross/includes编译完成以后,可以在librtmp目录下面找到librtmp.a的库文件。在需要使用librtmp的工程里面,将这个lib链接进去就可以了。使用openssl中的libssl+libcrypto下载 在OpenSSL的官网上面可以获取最新的OpenSSL的源代码。https://www.openssl.org/source/。最新版本的是:1.1.0e版本。编译 编译openssl很简单,如果在linux上面,直接./Configure + make 就可以完成。如果要交叉编译,在Configure对应平台以后,需要去修改一下Makefile中的cc ar prefix相关的变量。./Configure android-armv7 修改makefile cc ar prefix…. (edited)编译完成以后,我们在libs目录可以看到libssl.a和libcrypto.a两个lib。在rtmp push的时候,需要这两个libs的支持。详细教程资料关注+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。推流工作整体框架图RTMP协议规定,播放一个流媒体有两个前提步骤:第一步,建立一个网络连接(NetConnection);第二步,建立一个网络流(NetStream)。其中,网络连接代表服务器端应用程序和客户端之间基础的连通关系。网络流量代表了发送多媒体数据的通道。服务器和客户端之间只能建立一个网络连接,但是基于该连接可以创建很多网络流。他们的关系如图所示:1 简要介绍播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。RTMP连接都是以握手作为开始的。建立连接阶段用于建立客户端与服务器之间的“网络连接”;建立流量阶段用于建立客户端与服务器之间的“网络流”;播放阶段用于传输音频数据。2 握手(HandShake)一个RTMP连接以握手开始,双方分别发送大小固定的三个数据块a) 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。b) 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。c) 当客户端和服务器分别收到S2和C2后,握手完成。3建立网络连接(NetConnection)a) 客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。b) 服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。c) 服务器发送设置带宽()的协议消息到客户端。d) 客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。e) 服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端。f) 服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。4建立网络流(NetStream)a) 客户端发送命令消息中的“创建流”(createStream)命令到服务器端。b) 服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。5 播放(Play)a) 客户端发送命令消息中的“播放”(play)命令到服务器。b) 接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。c) 服务器发送用户控制消息中的“streambegin”,告知客户端流ID。d) 播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。e) 在此之后服务器发送客户端要播放的音频和视频数据。详细教程资料关注+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/36645/