流媒体简介

一、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. 功能清单

https://user-images.githubusercontent.com/11495632/190864440-91c45f8f-480f-43db-8110-5bb44e6300ff.png

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-调度,使得不同层级只负责一项任务。达到集群部署的效果,可横向和纵向扩展。

https://note.youdao.com/yws/public/resource/bdbc12a9b6b757ab602a6e3a52a7f124/xmlnote/07B285EBC5674182BBA63C2D0B1255C2/1297

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

posted @ 2023-02-13 11:58  泽良_小涛  阅读(837)  评论(0编辑  收藏  举报