龙空技术网

ZLMediaKit流媒体(一)编译安装

音视频开发老舅 360

前言:

现在大家对“aspnet core 流媒体”可能比较关心,朋友们都想要了解一些“aspnet core 流媒体”的相关内容。那么小编也在网摘上收集了一些关于“aspnet core 流媒体””的相关内容,希望兄弟们能喜欢,小伙伴们一起来了解一下吧!

环境ubuntu 18.04 64bitZLMediaKit 20210924ffmpeg 3.4.8前言

ZLMediaKit 是一个基于 C++11 的高性能运营级流媒体服务框架,这个项目定位于商用级流媒体服务器,支持 linux、macos、windows、android、ios全平台,支持多种协议,如 RTSP、RTMP、HLS、HTTP-FLV、WebSocket-FLV、GB28181、HTTP-TS、WebSocket-TS、HTTP-fMP4、WebSocket-fMP4、MP4、WebRTC等,且支持协议互转,提供了完善的标准 C API、RESTful API和 web hook,支持丰富的业务逻辑,真正做到了拿来即用

功能清单

下图是 ZLMediaKit 的功能清单,涵盖的内容非常广泛

C++音视频开发学习资料点击莬费领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

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编码,其他编码能转发但不能转协议RTMP[S]RTMP[S] 播放服务器,支持RTSP/MP4/HLS转RTMPRTMP[S] 发布服务器,支持录制发布流RTMP[S] 播放器,支持 RTMP 代理,支持生成静音音频RTMP[S] 推流客户端支持http[s]-flv直播支持websocket-flv直播支持H264/H265/AAC/G711/OPUS编码,其他编码能转发但不能转协议支持RTMP-H265支持RTMP-OPUSHLS支持 HLS 文件生成,自带 HTTP 文件服务器通过 cookie 追踪技术,可以模拟 HLS 播放为长连接,可以实现 HLS 按需拉流、播放统计等业务支持 HLS 播发器,支持拉流 HLS 转rtsp/rtmp/mp4支持H264/H265/AAC/G711/OPUS编码TS支持http[s]-ts直播支持ws[s]-ts直播支持H264/H265/AAC/G711/OPUS编码fMP4支持http[s]-fmp4直播支持ws[s]-fmp4直播支持H264/H265/AAC/G711/OPUS编码HTTP[S]与WebSocket服务器支持目录索引生成,文件下载,表单提交请求客户端提供文件下载器(支持断点续传),接口请求器,文件上传器完整 HTTP API 服务器,可以作为 web 后台开发框架支持跨域访问支持 http 客户端、服务器 cookie支持 WebSocket 服务器和客户端支持 http 文件访问鉴权GB28181与RTP推流支持UDP/TCP国标RTP(PS或TS)推流服务器,可以转换成RTSP/RTMP/HLS等协议支持RTSP/RTMP/HLS转国标推流客户端,支持TCP/UDP模式,提供相应 restful api支持H264/H265/AAC/G711/OPUS编码支持海康 ehome 推流MP4点播与录制支持录制为FLV/HLS/MP4RTSP/RTMP/HTTP-FLV/WS-FLV支持MP4文件点播,支持seek支持H264/H265/AAC/G711/OPUS编码WebRTC支持 WebRTC 推流,支持转其他协议支持 WebRTC 播放,支持其他协议转WebRTC支持 simulcast支持 rtx/nack支持单端口、多线程、客户端网络连接迁移(开源界唯一)。

C++音视频开发学习资料点击莬费领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

其他支持丰富的 restful api 以及 web hook 事件支持简单的 telnet 调试支持配置文件热加载支持流量统计、推拉流鉴权等事件支持虚拟主机,可以隔离不同域名支持按需拉流,无人观看自动关断拉流支持先拉流后推流,提高及时推流画面打开率提供 c api sdk支持 FFmpeg 拉流代理任意格式的流支持 http api 生成并返回实时截图支持按需解复用、转协议,当有人观看时才开启转协议源码编译及测试

源码编译之前,先安装编译器、cmake 构建工具及需要的第三方依赖库

# 安装编译器sudo apt install build-essential cmake# 其它依赖库sudo apt-get install libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg

完成后,就可以开始拉取源码并编译了,依次执行下面命令

git clone  ZLMediaKit# 更新子模块git submodule update --initmkdir buildcd buildcmake ..make -j4

编译好后,生成的可执行文件存放在 ZLMediaKit/release/linux

来启动服务

cd ../release/linux# 可以通过-h来查看命令支持的参数sudo ./MediaServer -d
(base) xugaoxiang@1070Ti:~/workshop/github/ZLMediaKit/release/linux$ sudo ./MediaServer -d2021-09-24 14:27:54.227 D MediaServer[1895-main thread] System.cpp:100 startDaemon | 启动子进程:18972021-09-24 14:27:54.227 I MediaServer[1897-main thread] System.cpp:130 systemSetup | core文件大小设置为:184467440737095516152021-09-24 14:27:54.227 I MediaServer[1897-main thread] System.cpp:139 systemSetup | 文件最大描述符个数设置为:10485762021-09-24 14:27:54.232 W MediaServer[1897-main thread] SSLUtil.cpp:98 loadPublicKey | error:02001002:system library:fopen:No such file                               or directory2021-09-24 14:27:54.232 W MediaServer[1897-main thread] SSLUtil.cpp:126 loadPrivateKey | error:2006D080:BIO routines:BIO_new_file:no su                              ch file2021-09-24 14:27:54.232 D MediaServer[1897-stamp thread] util.cpp:342 operator() | Stamp thread started!2021-09-24 14:27:54.233 I MediaServer[1897-main thread] EventPoller.cpp:466 EventPollerPool | 创建EventPoller个数:42021-09-24 14:27:54.233 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:5542021-09-24 14:27:54.234 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:3322021-09-24 14:27:54.234 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:19352021-09-24 14:27:54.234 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:193502021-09-24 14:27:54.235 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:80802021-09-24 14:27:54.235 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:4432021-09-24 14:27:54.235 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:90002021-09-24 14:27:54.236 I MediaServer[1897-main thread] TcpServer.cpp:188 start_l | TCP Server listening on 0.0.0.0:100002021-09-24 14:27:54.236 I MediaServer[1897-main thread] UdpServer.cpp:78 start_l | UDP Server bind to 0.0.0.0:100002021-09-24 14:27:54.237 I MediaServer[1897-main thread] main.cpp:368 start_main | 已启动http api 接口2021-09-24 14:27:54.237 I MediaServer[1897-main thread] main.cpp:370 start_main | 已启动http hook 接口

服务启动好了以后,就可以在客户端推流,简单起见,就在同一台机器上推流,不同主机的话,修改下 ip 地址即可

C++音视频开发学习资料点击莬费领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

使用rtsp方式推流

# h264编码ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test# h265编码ffmpeg -re -i test.mp4 -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

ffmpeg 推流成功后,注意看下服务器端的输出信息

2021-09-24 16:47:42.327 D MediaServer[21725-event poller 0] RtspSession.cpp:53 RtspSession | 140068211663280(127.0.0.1:55128)2021-09-24 16:47:42.329 I MediaServer[21725-event poller 0] MediaSource.cpp:414 emitEvent | 媒体注册:hls __defaultVhost__ live test2021-09-24 16:47:42.329 D MediaServer[21725-event poller 0] MediaSink.cpp:141 emitAllTrackReady | all track ready use 0ms2021-09-24 16:47:42.329 I MediaServer[21725-event poller 0] MultiMediaSourceMuxer.cpp:297 onAllTrackReady | stream: rtsp://127.0.0.1:554/live/test , codec info: mpeg4-generic[48000/2/16] H264[854/480/48]2021-09-24 16:47:45.596 I MediaServer[21725-event poller 0] MediaSource.cpp:414 emitEvent | 媒体注册:rtsp __defaultVhost__ live test2021-09-24 16:47:45.641 I MediaServer[21725-event poller 0] MediaSource.cpp:414 emitEvent | 媒体注册:rtmp __defaultVhost__ live test2021-09-24 16:47:45.641 I MediaServer[21725-event poller 0] MediaSource.cpp:414 emitEvent | 媒体注册:ts __defaultVhost__ live test2021-09-24 16:47:45.728 I MediaServer[21725-event poller 0] MediaSource.cpp:414 emitEvent | 媒体注册:fmp4 __defaultVhost__ live test

可以看到几个媒体注册的消息,同时支持 rtsp、rtmp、hls等协议,现在可以另一台机器上开个播放器播放了,像 vlc、ffplay 都可以,播放的 url 是

rtsp://192.168.1.140/live/testrtmp://192.168.1.140/live/test

其中 192.168.1.140 是开启视频服务的机器 IP 地址

hls 默认端口是80,我这里由于冲突,已经将配置文件 config.ini 中的端口改成了8080,这个 ini 文件也是视频服务器的配置文件,可以根据自己的实际情况进行修改

使用rtmp方式推流

ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test# RTMP标准不支持H265,但是国内有自行扩展的,如果你想让ffmpeg支持RTMP-H265,需要重新编译ffmpeg,可以参考:

ffmpeg 推流成功后,服务器端产生的 url 与 上面的rtsp 推流方式类似,这里不再赘述

使用rtp方式推流

ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

ffmpeg 推送后,服务器端输出了对应流的 ID

拿到了这个 ID 后,这时候就可以拼接 url 进行播放了,如

rtmp://192.168.1.140/rtp/C20C27F2rtsp://192.168.1.140/rtp/C20C27F2

如果你对音视频开发感兴趣,或者对本文的一些阐述有自己的看法,可以在下方的留言框,一起探讨。

标签: #aspnet core 流媒体