ZLMediaKit Windows编译快速入门

前言

我也只是个初学ZLMediaKit的,遇到什么我就写什么,但是Windows平台的使用确实让我觉得有些难为情,我就记录了下来

一、下载源码

前提条件:安装git

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
#下载cmake编译的包(完整更新文件)
cd ZLMediaKit
git submodule update --init

二、下载编译器

windows使用cmake来构建项目,需要下载cmake客户端进行创建VS的sln文件

下载地址:cmake-gui

下载完成后解压文件,打开bin目录下

三、cmake-gui的使用

XXXX\ZLMediaKit-----这个是cmake需要编译的项目文件路径

 

选择的编译的版本记得选择vs2017,不要问我为是什么!

四、下载Openssl

下载地址:Win32/Win64 OpenSSL Installer for Windows 

记得下载32位的,不要问我为什么!

无脑下一步,安装完成后配置环境变量:

环境变量的值是安装之后的bin目录

五、构建和编译项目

在编译时选择编译Release 版本.

 

打开项目(需要VS2017及以上),直接编译会报错,需要将C:\Program Files (x86)\OpenSSL-Win32\lib\VC\static目录下的文件复制到C:\Program Files (x86)\OpenSSL-Win32\lib下

此处有坑,VS2019版本的代码默认会去找64位的openssl,但是,,,就算有它也找不到,vs2017就会找32位的,能顺利编译成功

打开文件生成目录XXXX\ZLM\ZLMediaKit\release\windows\Debug\Release

全部生成完成之后进行测试

六、安装FFmpeg

FFmpeg官网:FFmpeg

之后会跳转界面到这个网站:Builds - CODEX FFMPEG @ gyan.dev

找到构建好的安装包地址:

下载完成之后将文件复制到你想复制的地方:

添加环境变量:

 测试安装完成

打开cmd

输入 ffmpeg -version

 完成安装

七、FFmpeg基本推流测试

找到之前编译好的文件,启动MediaServer服务,在cmd控制台启动服务

MediaServer start

出现这个代表服务启动OK

启动ffmpeg进行视频流推送,同样是在cmd窗口执行命令

ffmpeg -re -i "D:\MyFiles\FFOutput\[高清 1080P+] 正义联盟:扎克·施奈德版.mp4"  -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

rtp://127.0.0.1:10000是推送到的地址

rtp:视频推送方式

h264:是视频的视频编码格式

访问推送出来的视频流

在ffmpeg服务启动后,MediaServer服务的命令窗口会出现这些信息,EBDB747C就是推送出的文件名

视频访问路径:

http://127.0.0.1/rtp/EBDB747C.flv

 这就完成了一个最基础的视频推流

具体操作ffmpeg请查看文档

FFmpeg文档(V4.0 2018/05/15) (itiit.cn)

八、一个基础的测试程序

一个正儿八经用的程序不可能还要自己敲命令(滑稽)

这里用了一个大佬写的基于.Net Core3.1的RESTful客户端的lib库

MingZhuLiu/ZLMediaKit.DotNetCore.Sdk: 一个基于ZLMediaKit的.NetCoreSDK (github.com)

使用Git下载

用Vs2019打开项目

原本的的调试项目是为了显示APi可调用的方法,并不能直接使用

稍微修改一下,只保留拉流方法

cmd启动MediaServer的程序(其实好像直接双击也可以。。。)

将STRealVideo.Control设置为启动项目,启动调试程序

在CMD的窗口会有key的信息,代表程序调用成功

此时可以访问http://127.0.0.1/live/2.live.ts,查看你所推流的视频(具体访问url规则,查看wiki播放url规则 · ZLMediaKit/ZLMediaKit Wiki (github.com)

那有没得办法不用先打开MediaServer的程序偷懒呢,有!

        
        using System.Diagnostics; 
        private static Process app;
        /// <summary>
        /// 启动MediaServer
        /// </summary>
        public static bool InitZLM()
        {
​
            if (app == null)
            {
                app = new Process();
                var ServerUrl = ConfigHelper.GetJsonConfig("ServerUrl");
                //"C:/Users/28636/Desktop/ZLM/MediaServer/MediaServer.exe"
                if (!File.Exists(ServerUrl))
                {
                    Console.WriteLine("MediaServer未成功启动");
                    Console.WriteLine("请配置ServerUrl后重新启动");
                    return false;
                }
                app.StartInfo.FileName = ServerUrl;
                app.StartInfo.UseShellExecute = false;
                app.StartInfo.RedirectStandardOutput = false;
                app.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
                app.Start();
            }
            else
            {
                if (app.HasExited) //是否正在运行
                {
                    app.Start();
                }
            }
​
            return true;  
        }
        public static void Closed()
        {
            Process[] pProcess;
            pProcess = Process.GetProcesses();
            for (int i = 1; i <= pProcess.Length - 1; i++)
            {
                if (pProcess[i].ProcessName == "MediaServer")   //任务管理器应用程序的名
                {
                    pProcess[i].Kill();
                    break;
                }
            }
            app.Close();
            //app.Kill();
        }

添加这个方法,直接启动MediaServer,然后在调整一下代码

然后就能在控制台直接输入指定操作进行MediaServer的Api调用

(其实大概就是MediaServer调用ffmpeg,RESTful客户端去调用MediaServer,套娃。。。)

九、使用中遇到的问题

1、cpu的负载有些高

   这个问题其实是因为在MediaSever的配置文件中ffmpeg默认是用cpu去进行编码的,只需要在MediaSever的配置文件中去修改命令的模板,将libx264修改为h264_qsv就是调用核显进行编码了,独显同理,不过发现独显还是厉害,画质更好,性能更强。
libx264(cpu)
h264_qsv 核显编码(输出)----英特尔
h264_cuvid 独显解码 h264_nvenc   编码  ----英伟达

 

2、字符的编码格式问题,大佬提供的这个库,无论怎么都会出现中文乱码

大佬提供的这个库 默认采用的是utf-8,但是,,,

问题来了,就算在MediaServer的配置文件中使用utf-8,但是这个只是用于http的通信,MediaServer程序默认去读和写的操作还是用的GB2312的编码格式

你如果调用 `getServerConfig()` 就会导致你读到的中文怎么都会是乱码,没得办法,不太会C++,只能改这个.NETCore 写的 RESTful客户端, 在所有用到`DefaultEncoding`的地方全部改为这个

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var en = Encoding.GetEncoding("GB2312");

这样就不会出现中文乱码了

十、直接使用VS2019编译项目不使用CMake进行项目构建

时间来到2021.10.22,好像zlm的开发者优化了下什么东西,然后cmake就会报错

这个错误我也不太懂是怎么出现的,所幸直接使用VS2017以上的高版本直接进行编译

这是WIKI 的编译说明:

先下载完项目后

 打开文件夹后,会进入一个等待,VS会自动执行CMAKE的一个构建工作

选择如图文件:这个是Cmake的编译说明文件

选中后,下拉选择管理配置,下方配置类型选择Release

 

 生成的文件会在XXXX\ZLMediaKit\release\windows64\Release的文件夹下

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值