RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,普遍用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是作流媒体开发常常会接触到的协议。我以前曾经写过一篇文章“RTMP协议发送H.264编码及AAC编码的音视频”,简单介绍过如何在本身的程序里使用rtmp协议,不过那篇文章讲的主要是如何实现一个rtmp直播的发布端,主要侧重在“采集-编码-rtmp发布”这样的流程。这篇文章的主要内容是和你们分享下,作一个简单的、输出H.264直播流的rtmp server,须要实现哪些功能和步骤。 html
有不少知名的rtmp server,其中既有商业程序也有开源程序,简单列举以下:服务器
开源项目网络
商业程序并发
固然,还有一些其余的开源、商业rtmp服务器(如ffserver),我就不一一列举了。我并无一一尝试,不过,从它们的声明来看,通常来讲,商业rtmp程序要比开源程序支持更多的协议以及更多的平台,至于哪一个更好,这就很差说了。我比较推荐的是crtmpserver,高性能,号称能够支持“thousands of simultaneous connections”,并且它的开发社区目前很活跃。不过缺点是,代码量有点庞大,并且在不断增长当中。性能
rtmp服务器的功能比较复杂,要完整实现比较困难,若是你须要的是一个完整功能的rtmp server,那就能够从它们之中选择一个,若是你的需求和我同样,只是一个简单的、输出H.264直播流的rtmp server,那就须要本身来设计和实现。编码
咱们须要实现的是:支持flash播放协议、输出H.264直播流的rtmp server,那么首先,咱们必须了解rtmp服务器和flash播放器客户端之间是怎样的一个交互流程。经过阅读《rtmp specification 1.0》就能够了解,我这里把它概括总结一下。spa
基本上一个rtmp server实现了以上6点交互协议,就能够支持flash的播放,顺利的输出h.264视频流。设计
知道了交互过程,咱们就能够来设计和实现本身的Rtmp服务器了。因为RTMP协议是基于TCP协议的,因此rtmp server本质上就是一个TCP服务器,它的逻辑结构基本上和普通的TCP服务器是相似的。3d
事实上,librtmp已经提供了基本的rtmp报文的读取和发送,能够在librtmp的基础上进行开发,来实现各类rtmp协议的组包和发送,从设备、文件或网络中获取到视频数据,封装成Rtmp数据报文,发给flash播放器,完成播放。视频
我在另外一篇文章“RTMP协议发送H.264编码及AAC编码的音视频”中,已经详细介绍了如何编译和使用librtmp,感兴趣的能够去看一下。那篇文章中谈的是rtmp协议视频发布端,和发布端相同的是,rtmp server向flash播放器发送的视频数据流,也是须要首先发送"AVC sequence header",这其中包含的是重要的编码信息,没有的话,flash播放器将没法解码。下面的代码便是rtmp server收到播放请求以后,从"H264Reader"获取并发送的播放流程。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
haibindev.cnblogs.com,合做请联系QQ。(转载请注明做者和出处)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++