ZLMediaKit 使用教程 - 入门

前言

ZLMediaKit 是一个基于C++11的高性能运营级流媒体服务框架。

项目地址:GitHub - ZLMediaKit/ZLMediaKit

 

使用教程

本教程为个人用于项目实践操作流程记录,教程仅完成项目基础运行。教程内容以Ubuntu系统为例,其他系统可参考官方文档。

一、安装、编译、运行(Ubuntu)

详细步骤参考官方文档:快速开始 · ZLMediaKit/ZLMediaKit Wiki · GitHub

1、获取代码

请勿使用github下载zip包的方式下载源码,务必使用git克隆ZLMediaKit的代码,因为ZLMediaKit依赖于第三方代码,zip包不会下载第三方依赖源码,操作如下:

# 国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 千万不要忘记执行这句命令
git submodule update --init

2、编译器

2.1、编译器版本要求

ZLMediaKit采用了C++11的语法和库,要求编译器支持完整的C++11标准,即:

Linux上要求gcc版本 >= 4.8(4.7应该也能支持)

2.2、安装编译器

Ubuntu系统一般自带的gcc版本够新,安装gcc编译器参考:

sudo apt-get install build-essential

# 通过该命令查看gcc版本
gcc -v

3、cmake

ZLMediaKit采用cmake来构建项目,通过cmake才能生成Makefile(或Xcode/VS工程),所以必须先安装cmake才能完成后续步骤。

Ubuntu系统一般自带的cmake版本够新,安装cmake参考:

sudo apt-get install cmake

# 通过该命令查看cmake版本
cmake -version

4、依赖库

4.1、依赖库列表

ZLMediaKit可选依赖一些第三方库,这些库都不是必选的;在构建ZLMediaKit时,cmake能查找系统路径中的这些库,并根据安装情况选择是否开启相关特性,你可以选择安装这些依赖并启用相关特性:

  • openssl

    • flash player在播放rtmp时,采用的是复杂握手模式,如果不安装该库,flash player将播放不了zlmediakit 提供的rtmp url.

    • 同时ZLMediaKit的https/rtsps/webrtc相关功能需要使用openssl才能开启。

  • ffmpeg

    zlmediakit可以通过fork ffmpeg进程的方式实现多种协议的拉流,编译时不需要安装FFmpeg。

  • sdl、avcodec、avutil

    这3个库供ZLMediaKit的test_player测试程序使用,你通常不需要安装这3个库。

4.2、安装依赖库

Ubuntu系统下安装依赖的方法:

# openssl必须安装, 其他选择性安装(如果使用ffmpeg推流,那ffmpeg需要安装)
sudo apt-get install libssl-dev
sudo apt-get install libsdl-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavutil-dev
sudo apt-get install ffmpeg

5、构建和编译项目

由于开启webrtc相关功能比较复杂,默认是不开启编译的,如果对zlmediakit的webrtc功能比较感兴趣,请参考官方文档。

在Linux系统下,按以下方式编译:

cd ZLMediaKit
mkdir build
cd build
cmake ..
make -j4

6、运行

ZLMediaKit工程主要生成3种二进制目标文件,他们的生成的路径在release目录下,这些目标文件主要分为:MediaServer进程; c api 的SDK; 以test_开头的测试程序。

此处仅运行MediaServer进程。

MediaServer是ZLMediaKit作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用,如果你需要更复杂的业务逻辑,可以通过Web HOOKRESTful API实现,同时你可以通过配置文件控制其参数。

cd ZLMediaKit/release/linux/Debug
# 通过-h可以了解启动参数
./MediaServer -h
# 以守护进程模式启动
./MediaServer -d &

二、推流测试

ZLMediaKit支持rtsp/rtmp/rtp推流,一般通常使用obs/ffmpeg推流测试,其中FFmpeg推流命令支持以下:

1、使用rtsp方式推流

# h264推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
# h265推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

2、使用rtmp方式推流

# 如果未安装FFmpeg,你也可以用obs推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test
# RTMP标准不支持H265,但是国内有自行扩展的,如果你想让FFmpeg支持RTMP-H265,
# 请按照此文章编译:https://github.com/ksvc/FFmpeg/wiki/hevcpush

3、使用rtp方式推流

# h264推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
# h265推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

三、拉流

1、使用VLC工具拉流

ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

以Rtsp为例,"/path/to/test.mp4" 替换为当前文件路径下需要推流的MP4文件路径,rtsp://127.0.0.1/live/test 则是推流的地址。

ZLMediaKit一般会把rtsp、rtmp流媒体源互相转换,也会转换成hls/http-ts/ws-ts/http-fmp4/ws-fmp4,播放的url如下:

具体可参考:ZLMediaKit - 播放url规则

HLS(mpegts) :

  • http://somedomain.com/live/0/hls.m3u8
  • https://somedomain.com/live/0/hls.m3u8
  • http://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com
  • https://127.0.0.1/live/0/hls.m3u8?vhost=somedomain.com

HLS(fmp4):

  • http://somedomain.com/live/0/hls.fmp4.m3u8
  • https://somedomain.com/live/0/hls.fmp4.m3u8
  • http://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com
  • https://127.0.0.1/live/0/hls.fmp4.m3u8?vhost=somedomain.com

因此,只需要在网络串流中输入上述服务中启动的地址,即可拉流:

 2、使用html网页拉流

使用 video.js 和 HLS.jsvideo.js 与 HLS.js 的组合是最常见的方案。为了进一步确认是否是浏览器兼容性问题,确保使用正确的库和设置。代码示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HLS Stream</title>

    <!-- 引入 Video.js 样式 -->
    <link href="https://cdn.jsdelivr.net/npm/video.js/dist/video-js.min.css" rel="stylesheet">

    <!-- 引入 HLS.js 库 -->
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
    <h1>HLS Stream Demo</h1>
    
    <!-- 创建一个 video 标签 -->
    <video id="video" class="video-js vjs-default-skin" controls>
        <source src="http://192.168.198.170/live/stream/hls.m3u8" type="application/x-mpegURL">
    </video>

    <!-- 引入 Video.js 脚本 -->
    <script src="https://cdn.jsdelivr.net/npm/video.js/dist/video.min.js"></script>

    <script>
        var video = document.getElementById('video');

        // 判断浏览器是否支持 HLS
        if (Hls.isSupported()) {
            var hls = new Hls();

            // 当 HLS 播放列表加载完毕,启动播放
            hls.loadSource('http://192.168.198.170/live/stream/hls.m3u8');
            hls.attachMedia(video);
            hls.on(Hls.Events.MANIFEST_PARSED, function () {
                video.play();
            });
        } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
            // 对于支持 HLS 的浏览器(如 Safari),直接使用原生支持
            video.src = 'http://192.168.198.170/live/stream/hls.m3u8';
            video.addEventListener('loadedmetadata', function () {
                video.play();
            });
        }
    </script>
</body>
</html>

Html需要通过服务访问才能拉流成功,请勿通过本地文件访问。

如何快速将Html在本地上线,可通过vscode安装Live Server拓展,将网页部署在本地,具体操作可查阅相关资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值