Skip to content

v3_CN_ClientSDK

Winlin edited this page Sep 12, 2021 · 52 revisions

HOME > CN > Client SDK

整个直播的业务架构是:

+---------+      +-----------------+       +---------+
| Encoder +-->---+ SRS/CDN Network +--->---+ Player  |
+---------+      +-----------------+       +---------+

客户端推流(Encoder)和播放器(Player)的架构一般是:

+-------------------------------------------+
|           Device(Out/In YUV/PCM)          |
+-------------------------------------------+
|   Codec(YUV/PCM to/from H.264/AAC stream) |
+-------------------------------------------+
|   Muxer(H.264/AAC to/from FLV/MP4/HLS)    |
+-------------------------------------------+
|          Transport(RTMP/HTTP/UDP)         |
+-------------------------------------------+

关于Codec,可以使用硬件编码器或者软件编码器。硬件编码器指移动端设备中专用的编码芯片;软件编码指用FFMPEG/LIBX264直接编码设备的YUV/PCM原始数据。硬件编码的效率高,库很小,但是可以控制的参数,以及出现问题后的解决周期很长。软件编码效率当然是低,但是方便控制每个参数,如果需要做特殊处理,比如降低编码延迟,可以选软件方案,另外,软件方案的适配性会更好。

EXOPlayer

EXOPlayer是基于Android新的播放器框架的新播放器,支持众多的协议,包括HTTP-FLV和HLS。虽然不支持RTMP,但是支持FLV,因此延迟可以比HLS低很多。

播放器特性:

Android iOS Codec Transport Lowlatency
YES NO H.264+AAC FLV/HLS YES

YASEA可以和EXOPlayer配合,实现Android上的推流和播放,基于RTMP/FLV的方案,是3秒左右直播的一个可选方案。

LFLiveKit

LFLiveKit来疯开源的一个iOS推流端。

备注:lf.swift是一个iOS推流的库,也比较活跃,不过还没有LFLiveKit这么成熟。

IJKPlayer

ijkplayerB站出的一个播放器,基于FFMPEG软件解码,可以在Android和iOS上用。

LIBRTMP

LIBRTMP或者SRS-LIBRTMP,只是提供了Transport(RTMP)的功能,用于只需要做传输的场景,比如一些安防摄像头厂商,Transport之前是用RTSP/RTP做的,如果需要接入互联网,将流送到CDN给PC和移动端观看,直接使用H5或者Flash,不需要装插件时,可以用librtmp将已经编码的流MUX成FLV(RTMP传输实际上用的是FLV格式),然后通过librtmp发送出去。

SRS-LIBRTMP是SRS导出的库,为何要导出这个库呢?参考WIKI

YASEA

YASEASRS-SEA的超级升级版。YASEA是一个可商用的版本,关注的人也非常多,无比强大,有RTMP推流和美颜。SRS-SEA只是一个原型,想了解Android推流可以看这个代码。

编码器特性:

Android iOS Codec Transport Hardware
Encoder
Software
Encoder
Lowlatency
YES NO H.264+AAC RTMP/FLV YES YES NO

编码器高级特性:

美颜 横竖屏 摄像头
切换
对焦 动态码率 水印 贴纸
YES NO NO NO NO NO NO

编码器其他特性:

  • 回声抑制。

版本要求:Android SDK level 16+, Android 4.1, the JELLY_BEAN

SDK链接:

PC

PC端已经日落西山了啊,一年不如一年,被移动端给闹的啊。

不过对于有些应用场景,还是会用PC端推流,当然是用OBS或者OBS Studio

注意:OBS推流时,流名称的翻译有问题,流名称是要写在流密钥这里的,如下图所示。

OBS

OBS

PC的播放器,要么是Flash(RTMP, FLV, HLS),要么是MSE(H5, DASH, videojs, FLV)。

Low Latency

对于低延迟直播,下面的场景是验证过的,可以在1s左右:

+-----------------+         +-------+         +-----------+
| OBS/FMLE/FFMPEG +---->----+  SRS  +----->---+   Flash   +
+-----------------+         +-------+         +-----------+

当两端改成Android/iOS后,竟然没有一个SDK或者端考虑了如何支持低延迟,延迟他妈的全部都不考虑了,艹。

NOT Open Source Version

下面的是一些商业版本的SDK,有些是提供链接库,有些是部分开源。一般这些SDK是免费,底层的库是so的(不开源),可以向其他CDN推流,可以选择自己买的CDN。参考商业SDK.

Winlin 2017.4

Welcome to SRS wiki!

SRS 5.0 wiki

Please select your language:

SRS 4.0 wiki

Please select your language:

SRS 3.0 wiki

Please select your language:

SRS 2.0 wiki

Please select your language:

SRS 1.0 wiki

Please select your language:

Clone this wiki locally