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的文件夹下
ZLMediaKit Windows编译快速入门相关推荐
- Spread for Windows Forms快速入门(2)---设置Spread表单
让我们从设置Spread的大小和表单的外观开始学习如何定制Spread,这些操作通常放在Form的构造函数中进行,在InitializeComponent()之后调用. 自定义控件的大小 你可以设置S ...
- Spread for Windows Forms快速入门(10)---绑定到数据库
下面的教程将带你创建一个工程, 并将Spread控件绑定到一个数据库. 在这个教程中,主要的步骤为: 1. 将Spread添加到一个数据绑定工程中 2. 设置数据库连接 3. 指定要使用的数据 4. ...
- Spread for Windows Forms快速入门(1)---开始使用Spread
2019独角兽企业重金招聘Python工程师标准>>> 前言 Spread for Windows Forms是功能最为强大的表格控件,拥有灵活开放的对象模型和50,000个以上的A ...
- windows驱动快速入门
本公众号分享的所有技术仅用于学习交流,请勿用于其他非法活动,如有错漏,欢迎留言交流指正 NT驱动框架 <Windows 内核情景分析>.(毛德操) 前置知识 R3和R0 的由来 Intel ...
- c#快速入门~在java基础上,知道C#和JAVA 的不同即可
☺ 观看下文前提:如果你的主语言是java,现在想再学一门新语言C#,下文是在java基础上,对比和java的不同,快速上手C#,当然不是说学C#的前提是需要java,而是下文是从主语言是java的情 ...
- golang快速入门[8.3]-深入理解IEEE754浮点数
前文 golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速 ...
- .NET Core快速入门教程 2、我的第一个.NET Core App(Windows篇)
一.前言 本篇开发环境? 1.操作系统: Windows 10 X64 2.SDK: .NET Core 2.0 Preview 二.安装 .NET Core SDK 1.下载 .NET Core 下 ...
- Windows游戏编程快速入门方法
Windows游戏编程快速入门方法 Easideao(简单思路) 序言: 从2001年到2005年,在不知不觉中我已经渡过了4年的职业游戏开发生涯.在这4年里经常会有些网友向我询问编程的入门有没有捷径 ...
- automake linux,Linux下automake软件编译与发布快速入门
Linux下automake软件编译与发布快速入门 2008-04-22 eNet&Ciweek 进入编辑界面,输入内容如下: AUTOMAKE_OPTIONS=foreign bin_PRO ...
最新文章
- 一道关于整型提升/截断的经典练习题
- 骑摩托的蒙娜丽莎 - 曼妙风骚的花式慢跑算法
- 织梦{dede:channel}无子栏目不显示同级栏目的两种修改方法
- 【深度学习】擦除:提升 CNN 特征可视化的 3 种重要手段
- mysql修改表结构权限_mysql 修改表结构操作
- 【转】PHP获取当前时间、时间戳的各种格式写法汇总[日期时间]
- Python之冒泡排序和选择排序的比较
- ASP.NET:返回按钮的解决方案摸索
- 如何查看sql2000 sp4是否安装成功 及sp4补丁安装
- EasyCVR平台通过国标GB28181接入柯达NVR显示注册失败,该如何解决?
- 单链表的简单操作与演示
- 多个fbx文件怎么合并_Unity3D之多个fbx导入场景, 合并多个动画
- Java处理MP3资料
- idea中提示程序包不存在或cannot resolve symbol
- Redis概述、安装、可视化访问
- 《概率论与数理统计》之样本空间和随机事件
- sftp命令复制文件
- C语言实现解析gps坐标(在一串字符串中找到北纬和东经的值)
- Linux Ubuntu22.04 安装synaptic包图形化管理工具和cairo-dock(最美观的Linux dock)
- AutoJs学习-文字转语音QQ发送
热门文章
- horizon多网卡配置
- openwrt 配置WAN 和 LAN
- c语言字典大全,c语言字典(C language dictionary).doc
- CF1569D Inconvenient Pairs
- 计算机无法唤醒,电脑休眠后无法唤醒怎么办 电脑休眠后无法唤醒原因及解决方法...
- 解决SecureFX中文乱码的方法
- ARIMA时间序列与LSTM神经网络的PK
- 【热更新】游戏热更新方案
- indesign java_InDesign必杀技,分分钟秒出方案排版(附ID排版模板)
- 电子文档翻译工具实现文章的批量翻译