流媒体服务器二:1.RTMP学习路线

一个问题?

在上一节我们使用SRS搭建了RTMP环境,那么在企业开发中,是否使用第三方的RTMP服务器(例如上一节的SRS)就可以了呢?或者说:作为一个音视频开发人员,就会配置就OK了呢?实际上不是的,一些稍微大的企业都是会自己开发RTMP服务器的,那么这就要求我们对于RTMP协议有深刻的理解,然后基于这些协议的理解自己有一定的能力开发RTMP协议。

一 学习路线:

1.学习如何配置一个 RTMP的服务器(配置SRS中的RTMP,并启动srs)

流媒体服务器一:使用成熟的流媒体SRS 搭建 RTMP流媒体服务器-CSDN博客

 1.1 开启成熟的流服务器 SRS

1.1.1 开启SRS

当前我的 linux 的ip 为 192.168.31.251,这里记录一下,后面要用

1.1.2 测试 服务器是否开启成功
 

将一个影音文件发送到 流媒体服务器,然后,使用 拉流,拉这个地址看是否能播放成功.

如下的两个步骤都在windows上使用ffmpeg 命令完成

推流


ffmpeg -re -i D:/yinshipinres/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.31.251/study/acha

这个意思是,将D:/yinshipinres/source.200kbps.768x320.flv 文件,推流给服务器,而服务器的地址是rtmp://192.168.31.251/study/acha

-re 参数 设置 以实时的速度 读取 输入文件 , 如 : 输入视频的长度是 3 分钟 , 那么 使用 3 分钟的时间来处理这个视频 , 不能用最快速度处理完 , 该设置确保了推流的速度与视频播放的速度相匹配 ;
-i input.mp4 参数 设置 输入文件名称是 input.mp4 , 此处也可以是 实时的录屏 ;

/study/acha 这个名字在这里是乱取的,但是这个应该就有规则,或者有一个默认的规则。实际上后面学习到的nginx什么的,确实是有一定的规则的。

后面再学习nginx上配置 rtmp的时候,如下的可以参考
rtmp://39.105.129.233/myapp/ 参数 , rtmp 是 流媒体协议 , 39.105.129.233 是流媒体服务器 , myapp 是在 流媒体服务器 的 nginx.conf 中配置的 rtmp / server / application 配置中配置的应用名称 ;


拉流


ffplay rtmp://192.168.31.251/study/acha

注: 上述命令中的flv完整路径,以及srs server ip,⼤家根据情况⾃⾏替换为实际值。 另外:默认情况下
srs的rtmp采⽤1935端⼝,如果该端⼝被占⽤或修改了srs.conf中的端⼝,注意根据情况调整;防⽕墙如 果开了,也要检测下1935是否允许访问。

2.学习 RTMP 协议,

流媒体服务器二:2.RTMP协议学习-CSDN博客

学习完协议后,理论上就应该编程了,前辈们已经写好了专门的RTMP库的第三方库,我们要学习这个库的使用

3.学习 librtmp 库的配置使用。

流媒体服务器二 3学习 librtmp 库的配置使用-CSDN博客

4.学习如何通过摄像头和 麦克风将现场录制的数据 通过 RTMP 协议推送到服务器。并保存到本地。

5. 学习如何从 服务器 拉流到本地的代码实现

6.SRS 源码分析

7. 自己手写一个类似于 SRS的服务器 

二 RTMP协议详解

1.RTMP 协议是个啥?我们要学哪些知识点?

RTMP 是 Real Time Messaging Protocol( 实时消息传输协议) 的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。

RTMP 与 HTTP 一样, 都属于 TCP/IP 四层模型的应用层。

上述红色部分的含义如下图:

我们在开发android程序的时候,使用OKHTTP开源库,封装了socket完成http数据的开发。

librtmp 这个开源库,封装了socket建立TCP通讯,并实现了RTMP数据的收发。

因此这里我们要学习RTMP协议外,还需要学习一下librtmp这个开源库的很多具体的api,这样才能更好的理解和使用 RTMP

RTMP 协议传输时会对数据格式化,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把 Message 划分为带有 Message ID 的 Chunk,每个 Chunk 可能是一个单独的 Message,也可能是 Message 的一部分,在接收端会根据 Chunk 中包含的 data 的长度,message id 和 message 的长度把 chunk 还原成完整的 Message,从而实现信息的收发。 (Message, Chunk)

2. librtmp库--编写RTMP代码时要用到的库

librtmp是一个开源的基于C语言的库,提供了一个连接RTMP服务器,发送和接收RTMP流的API。

它可以用来开发流媒体播放器,网络直播等应用。它的主要特点是快速、稳定和低延迟。

librtmp支持RTMP,RTMPS,RTMPE和RTMPTE加密协议等多种协议。除此之外,它还支持

PProxy,PPlayer和appspot的代理服务器协议。在Linux下,使用librtmp开发的应用可以支持

Windows,Android等多种系统平台。

librtmp的核心代码是基于ffmpeg中的libavformat库实现的。它依赖于libz, libssl, libcrypto等第三方

库,需要自行编译安装。

三. 如何学习 RTMP 

我们按照直播架构的三部分学习,顺序是1,2,3 ,为什么不是1,3,2呢?因为3最难。

1实际上就是 直播人员

2实际上就是 观看直播观众

3实际上就是 流媒体服务器

如何学习呢?

搭建一个1,2,然后使用成熟的流媒体服务器3(我们这里就使用SRS),

先将1推送到 流媒体服务器3, 把1 学明白了,然后再学2,

最后学习3

2. 手写代码完成给SRS 服务器发送数据,推流过程使用代码完成

我们当前在服务器开启后,是通过 ffmpeg命令给服务器中推送数据的,如下

ffmpeg -re -i D:/yinshipinres/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.31.251/study/acha

这一节的任务就是要将这个命令 换成代码,这块的内容都是围绕这个重点开始的。

这一步,我们也要细分。

首先是 将一个mp4文件,或者wav文件,flv文件,通过RTMP协议推送到服务器。

那么如何推送数据到服务器呢?以及推送的格式是啥呢?这就要先要学习 RTMP的协议,然后学习RTMP librtmp 库是如何

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值