本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验。也为后来学习RTMP流媒体技术的人们一个参考。本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化剖析相关工程的源代码。看完本文的话应该会对RTMP流媒体技术有比较完整的了解。

0.背景知识

本章主要介绍一下RTMP流媒体技术都用在了哪里(在这里仅列几个我所知的,其实远比这个多)。说白了就是为了说明:RTMP是非常重要的。

使用RTMP技术的流媒体系统有一个非常明显的特点:使用 Flash Player 作为播放器客户端,而Flash Player 现在已经安装在了全世界将近99%的PC上,因此一般情况下收看RTMP流媒体系统的视音频是不需要安装插件的。用户只需要打开网页,就可以直接收看流媒体,十分方便。

目前使用RTMP技术的电视台有如下几个:

CNTV部分点播内容

中国教育电视台1直播(rtmp://pub1.guoshi.com/live/newcetv1)[失效]

中国教育电视台3直播(rtmp://pub1.guoshi.com/live/newcetv3)[失效]

香港电视台直播(rtmp://live.hkstv.hk.lxdns.com/live/hks)

北广传媒移动电视直播(rtmp://www.bj-mobiletv.com:8000/live/live1)

中石化网络电视台直播(rtmp://wowza.sinopectv.cn:1935/live/sinopec)[暂时无法访问]

东莞电视台(rtmp://ftv.sun0769.com/dgrtv1/mp4:b1)

绍兴新闻综合(rtmp://www.scbtv.cn/live/new)

使用RTMP技术社交直播平台:

六间房
9158
新浪秀场

可以这样概括一下:凡是想实现“无插件直播”的流媒体系统,都会使用RTMP。

1.RTMP在Flash流媒体系统中的使用

RTMP被Adobe开发出来,就是用于在其Flash平台的流媒体系统之间传递数据的。因此想要了解RTMP,需要首先了解Flash流媒体系统。

最简单的Flash流媒体系统由两部分组成:

客户端:Flash Player(一般只有这一种)

注:支持RTMP的基于Flash的播放器除了可以自己开发之外,还有现成的,比如说jwplayer,flowplayer等等。

服务器端:

1.Flash Media Server(FMS):Adobe官方的流媒体服务器。毕竟是商业服务器,其性能应该是最强的,配置是最简单的,但是价格不菲,推荐作为入门学习使用。个人下载使用是不用花钱的。服务器端编程使用ActionScript语言。

官网:http://www.adobe.com/cn/products/adobe-media-server-family.html

可参考教程:

1.FMS开发者向导。这个教程讲的是FMS开发技术,是网友翻译的中文版,学习起来比较方便。这里有英文原版,内容更全:Flash Media Server Delevoper's Guide

注:FMS开发技术方面使用到了ActionScript,可以先找相关教程做一个初步的了解。主要使用Flash CSx进行开发。

2.FMS技术指南。这个教程主要是讲述FMS配置的,第2部分涉及到集群,负载均衡等内容,挺高端的。

2.Red5:开源流媒体服务器,基于Java的。曾经使用过,感觉也还算比较方便,如果商业应用,又买不起昂贵的FMS的话,使用也不错。服务器端编程使用Java语言。

官网:http://www.red5.org/

3.还有其他服务器,但目前我还没接触过

2.RTMPdump(libRTMP)的使用

这一章就要开始学习RTMP协议的处理了。

可以使用RTMPdump(libRTMP)进行学习。这是一个C++的开源工程。主要作用是下载RTMP流媒体。首先可以了解一下其使用方法:RTMPdump 使用说明

官网:http://rtmpdump.mplayerhq.hu/

3.RTMPdump(libRTMP)源代码分析

这一章开始学习RTMPdump(libRTMP)的源代码。学习它之前需要有Socket编程的基础。

首先学习《RTMP协议规范》

中文翻译版:http://download.csdn.net/detail/leixiaohua1020/6563059

英文原版:http://www.adobe.com/cn/devnet/rtmp.html

我对其部分内容做的简单分析:RTMP规范简单分析

其次从协议规范中,总结出RTMP协议建立连接的流程:RTMP流媒体播放过程

然后,下载一个windows下可以编译通过的RTMPdump工程(这个工程是很难得!):rtmpdump vs2005版本

(当然,linux下会方便很多,因为RTMPdump就是在linux下开发完成的)

最后,通过调试工程,就可以基本掌握RTMP协议了,我写了一些分析RTMPdump(libRTMP)源代码的文章:

RTMPdump 源代码分析 1: main()函数
RTMPDump(libRTMP)源代码分析 2:解析RTMP地址——RTMP_ParseURL()
RTMPdump(libRTMP) 源代码分析 3: AMF编码
RTMPdump(libRTMP)源代码分析 4: 连接第一步——握手(Hand Shake)
RTMPdump(libRTMP) 源代码分析 5: 建立一个流媒体连接 (NetConnection部分)
RTMPdump(libRTMP) 源代码分析 6: 建立一个流媒体连接 (NetStream部分 1)
RTMPdump(libRTMP) 源代码分析 7: 建立一个流媒体连接 (NetStream部分 2)
RTMPdump(libRTMP) 源代码分析 8: 发送消息(Message)
RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)
RTMPdump(libRTMP) 源代码分析 10: 处理各种消息(Message)

4.相关示例代码

下面的工程包含了和RTMP相关的示例代码。

(1)libRTMP单独进行流媒体处理的例子

simplest libRTMP example
最简单的基于librtmp的示例
简介
本工程包含了LibRTMP的使用示例,包含如下子工程:

simplest_librtmp_receive: 接收RTMP流媒体并在本地保存成FLV格式的文件。

simplest_librtmp_send_flv: 将FLV格式的视音频文件使用RTMP推送至RTMP流媒体服务器。

simplest_librtmp_send264: 将内存中的H.264数据推送至RTMP流媒体服务器。

文章
《最简单的基于librtmp的示例:接收(RTMP保存为FLV)》
《最简单的基于librtmp的示例:发布(FLV通过RTMP发布)》
《最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)》
项目主页
SourceForge:https://sourceforge.net/projects/simplestlibrtmpexample/
Github:https://github.com/leixiaohua1020/simplest_librtmp_example

开源中国:http://git.oschina.net/leixiaohua1020/simplest_librtmp_example

(2)FFmpeg和libRTMP结合进行流媒体处理的例子

simplest ffmpeg streamer
最简单的基于FFmpeg的推流器(推送RTMP)
简介
本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。是使用FFmpeg进行流媒体推送最简单的教程。
文章
《最简单的基于FFmpeg的推流器(以推送RTMP为例)》
《最简单的基于FFMPEG的推流器附件:收流器》
项目主页
SourceForge:https://sourceforge.net/projects/simplestffmpegstreamer/
Github:https://github.com/leixiaohua1020/simplest_ffmpeg_streamer

开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_streamer

(3)使用Adobe Flash中的ActionScript(而非C/C++)处理的例子

Simplest flashmedia example
 最简单的基于Flash的流媒体示例
简介
本程序是一个Flash流媒体示例的合集。其中包含了使用Actionscript编写的推流器和播放器,以及网页播放器。本工程包含如下基于Flash技术的流媒体的例子:

simplest_as3_rtmp_player:  最简单的RTMP播放器(基于ActionScript)

simplest_as3_rtmp_streamer:最简单的RTMP推流器(基于ActionScript)

rtmp_sample_player_adobe: 从Adobe Flash Media Sever提取出来的测试播放器

rtmp_sample_player_wowza: 从Wowza服务器中提取出来的测试播放器

rtmp_sample_player_flowplayer: 基于FlowPlayer的RTMP/HTTP播放器(添加RTMP plugin)

rtmp_sample_player_videojs: 基于VideoJS的RTMP/HTTP播放器

rtmp_sample_player_jwplayer: 基于JWplayer的RTMP/HTTP播放器

hls_sample_player_flowplayer: 基于FlowPlayer的HLS播放器(添加HLS plugin)

hls_video_player_html5: 基于HTML5的HLS/HTTP播放器

activex_vlc_player:  基于VLC的ActiveX控件的播放器

文章
《最简单的基于Flash的流媒体示例:RTMP推送和接收(ActionScript)》
《最简单的基于Flash的流媒体示例:网页播放器(HTTP,RTMP,HLS)》
项目主页
SourceForge:https://sourceforge.net/projects/simplestflashmediaexample/
Github:https://github.com/leixiaohua1020/simplest_flashmedia_example

开源中国:http://git.oschina.net/leixiaohua1020/simplest_flashmedia_example

5.相关应用

libRTMP作用还是很大的,除了可以保存RTMP流媒体之外,还可以发送RTMP流媒体等等。它可以整合到FFMPEG中,下面几篇文章简述了它的应用:

libRTMP使用说明
在FFMPEG中使用libRTMP的经验

(以后更新其他方面......)

[总结]RTMP流媒体技术零基础学习方法相关推荐

  1. 视音频技术零基础学习方法

    视音频技术零基础学习方法 (2014-06-16 23:59:24) 转载▼ 标签: it   一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以 ...

  2. [总结]视音频编解码技术零基础学习方法

    原文地址:http://blog.csdn.net/leixiaohua1020/article/details/18893769 一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没 ...

  3. 视音频编解码技术零基础学习方法(向雷神致敬)

    一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文 ...

  4. 视音频编解码技术零基础学习方法

    一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文 ...

  5. ]视音频编解码技术零基础学习方法

    [总结]视音频编解码技术零基础学习方法 一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从 ...

  6. 音频编解码技术零基础学习方法

    音频编解码技术零基础学习方法 一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习 ...

  7. 音视频之路之开篇——视音频编解码技术零基础学习方法

    注: 本文章转自雷大神的博客http://blog.csdn.net/leixiaohua1020/article/details/18893769,本人认为这是一篇音视频领域入门的佳作,强烈推荐.当 ...

  8. 1.[总结]视音频编解码技术零基础学习方法【转载】【致敬雷神】

    一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文 ...

  9. [雷神] =总结=视音频编解码技术零基础学习方法

    一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成.今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术.需要注意的是,本文 ...

最新文章

  1. 数据分析行业需要具备哪些技术 如何快速进入
  2. SpringSecurity鉴权流程分析 附源码注释,xdm,一起来看看吧
  3. 微服务Apache ServiceComb 数据一致性Saga演进介绍
  4. 哲学家就餐(避免死锁)(多进程版)
  5. SSM框架中mapper和mapping.xml文件在同一个包下需要的配置
  6. swagger默认访问路径_swagger 如何配置项目访问路径
  7. php 5.2 spl_autoload_register,PHP 中的__autoload() 与spl_autoload_register()函数
  8. 关于AndroidStudio结合百度地图Api开发的SHA1获取
  9. 暨南大学人文社科a类期刊_暨南大学人文社会科学重要期刊目录分类
  10. 关于求职及面试的一些小技巧
  11. 兜兜转转躲不命运轮回---Java基础学习笔记2
  12. Java 学习笔记 —— 基础部分
  13. Albumentations 中的空间级图像变换
  14. BZOJ 2448: 挖油
  15. 无线电监测,适用带宽总结,信号分析代表信号频段
  16. 逆波兰计算器(含完整版)
  17. 如何设计一个开放平台openapi?
  18. 【实践】Stm32f10x_74Hc595倒计时实现实例
  19. 虚拟机centos安装web服务器
  20. elastic-job 定时任务集成

热门文章

  1. ASP.NET MVC3+EF4+Oracle入门实例(一)
  2. 马化腾:卓越领导者的五种习惯(作出表率尤为重要)
  3. Bailian4111 判断游戏胜者-Who Is the Winner【文本处理】
  4. QT Creator5.14软件的安装与使用(Win7与Ubuntu20.04)
  5. CCF NOI1004 填充矩形
  6. 经典卷积神经网络的学习(二)—— VGGNet
  7. Python基础——min/max与np.argmin/np.argmax
  8. python有趣的代码-分享几款由quot;Python”语言编写的quot;有趣、恶搞、好玩”的程序代码...
  9. python经典实例pdf-Python机器学习经典实例_PDF电子书
  10. python爬虫什么意思-Python 爬虫是什么