文档章节

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

雷霄骅
 雷霄骅
发布于 2014/08/16 13:47
字数 1378
阅读 580
收藏 6

本文主要总结一些我在学习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技术社交直播平台:

六间房
9158
新浪秀场

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

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

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

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

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

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

服务器端:

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.相关应用

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

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

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





本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/15814587

雷霄骅
粉丝 205
博文 419
码字总数 2129
作品 4
朝阳
程序员
私信 提问
[总结]RTMP流媒体技术零基础学习方法

本文主要总结一些我在学习RTMP流媒体技术过程中积累的经验。也为后来学习RTMP流媒体技术的人们一个参考。本文力图从简到难,循序渐进的介绍RTMP流媒体技术的方方面面,先从应用说起,逐步深化...

leixiaohua1020
2013/11/18
0
0
[总结]视音频编解码技术零基础学习方法

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

leixiaohua1020
2014/06/16
0
0
FFMPEG视音频编解码学习(一)

目录 前言 项目的一部分暂时告一段落了!主要真正需要测试需要网络视频流,如果没有输入,图像处理就没有意义!在有了差强人意的效果之后,是时候转到视频流的解码上了!对于网络流、视音频又...

simonforfuture
2018/01/12
0
0
Mac中配置nginx的rtmp协议

背景 想要在mac上面,通过ffmpeg、nginx搭建本地流媒体服务,也就是发布rtmp协议。对ffmpeg、nginx和rtmp都不太熟悉,这里仅仅是一个对流媒体服务器的模仿,最终能够初步共享自己的电脑桌面,...

亚林瓜子
2017/11/29
0
0
这就是多媒体开发 视频竟然比连续图片更省带宽

多媒体开发技术不仅技术栈庞大,许多技术需要深度钻研,学习起来并不容易。当如果方法得当找到了乐趣,情况就不同了。LiveVideoStack邮件采访了战旗直播流媒体研发工程师石硕,他不仅发现了有...

LiveVideoStack
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
4
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部