- 连接建立方向角度
- ClientSession, ServerSession
- 音视频数据发送方向角度
- PushSession, PullSession, PubSession, SubSession
- 为什么要给它们命名
- lal功能点
流媒体传输,通常指持续性在网络上传输流式音视频数据。
一条传输数据的网络通道,由两端组成,下面我们对不同情况下的两端做定义。
连接建立方向角度
从连接建立方向角度,分为主动发起端,和被动处理端。
比如over TCP的连接:
- 调用connect,连接对方的称为主动发起端
- 调用accept,处理连接的称为被动处理端
很多时候,我们会把
- 主动发起端称为client客户端
- 被动处理端称为server服务端
注意,这种client,server的划分是一种特定含义的划分。client客户端并不仅仅是指PC、APP、Web等运行在C端的程序,也可以是在一个服务器上的服务,比如服务A使用connect连接另外一个服务器上的服务B。
ClientSession, ServerSession
从连接建立方向角度,主动发起端称为client session,被动处理端称为server session:
1 | connect accept |
音视频数据发送方向角度
除了连接建立方向角度,另一个角度是数据发送方向角度:
- 数据发送端
- 数据接收端
注意,由于连接建立方向和数据发送方向可能一致也可能不一致,所以又分为4种角色:
PushSession, PullSession, PubSession, SubSession
A连接B,A向B发送数据:
1 | A | --connect--> | B |
上面这种情况:
- A属于
ClientSession
,我们称之为PushSession
- B属于
ServerSession
,我们称之为PubSession
另一种情况,A连接B,B向A发送数据:
1 | A | --connect--> | B |
上面这种情况:
- A属于
ClientSession
,我们称之为PullSession
- B属于
ServerSession
,我们称之为SubSession
可以看到,PubSession
和PullSession
属于接收(输入)音视频数据,SubSession
和PushSession
属于发送(输出)音视频数据。
注,Pub/Sub是Publish/Subscribe的缩写
注意,此处说的数据都是指音视频数据。而不是连接建立后,业务层协议中握手、发布、订阅等信令数据。
为什么要给它们命名
为了方便沟通。
比如说一个流媒体模块支持rtmp推流。那么究竟是说它可以处理别人给它推rtmp流,还是说它可以将流用rtmp格式推送给别人?有了以上命名,第一种情况对应rtmp.PubSession,第二种情况对应rtmp.PushSession。
比如说一个流媒体模块支持rtmp推流,rtsp拉流。那么究竟是说别人将rtmp流推给它,然后另外一个人从它这拉rtsp流;还是说它主动从别人那拉rtsp流,然后再将流转换成rtmp格式推送出去呢?有了以上命名,第一种情况对应rtmp.PubSession加rtsp.SubSession,第二种情况对应rtmp.PullSession加rtmp.PushSession。
lal功能点
目前不少开源流媒体库/服务器都声称支持rtmp/httpflv/hls/rtsp/webrtc等一系列协议。但老实说,用户很难第一眼就看出是否满足自己的业务需求。
有了以上命名,就可以比较清晰的描述一个流媒体服务器的功能了。
比如lal开源流媒体服务器,在v0.14.0版本的README中有如下表格:
app/lalserver支持的协议:
- sub rtmp sub httpflv sub hls sub rtsp relay push rtmp pub rtmp ✔ ✔ ✔ - ✔ pub rtsp ✔ ✔ ✔ - ✔ relay pull rtmp ✔ ✔ ✔ - .
从第一行(非表头)可以看出:
- lal支持接收rtmp推流
- 并支持使用rtmp/httpflv/hls协议上lal拉(刚才所说推上来的rtmp)流
- 但是遗憾的是,v0.14.0版本不支持使用rtsp协议上lal拉流
- 最后一列
relay push rtmp
,表示lal支持将接收到的rtmp流,再使用rtmp将流推送出去。relay是中继的意思。该功能和多服务器节点级联功能相关。
第二行含义和第一行类似,只不过变成了支持接收rtsp推流。
第三行relay pull rtmp
,表示lal可以从另外一个节点拉取rtmp流至本地,并转换成rtmp/httpflv/hls供别人拉流。行内一般称为回源。
另外,lal还提供了一些独立的客户端小程序(示例代码),也有表格进行功能说明。并且还有关于不同传输容器格式中对不同编码格式的支持。详情参见lal README。
本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/20080/