http://www.cnblogs.com/haibindev/archive/2012/04/16/2450989.html

实现输出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直播服务器的更多相关文章

  1. 实现输出h264直播流的rtmp服务器 flash直播服务器【转】

    实现输出h264直播流的rtmp服务器 RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及 ...

  2. 实现输出h264直播流的rtmp服务器

    RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播.点播.聊天等应用,以及pc.移动.嵌入式等平台,是做流媒体开发 ...

  3. EasyDSS直播服务器如何帮助用户解决OBS不能同时同步输出多路直播流到直播平台、CDN平台的限制

    最近有用户突然寻求帮助,大概的意思就是说: 他需要同步将桌面的直播同时RTMP发布到:斗鱼.熊猫TV等等多个平台,但是OBS又只能同时采集并发布推流直播到单一个平台,而且有时候在4G或者网络比较差的情 ...

  4. 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案

    本文转自EasyDSS团队Marvin的博客:http://blog.csdn.net/marvin1311/article/details/73548929 最新版本的EasyDSS流媒体解决方案, ...

  5. 30年技术积累,技术流RTC如何成为视频直播领域的黑马?

    摘要:视频业务链的背后,本质是一张视频处理和分发网络.5G+云+AI时代下,实时音视频必然会步入到一个全新的发展期. 2020年这场肆虐全球的新冠疫情让很多企业重新审视自己对数字化的认识,正如 “大潮 ...

  6. windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】

    https://github.com/illuspas/nginx-rtmp-win32 http://bashell.sinaapp.com/archives/build-nginx-rtmp-mo ...

  7. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  8. 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...

  9. 极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果

    在尝试使用webRTC实现webapp直播失败后,转移思路开始另外寻找可行的解决方案.在网页上尝试使用webRTC实现视频的直播与看直播,在谷歌浏览器以及safari浏览器上测试是可行的.但是基于基座 ...

随机推荐

  1. C# 线程更新UI

    最方便的用法: private void ViewMsg(string msg)        { /* control.Invoke(new SetControlTextDelegate((ct,  ...

  2. HDU4725 The Shortest Path in Nya Graph dij

    分析:对于每一层,原来n个点,然后扩展为原来的三倍,每一层扩展一个入点,一个出点,然后跑最短路 注:tmd我把一个n写成m了,然后wa了7次,我都要怀疑人生了 #include<cstdio&g ...

  3. 转:ndk-stack打印崩溃堆栈

            接下来详细说明ndk-stack的使用方法.         第一步:首先获得发生崩溃的共享库.                 如果你是利用ndk-build应用的话,共享库会在$P ...

  4. HTML5 SSE自动推送

    前端页面: <!doctype html> <html> <head> <meta charset="UTF-8"> <tit ...

  5. 五指cms安装说明

    1.五指cms目录结构说明 |-- coreframe                   #框架目录 |   |-- app                     #模块(应用程序)目录 |    ...

  6. 微软 Build 2014开发者大会干货整理-1

    微软 Build 2014开发者大会第二天的主题演讲主要包含两部分:Microsoft Azure的发展状况,以及 .NET和生态系统的发展介绍.第二天的重点整理也由此分为上下两部分.您可以在Chan ...

  7. mysql日志清理

    mysql bin-log 日志清理 发现mysql数据库目录中bin-log中日志文件非常大 [root@localhost var]# du -sh mysql-bin* | sort 1020K ...

  8. ZOJ-3725 Painting Storages DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3725 n个点排列,给每个点着色,求其中至少有m个红色的点连续的数 ...

  9. KMP学习总结

    初学,理解可能不是那么准确~~ Next数组的含义:next[i]表示第0个元素到第i个元素组成的字符串的最大前缀后缀.Next[0]=0显然. 所以KMP的原理就是 通过找出每一阶段最大的相等的前缀 ...

  10. 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)

    http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...