流媒体简介
一、ZLMediaKit
1.项目特点
- 基于C++11开发,避免使用裸指针,代码稳定可靠,性能优越。
- 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。
- 使用多路复用/多线程/异步网络IO模式开发,并发性能优越,支持海量客户端连接。
- 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。
- 支持linux、macos、ios、android、windows全平台。
- 支持画面秒开、极低延时(500毫秒内,最低可达100毫秒)。
- 提供完善的标准C API,可以作SDK用,或供其他语言调用。
- 提供完整的MediaServer服务器,可以免开发直接部署为商用服务器。
- 提供完善的restful api以及web hook,支持丰富的业务逻辑。
- 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP支持都很完善。
- 全面支持H265/H264/AAC/G711/OPUS。
- 功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能。
- 极致性能,单机10W级别播放器,100Gb/s级别io带宽能力。
- 极致体验,独家特性
- 全面支持ipv6网络
2.项目定位
- 移动嵌入式跨平台流媒体解决方案。
- 商用级流媒体服务器。
- 网络编程二次开发SDK。
3. 功能清单
1)RTSP[S]
- RTSP[S] 服务器,支持RTMP/MP4/HLS转RTSP[S],支持亚马逊echo show这样的设备
- RTSP[S] 播放器,支持RTSP代理,支持生成静音音频
- RTSP[S] 推流客户端与服务器
- 支持 rtp over udp rtp over tcp rtp over http rtp组播 四种RTP传输方式
- 服务器/客户端完整支持Basic/Digest方式的登录鉴权,全异步可配置化的鉴权接口
- 支持H265编码
- 服务器支持RTSP推流(包括rtp over udp rtp over tcp方式)
- 支持H264/H265/AAC/G711/OPUS/MJPEG编码,其他编码能转发但不能转协议
2)RTMP[S]
- RTMP[S] 播放服务器,支持RTSP/MP4/HLS转RTMP
- RTMP[S] 发布服务器,支持录制发布流
- RTMP[S] 播放器,支持RTMP代理,支持生成静音音频
- RTMP[S] 推流客户端
- 支持http[s]-flv直播
- 支持websocket-flv直播
- 支持H264/H265/AAC/G711/OPUS编码,其他编码能转发但不能转协议
- 支持RTMP-H265
- 支持RTMP-OPUS
3)HLS
- 支持HLS文件生成,自带HTTP文件服务器
- 通过cookie追踪技术,可以模拟HLS播放为长连接,可以实现HLS按需拉流、播放统计等业务
- 支持HLS播发器,支持拉流HLS转rtsp/rtmp/mp4
- 支持H264/H265/AAC/G711/OPUS编码
4) TS
- 支持http[s]-ts直播
- 支持ws[s]-ts直播
- 支持H264/H265/AAC/G711/OPUS编码
5)fMP4
- 支持http[s]-fmp4直播
- 支持ws[s]-fmp4直播
- 支持H264/H265/AAC/G711/OPUS/MJPEG编码
6)HTTP[S]与WebSocket
- 服务器支持目录索引生成,文件下载,表单提交请求
- 客户端提供文件下载器(支持断点续传),接口请求器,文件上传器
- 完整HTTP API服务器,可以作为web后台开发框架
- 支持跨域访问
- 支持http客户端、服务器cookie
- 支持WebSocket服务器和客户端
- 支持http文件访问鉴权
7)GB28181与RTP推流
- 支持UDP/TCP RTP(PS/TS/ES)推流服务器,可以转换成RTSP/RTMP/HLS等协议
- 支持RTSP/RTMP/HLS等协议转rtp推流客户端,支持TCP/UDP模式,提供相应restful api,支持主动被动方式。
- 支持H264/H265/AAC/G711/OPUS编码
- 支持海康ehome推流
- 支持GB28181主动拉流模式
8)MP4点播与录制
- 支持录制为FLV/HLS/MP4
- RTSP/RTMP/HTTP-FLV/WS-FLV支持MP4文件点播,支持seek
- 支持H264/H265/AAC/G711/OPUS编码
9)WebRTC
- 支持WebRTC推流,支持转其他协议
- 支持WebRTC播放,支持其他协议转WebRTC
- 支持双向echo test
- 支持simulcast推流
- 支持上下行rtx/nack丢包重传
- 支持单端口、多线程、客户端网络连接迁移(开源界唯一)。
- 支持TWCC rtcp动态调整码率
- 支持remb/pli/sr/rr rtcp
- 支持rtp扩展解析
- 支持GOP缓冲,webrtc播放秒开
- 支持datachannel
- 支持webrtc over tcp模式
10)SRT支持
11)其他
- 支持丰富的restful api以及web hook事件
- 支持简单的telnet调试
- 支持配置文件热加载
- 支持流量统计、推拉流鉴权等事件
- 支持虚拟主机,可以隔离不同域名
- 支持按需拉流,无人观看自动关断拉流
- 支持先播放后推流,提高及时推流画面打开率
- 提供c api sdk
- 支持FFmpeg拉流代理任意格式的流
- 支持http api生成并返回实时截图
- 支持按需解复用、转协议,当有人观看时才开启转协议,降低cpu占用率
- 支持溯源模式的集群部署,溯源方式支持rtsp/rtmp/hls/http-ts, 边沿站支持hls, 源站支持多个(采用round robin方式溯源)
- rtsp/rtmp/webrtc推流异常断开后,可以在超时时间内重连推流,播放器无感知
4.网址
1)https://github.com/ZLMediaKit/ZLMediaKit
二、SRS
SRS 简介
SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。SRS提供了丰富的接入方案将RTMP流接入SRS,
包括推送RTMP到SRS、推送RTSP/UDP/FLV到SRS、拉取流到SRS。SRS还支持将接入的RTMP流进行各种变换,譬如将RTMP流转码、流截图、转发给其他服务器、转封装成HTTP-FLV流、转封装成HLS、转封装成HDS、录制成FLV。SRS包含支大规模集群如CDN业务的关键特性,譬如RTMP
多级集群、源站集群、VHOST虚拟服务器、无中断服务Reload、HTTP-FLV集群、Kafka对接。此外,SRS还提供丰富的应用接口,包括HTTP回调、安全策略Security、HTTP API接口、RTMP测速。SRS在源站和CDN集群中都得到了广泛的应用Applications。
SRS特点
1、简单,足够稳定。
2、高性能,高并发,SRS是单线程、事件/st-线程驱动。最大可支持6k客户端。
3、可以作为rtmp源服务器,也可作为节点对接CND,从其他rtmp服务器上推/拉流。
4、支持Vhost 及defaultVhost配置。
5、核心功能是分发RTMP,主要定位就是分发RTMP低延时流媒体,同时支持分发HLS流。
6、服务Reload 机制,即在不中断服务时应用配置的修改。达到不中断服务调整码率,添加或调整频道。
7、cache 一个GOP ,达到播放器能快速播放的效果。(gop_cache配置项)
8、可监听多个端口,支持长时间推拉流。
9、forward配置项,可在服务器间转发流。
10、支持转码,可以对推送到SRS的RTMP流进行转码,然后输出到其他RTMP服务器。可对指定的流配置是否转码。内置了FFMPEG.同时会提供FFMPEG的部分功能:输出纯音频、加文字水印、剪切视频、添加图片LOGO等。
11、支持http回调,提供了客户端连接接口、关闭连接接口、流发布、流停止、流播放、停止播放等接口,方便再封装的应用跟踪流信息。内置也有一个http服务器,可直接调用api接口。
12、内置流带宽测试工具、完善的日志跟踪规则。
13、脚本管理,提供init.d系统脚本,也可通过调用api 控制服务状态。
14、采集端支持:设备、本地文件,RTSP摄像头、rtmp等。官方意思是,能拉任意的流,只要FFMPEG支持,不是h264/aac都没有关系,FFMPEG能转码。SRS的接入方式可以是“推流到SRS”和“SRS主动拉流”。
15、支持将RTMP流录制成flv文件。FLV文件的命名规则是随机生成流名称,上层应用可通过http-callback 管理流信息。
16、SRS日志很完善,支持打印到console和file,支持设置level,支持连接级别的日志,支持可追溯日志。
3.SRS部署
SRS是国产优秀流媒体服务器,在Github上开源,可在 Linux 机器各主流系统上部署。操作简单。操作及配置清晰,文档齐全。
4. XX云平台使用SRS案例
1)XX云平台PGC直播管理
通过SRS 的http_callback ,XX云的直播模块,完成对流信息的管理。
主要功能:创建频道、编辑频道、跟踪频道信息、转码模板、时移、录制、直播加密。
2)SRS集群
SRS集群 : 基于SRS多节点、多层级部署, 通过srs-调度,使得不同层级只负责一项任务。达到集群部署的效果,可横向和纵向扩展。
3)基于SRS集群的UGC直播管理
5.网址
1)https://github.com/ossrs/srs
三、live555
live555 是一个 C++ 开发的流媒体项目,它主要由几个用于多媒体流的库组成,其官方网站地址为 http://www.live555.com/。live555 使用开放的标准协议 (RTP/RTCP,RTSP,SIP),方便与其它标准的流媒体组件互操作。这些库可以为 Unix-like(包括 Linux 和 Mac OS X),Windows,和 QNX (及其它 POSIX 兼容系统)等系统进行编译,它们可以被用于构建流媒体应用。除了库之外,live555 还包含了两个流媒体应用程序 "LIVE555 Media Server" 和 "LIVE555 Proxy Server",它们都是 RTSP 服务器应用程序。
live555 的库可以被用于处理 MPEG,H.265,H.264,H.263+,DV 或 JPEG 视频,及多种音频格式。它们还可以非常简单地进行扩展,以支持其它的音频或视频编解码格式,并可以被用于构建基本的 RTSP 或 SIP 客户端和服务器。
四、media-server
1.libflv
- FLV video codec: H.264/H.265/H.266/AV1/VP8/VP9/VP10
- FLV audio codec: AAC/MP3/G.711/Opus
- FLV file read/write
- H.264/H.265/H.266/AV1 bitstream filter: annex-b <-> mp4 stream
- AAC bitstream filter: ADTS <-> ASC
2. librtmp
- rtmp-client: RTMP publish/play
- rtmp-server: RTMP Server live/vod streaming
3. libmpeg
- ITU-T H.222.0 PS/TS read/write
- ps/ts codec: H.264/H.265/H.266/AAC/MP3/G.711/Opus
4.librtp
- RFC3550 RTP/RTCP
- RTP with H.264/H.265/H.266/MPEG-2/MPEG-4/VP8/VP9/AV1
- RTP with G.711/G.726/G.729/MP3/AAC/Opus
- RTP with MPEG-2 PS/TS
- RTP Header Extension
- RTCP PSFB/RTPFB/XR
5. librtsp
- RFC2326 RTSP
- RFC4566 SDP
- SDP fmtp: H.264/H.265/H.266/AAC/Opus/G.711
6.libhls
- HLS M3U8: generate m3u8 file
- HLS Media: TS segmenter
- HLS fmp4 segmenter
- HLS Master/Playlist m3u8 parse
7.libdash
- ISO/IEC 23009-1 MPEG-DASH static(vod)
- ISO/IEC 23009-1 MPEG-DASH dynamic(live)
- DASH MPD v3/v4 parser
8.libmov
- ISO/IEC 14496-12 MP4 File reader/writer
- MP4 faststart(moov box before mdat)
- fMP4(Fragment MP4) writer
- MP4 with H.264/H.265/H.266/AV1/VP8/VP9/JPEG/PNG
- MP4 with AAC/Opus/MP3/G.711
9. libmkv
- MKV/WebM file read/write
- MKV/WebM live streaming
10.libsip
- sip user-agent (UAC/UAS)
- sip with ICE
11. libhttp(https://github.com/ireader/sdk)
- HTTP Server(base AIO)
- HTTP Client
- HTTP Cookie
12.网址
1)https://github.com/ireader/media-server
五、ABLMediaServer
1.功能说明
ABLMediaServer高性能流媒体服务器,windows平台采用高性能的完成端口网络模型、Linux下采用epoll,加上线程池进行媒体数据的接收、转换、发送。服务器的性能强劲、运行稳定,坚如磐石。经过压力测试比较,转发性能、CPU占有率、运行稳定性优势明显 。可以通过ffmpeg命令或者其他标准的rtsp、rtmp推流函数往ABLMediaServer推送rtsp流、rtmp流,请求服务器代理拉流,请求服务器接收国标GB28181。服务器通过转换,输出标准的rtsp码流、rtmp码流、http-flv、ws-flv 码流(支持H265视频输出)、http-mp4(视频支持H264、H265,音频支持AAC)、hls码流输出(视频支持H264、H265,音频支持AAC)、GB28181码流(国标PS流 )输出。
流媒体服务器支持录像、支持智能录像删除、录像查询、录像文件点播、录像文件极速下载。http-flv、ws-flv、http-mp4 协议点播时
支持暂停继续、支持拖动播放。rtsp点播录像文件时支持慢放(1/16、1/8、1/4、1/2),快放(2、4、8、16 )、正常速度、支持拖动播放。
流媒体服务器支秒级(基本上1秒以内)图片抓拍,支持对抓拍的图片进行查找,支持抓拍图片以http协议下载。
服务器支持H265转码为H264,转码输出视频支持指定分辨率、宽高、码率大小等等参数。Windows平台支持英伟达显卡硬件加速转码。实
测linux 平台能最大并发转码40路H265(硬件环境 至强 E5 2650 V3),实测windows 平台能最大并发转码35路H265(i9 + 英伟达 RTX 2080)
服务器支持转码出来的视频打入自定义水印,支持水印的字符内容、字体大小、 字体颜色、字体位置都可以在配置文件中配置。
非常感谢ZLMediaKit和Media-Server 两个工程项目的作者,ABLMediaSever参考复用了ZLMediaKit的http请求函数的参数表(请求的URL及请求的参数名及一些初始值)以及整个框架的一些设计思想。直接调用了Media-Server 工程的 rtmp、flv、hls、fmp4 复用与解复用等等。
非常崇拜与感谢两位大佬为中国的开源流媒体努力与付出,再次感谢。
2.代码来源
QQ群 873666268