前言

我也只是个初学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的文件夹下

ZLMediaKit Windows编译快速入门相关推荐

  1. Spread for Windows Forms快速入门(2)---设置Spread表单

    让我们从设置Spread的大小和表单的外观开始学习如何定制Spread,这些操作通常放在Form的构造函数中进行,在InitializeComponent()之后调用. 自定义控件的大小 你可以设置S ...

  2. Spread for Windows Forms快速入门(10)---绑定到数据库

    下面的教程将带你创建一个工程, 并将Spread控件绑定到一个数据库. 在这个教程中,主要的步骤为: 1. 将Spread添加到一个数据绑定工程中 2. 设置数据库连接 3. 指定要使用的数据 4. ...

  3. Spread for Windows Forms快速入门(1)---开始使用Spread

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Spread for Windows Forms是功能最为强大的表格控件,拥有灵活开放的对象模型和50,000个以上的A ...

  4. windows驱动快速入门

    本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如有错漏,欢迎留言交流指正 NT驱动框架 <Windows 内核情景分析>.(毛德操) 前置知识 R3和R0 的由来 Intel ...

  5. c#快速入门~在java基础上,知道C#和JAVA 的不同即可

    ☺ 观看下文前提:如果你的主语言是java,现在想再学一门新语言C#,下文是在java基础上,对比和java的不同,快速上手C#,当然不是说学C#的前提是需要java,而是下文是从主语言是java的情 ...

  6. golang快速入门[8.3]-深入理解IEEE754浮点数

    前文 golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速 ...

  7. .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)

    一.前言 本篇开发环境? 1.操作系统: Windows 10 X64 2.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core 下 ...

  8. Windows游戏编程快速入门方法

    Windows游戏编程快速入门方法 Easideao(简单思路) 序言: 从2001年到2005年,在不知不觉中我已经渡过了4年的职业游戏开发生涯.在这4年里经常会有些网友向我询问编程的入门有没有捷径 ...

  9. automake linux,Linux下automake软件编译与发布快速入门

    Linux下automake软件编译与发布快速入门 2008-04-22 eNet&Ciweek 进入编辑界面,输入内容如下: AUTOMAKE_OPTIONS=foreign bin_PRO ...

最新文章

  1. 一道关于整型提升/截断的经典练习题
  2. 骑摩托的蒙娜丽莎 - 曼妙风骚的花式慢跑算法
  3. 织梦{dede:channel}无子栏目不显示同级栏目的两种修改方法
  4. 【深度学习】擦除:提升 CNN 特征可视化的 3 种重要手段
  5. mysql修改表结构权限_mysql 修改表结构操作
  6. 【转】PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]
  7. Python之冒泡排序和选择排序的比较
  8. ASP.NET:返回按钮的解决方案摸索
  9. 如何查看sql2000 sp4是否安装成功 及sp4补丁安装
  10. EasyCVR平台通过国标GB28181接入柯达NVR显示注册失败,该如何解决?
  11. 单链表的简单操作与演示
  12. 多个fbx文件怎么合并_Unity3D之多个fbx导入场景, 合并多个动画
  13. Java处理MP3资料
  14. idea中提示程序包不存在或cannot resolve symbol
  15. Redis概述、安装、可视化访问
  16. 《概率论与数理统计》之样本空间和随机事件
  17. sftp命令复制文件
  18. C语言实现解析gps坐标(在一串字符串中找到北纬和东经的值)
  19. Linux Ubuntu22.04 安装synaptic包图形化管理工具和cairo-dock(最美观的Linux dock)
  20. AutoJs学习-文字转语音QQ发送

热门文章

  1. horizon多网卡配置
  2. openwrt 配置WAN 和 LAN
  3. c语言字典大全,c语言字典(C language dictionary).doc
  4. CF1569D Inconvenient Pairs
  5. 计算机无法唤醒,电脑休眠后无法唤醒怎么办 电脑休眠后无法唤醒原因及解决方法...
  6. 解决SecureFX中文乱码的方法
  7. ARIMA时间序列与LSTM神经网络的PK
  8. 【热更新】游戏热更新方案
  9. indesign java_InDesign必杀技,分分钟秒出方案排版(附ID排版模板)
  10. 电子文档翻译工具实现文章的批量翻译