客户端 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原始数据。硬件编码的效率高,库很小,但是可以控制的参数,以及出现问题后的解决周期很长。软件编码效率当然是低,但是方便控制每个参数,如果需要做特殊处理,比如降低编码延迟,可以选软件方案,另外,软件方案的适配性会更好。
YASEA
YASEA是SRS-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链接:
- Android Encoder: YASEA
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
备注:lf.swift是一个iOS推流的库,也比较活跃,不过还没有LFLiveKit这么成熟。
IJKPlayer
ijkplayer是B站出的一个播放器,基于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。
PC
PC端已经日落西山了啊,一年不如一年,被移动端给闹的啊。
不过对于有些应用场景,还是会用PC端推流,当然是用OBS或者OBS Studio。
注意: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.