实现输出h264直播流的rtmp服务器 flash直播服务器【转】
实现输出h264直播流的rtmp服务器
RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是做流媒体开发经常会接触到的协议。我之前曾经写过一篇文章“RTMP协议发送H.264编码及AAC编码的音视频”,简单介绍过如何在自己的程序里使用rtmp协议,不过那篇文章讲的主要是如何实现一个rtmp直播的发布端,主要侧重在“采集-编码-rtmp发布”这样的流程。这篇文章的主要内容是和大家分享下,做一个简单的、输出H.264直播流的rtmp server,需要实现哪些功能和步骤。
常见的rtmp服务器
有很多知名的rtmp server,其中既有商业程序也有开源程序,简单列举如下:
开源项目
商业程序
当然,还有一些其他的开源、商业rtmp服务器(如ffserver),我就不一一列举了。我并没有一一尝试,不过,从它们的声明来看,一般来说,商业rtmp程序要比开源程序支持更多的协议以及更多的平台,至于哪个更好,这就不好说了。我比较推荐的是crtmpserver,高性能,号称可以支持“thousands of simultaneous connections”,而且它的开发社区目前很活跃。不过缺点是,代码量有点庞大,而且在不断增加当中。
rtmp服务器的功能比较复杂,要完整实现比较困难,如果你需要的是一个完整功能的rtmp server,那就可以从它们之中选择一个,如果你的需求和我一样,只是一个简单的、输出H.264直播流的rtmp server,那就需要自己来设计和实现。
rtmp server与播放器的交互
我们需要实现的是:支持flash播放协议、输出H.264直播流的rtmp server,那么首先,我们必须了解rtmp服务器和flash播放器客户端之间是怎样的一个交互流程。通过阅读《rtmp specification 1.0》就可以了解,我这里把它归纳总结一下。
基本上一个rtmp server实现了以上6点交互协议,就可以支持flash的播放,顺利的输出h.264视频流。
设计与实现
知道了交互过程,我们就可以来设计和实现自己的Rtmp服务器了。由于RTMP协议是基于TCP协议的,所以rtmp server本质上就是一个TCP服务器,它的逻辑结构基本上和普通的TCP服务器是类似的。
事实上,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。(转载请注明作者和出处)
实现输出h264直播流的rtmp服务器 flash直播服务器【转】的更多相关文章
- 实现输出h264直播流的rtmp服务器 flash直播服务器
http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html 实现输出h264直播流的rtmp服务器 RTMP(Real Time ...
- 实现输出h264直播流的rtmp服务器
RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及pc.移动.嵌入式等平台,是做流媒体开发 ...
- EasyDSS直播服务器如何帮助用户解决OBS不能同时同步输出多路直播流到直播平台、CDN平台的限制
最近有用户突然寻求帮助,大概的意思就是说: 他需要同步将桌面的直播同时RTMP发布到:斗鱼.熊猫TV等等多个平台,但是OBS又只能同时采集并发布推流直播到单一个平台,而且有时候在4G或者网络比较差的情 ...
- 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案
本文转自EasyDSS团队Marvin的博客:http://blog.csdn.net/marvin1311/article/details/73548929 最新版本的EasyDSS流媒体解决方案, ...
- 30年技术积累,技术流RTC如何成为视频直播领域的黑马?
摘要:视频业务链的背后,本质是一张视频处理和分发网络.5G+云+AI时代下,实时音视频必然会步入到一个全新的发展期. 2020年这场肆虐全球的新冠疫情让很多企业重新审视自己对数字化的认识,正如 “大潮 ...
- windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】
https://github.com/illuspas/nginx-rtmp-win32 http://bashell.sinaapp.com/archives/build-nginx-rtmp-mo ...
- 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解
注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...
- 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...
- 极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果
在尝试使用webRTC实现webapp直播失败后,转移思路开始另外寻找可行的解决方案.在网页上尝试使用webRTC实现视频的直播与看直播,在谷歌浏览器以及safari浏览器上测试是可行的.但是基于基座 ...
随机推荐
- xp的虚拟机如何访问本地主机上的文件
1.选中虚拟机,右键选择Settings,在options选项卡里选择Shared Folders,然后在右边设置要共享的文件夹. 2.power on 虚拟机,然后在虚拟机的VM菜单中,选择“Ins ...
- 浅谈jquery选择器
首先来说说jquery选择器的优势: 1.简洁的写法 2.支持css1.0到3.0选择器 3.完善的处理机制. 再来说说分类: jquery选择器分为基本选择器.层次选择器.属性选择器.基本过滤选择 ...
- HDOJ_1010 Tempter of the Bone
http://acm.hdu.edu.cn/showproblem.php?pid=1010 奇偶剪枝:可以把map看成这样: 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ...
- .net 配置ueditor
添加引用如下: <script src="../Ueditor/ueditor.config.js" type="text/javascript"> ...
- oracle学习 一 (持续更新中)
首先你需要创建一个表空间,然后,再创建一个用户名,用户名要给他指定一个表空间,并且给这个用户赋予权限, DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构. RESOURCE:拥有 ...
- C#.NET 消息机制
一.消息概述 众人周知,window系统是一个消息驱动的系统, windows操作系统本身有自己的消息队列,消息循环,它捕捉键盘,鼠标的动作生成消息,并将这个消息传给应用程序的消息队列. 余下的工作有 ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- Java调用Telnet示例
import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.io.U ...
- css样式被覆盖解决方案
刚才写zenktodo的时候,通过动态添加class的方式修改一个div的样式,总是不起作用. #navigator { height: 100%; width: 200; position: abs ...
- 正确理解ContentPresenter
下图显示继承关系: ContentControl:Control (在Control類並沒有Content屬性, 所以在這之上再寫了一個ContentControl, 使控件有Content屬性可以顯 ...