当前位置: 首页 > news >正文

编译ZLMediaKit(win10+msvc2019_x64)

前言

因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用

一、需要安装的软件

1.git

下载地址:Git - Downloading Package

这个网上资料很多,就不解释了

2.cmake

Download CMake

这个网上资料也很多,同样不解释了

3.vs2019

这个不解析了

二、下载配置 vcpkg

1.下载vcpkg,下载路径假设为: C:\work\develop, 执行

git clone https://github.com/microsoft/vcpkg

2.下载预编译的 vcpkg 包管理工具

.\vcpkg\bootstrap-vcpkg.bat -disableMetrics

3.编译openssl

.\vcpkg\vcpkg.exe install --triplet=x64-windows-static openssl

4.编译libsrtp,需要启用openssl,需要找到vcpkg_configure_cmake文件,

具体文件地址为C:\work\develop\vcpkg\ports\libsrtp\portfile.cmake

其中C:\work\develop\为vcpkg的目录地址

添加代码,-DENABLE_OPENSSL:BOOL=ON,以上是笔者的文件

然后进行编译:

.\vcpkg\vcpkg.exe install --triplet=x64-windows-static libsrtp

编译完成后,就可以在C:\work\develop\vcpkg\installed\x64-windows-static目录下找到已经编译完成的库

其中C:\work\develop\为vcpkg的目录地址

注:对应命令可能需要执行多次,此过程可能比较长

三、获取ZLMediaKit源码


使用 Git 克隆 ZLMediaKit 的代码并初始化子模块

# 国内用户推荐从 Gitee 下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 初始化子模块 (必须执行)
git submodule update --init

 注:不能通过下载 zip 包的方式下载源码。因为 ZLMediaKit 依赖于第三方代码并通过 Git 子模块的方式管理。

四、编译ZLMediaKit源码

使用也很简单,可以直接引用生成的静态库,也可以直接导入编译链文件

以上两种方法,笔者都编译成功了,以下介绍下后者的使用方法

导入编译链文件,可以直接使用命令行,参考如下

mkdir build
cd build
$VCPKG_CMAKE = 'C:\work\develop\vcpkg\scripts\buildsystems\vcpkg.cmake'
$VCPKG_INSTALL_PATH = 'C:\work\develop\vcpkg\installed\x64-windows-static'$CMAKE_OPTIONS = @("-GCodeBlocks - Ninja""-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo""-DCMAKE_C_COMPILER:STRING=cl.exe""-DCMAKE_CXX_COMPILER:STRING=cl.exe""-DCMAKE_TOOLCHAIN_FILE:FILEPATH=$VCPKG_CMAKE""-DCMAKE_PREFIX_PATH:FILEPATH=$VCPKG_INSTALL_PATH""-DVCPKG_TARGET_TRIPLET:STRING=x86-windows-static""-DENABLE_WEBRTC:BOOL=ON"
)
cmake .. @CMAKE_OPTIONS
cmake --build . --target all

但笔者使用的图形界面操作的

打开cmake-gui

 选择正确的源码目录和编译目录,然后点击Configure

在弹出的对话框中,选择指定编译链文件,如下是笔者的选择

 

在vcpkg目录中,找到对应的vcpkg.cmake文件,以下是笔者的目录

 

过会就可以自己修改下,感兴的选项了,如

生成的库文件,输出目录

其中如下选项需要修改下

1.VCPKG_TARGET_TRIPLET,需要修改为x64-windows-static(与vcpkg的实际目录对应)

2.编译 64 位程序在链接 openssl 时还需要链接 Crypt32.lib 和 ws2_32.lib,

直接添加在链接库后面就可以,以下是笔者添加的

Configure完成后,点击Generate,完成后,会在编译输出目录生成vs项目文件

可以双击这个文件或点击CMake-gui中的Open Project,直接打开VS2019

接下来,切换成Release、编译、安装 

若一切正常,就可以得到所需的文件了

已经编译好的文件下载(Release模式)

后记

因为众所周知的缘故,建议使用vcpkg下载时,使用科学的上网方式,否则可能无法正常下载

因时间所限,未对之前,无法直接使用自己编译的第三方库,若有已经找出原因的小伙伴,希望能留言说明下

相关文章:

编译ZLMediaKit(win10+msvc2019_x64)

前言 因工作需要,需要ZLMediaKit,为方便抓包分析,最好在windows系统上测试,但使用自己编译的第三方库一直出问题,无法编译通过。本文档记录下win10上的编译过程,供有需要的小伙伴使用 一、需要安装的软件…...

JS-基础语法(一)

JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么? 是一种运行在客户端(浏览器)的编程语言,可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…...

18款Visual Studio实用插件(更新)

前言 俗话说的好工欲善其事必先利其器,安装一些Visual Studio实用插件对自己日常的开发和工作效率能够大大的提升,避免996从选一款好的IDE实用插件开始。以下是我认为比较实用的Visual Studio插件希望对大家有用,大家有更好的插件推荐可在文…...

三、java线性表(顺序表、链表、栈、队列)

java线性表 三、线性表1.1 顺序表1.2 链表1.2.1 单向链表(Singly Linked List)1.2.2 双向链表(Doubly Linked List) 1.3 LinkedList VS ArrayList1.3.7 使用 LinkedList 的场景 1.4 栈1.5 队列 三、线性表 线性表是一种经典的数据…...

PiflowX-MysqlCdc组件

MysqlCdc组件 组件说明 MySQL CDC连接器允许从MySQL数据库读取快照数据和增量数据。 计算引擎 flink 组件分组 cdc 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子hostnameHostname“”无是MySQL…...

2023春季李宏毅机器学习笔记 03 :机器如何生成文句

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、大语言模型的两种…...

dplayer播放hls格式视频并自动开始播放

监控视频流为hls格式,需要打开或刷新页面自动开始播放,需要安装dplayer和hls.js插件,插件直接npm装就行,上代码 import DPlayer from dplayer import Hls from hls.js //jquery是用来注册点击事件,实现自动开始播放 i…...

使用Vivado Design Suite平台板、将IP目录与平台板流一起使用

使用Vivado Design Suite平台板流 Vivado设计套件允许您使用AMD目标设计平台板(TDP)创建项目,或者已经添加到板库的用户指定板。当您选择特定板,Vivado设计工具显示有关板的信息,并启用其他设计器作为IP定制的一部分以…...

PACS医学影像报告管理系统源码带CT三维后处理技术

PACS从各种医学影像检查设备中获取、存储、处理影像数据,传输到体检信息系统中,生成图文并茂的体检报告,满足体检中心高水准、高效率影像处理的需要。 自主知识产权:拥有完整知识产权,能够同其他模块无缝对接 国际标准…...

介绍几种常见的质数筛选法

质数筛选法 1.暴力筛选法 :smirk:2.普通优化 :rofl:3.埃氏筛法:cold_sweat:4.线性筛选法:scream: 质数:除了1和他本身没有其它因数的正整数就是质数。1不是质数,2是质数。 1.暴力筛选法 😏 原理 求x的质数,令y从2到 x \sqrt[]{x…...

Qt/QML编程学习之心得:Linux下读写GPIO(23)

在linux嵌入式系统中,经常需要一些底层操作,Linux就如window一样,也对底层BSP进行了封装,对device driver进行了封装,使用的话基本就是文件读写的方式来读取,所以也大大简化了上层应用对底层硬件的访问难度。 比如要对GPIO口进行访问,在Qt中有几种方法: 使用命令行方…...

Unity中URP下深度图的线性转化

文章目录 前言一、_ZBufferParams参数有两组值二、LinearEyeDepth1、使用2、Unity源码推导:3、使用矩阵推导: 三、Linear01Depth1、使用2、Unity源码推导3、数学推导: 前言 在之前的文章中,我们实现了对深度图的使用。因为&#…...

Low Poly Cartoon House Interiors

400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…...

[算法与数据结构][c++]:左值、右值、左值引用、右值引用和std::move()

左值、右值、左值引用、右值引用和std::move 1. 什么是左值、右值2. 什么是左值引用、右值引用3. **右值引用和std::move的应用场景**3.1 实现移动语义3.2 **实例:vector::push_back使用std::move提高性能** **4. 完美转发 std::forward**5. Reference 写在前面&…...

【QT】day3

1.登陆界面 2.登陆失败 3.登陆成功弹窗 4.点击OK后跳转 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow…...

c++ fork, execl 参数 logcat | grep

Linux进程编程(PS: exec族函数、system、popen函数)_linux popen函数会新建进程吗-CSDN博客 execvp函数详解_如何在C / C 中使用execvp()函数-CSDN博客 C语言的多进程fork()、函数exec*()、system()与popen()函数_c语言 多进程-CSDN博客 Linux---fork…...

QT:单例

单例的定义 官方定义:单例是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 单例的写法 抓住3点: 构造函数私有化(确保只有一个实例)提供一个可以获取构造实例的接口(提供唯一的实…...

IPv6路由协议---IPv6动态路由(OSPFv3-4)

OSPFv3的链路状态通告LSA类型 链路状态通告是OSPFv3进行路由计算的关键依据,链路状态通告包含链路状态类型、链路状态ID、通告路由器三元组唯一地标识了一个LSA。 OSPFv3的LSA头仍然保持20字节,但是内容变化了。在LSA头中,OSPFv2的LS age、Advertising Router、LS Sequence…...

移动通信原理与关键技术学习(4)

1.小尺度衰落 Small-Scale Fading 由于收到的信号是由通过不同的多径到达的信号的总和,接收信号的增强有一定的减小。 小尺度衰落的特点: 信号强度在很小的传播距离或时间间隔内的快速变化;不同多径信号多普勒频移引起的随机调频&#xff…...

第二百五十八回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"模拟对话窗口的页面"相关的内容,本章回中将介绍如何创建一个可以输入内容的对话框.闲话休提,让我们一起Talk Flutter吧。 1. 概念…...

freesurfer-reconall后批量提取TIV(颅内总体积)

#提取TIV #singleline=$(grep Estimated Total Intracranial Volume /usr/local/freesurfer/subjects/bect-3d+bold-wangjingchen-4.9y-2/stats/aseg.sta...

【GO】如何用 Golang 的 os/exec 执行 pipe 替换文件

背景 主要记录一下怎么用 Golang 的 os/exec 去执行一个 cmd 的 pipeline,就是拿 cmdA 的输出作为 cmdB 的输入,这里记录了两种方法去替换文件里面的字符串。 pipe 那个逻辑在 demo1 里。 另外一种是直接读文件做替换,一不小心两个都放进来了…...

基于Spring-boot-websocket的聊天应用开发总结

目录 1.概述 1.1 Websocket 1.2 STOMP 1.3 源码 2.Springboot集成WS 2.1 添加依赖 2.2 ws配置 2.2.1 WebSocketMessageBrokerConfigurer 2.2.2 ChatController 2.2.3 ChatInRoomController 2.2.4 ChatToUserController 2.3 前端聊天配置 2.3.1 index.html和main.j…...

2023年度总结 - 职业生涯第一个十年

2023年只剩下最后一周,又到了一年一度该做年末总结的时候了。 回想起去年,还有人专门建立了一个关于年度总结文章汇总的仓库。读了很多篇别人写的,给了我很多的触动和感想。这里的每篇文章都是关于某个人这一整年的生活和工作的轨迹啊。即使你…...

setup 语法糖

只有vue3.2以上版本可以使用 优点: 更少的样板内容,更简洁的代码 能够使用纯 Typescript 声明props 和抛出事件 更好的运行时性能 更好的IDE类型推断性能 在sciprt标识上加上setup 顶层绑定都可以使用 不需要return ,可以直接使用 使用组件…...

Javaweb之Mybatis的基础操作的详细解析

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除 …...

知名开发者社区Stack Overflow发布《2023 年开发者调查报告》

Stack Overflow成立于2008年,最知名的是它的公共问答平台,每月有超过 1 亿人访问该平台来提问、学习和分享技术知识。是世界上最受欢迎的开发者社区之一。每年都会发布一份关于开发者的调查报告,来了解不断变化的开发人员现状、正在兴起或衰落…...

vue element plus Form 表单

表单包含 输入框, 单选框, 下拉选择, 多选框 等用户输入的组件。 使用表单,您可以收集、验证和提交数据。 TIP Form 组件已经从 2. x 的 Float 布局升级为 Flex 布局。 典型表单# 最基础的表单包括各种输入表单项,比如input、select、radio、checkbo…...

zmq_connect和zmq_poll

文章内容: 介绍函数zmq_connect和zmq_poll的使用 zmq_connect zmq_connect函数是ZeroMQ库中的一个函数,用于在C语言中创建一个与指定地址的ZeroMQ套接字的连接。该函数的原型如下: int zmq_connect(void *socket, const char *endpoint);其…...

TinyLog iOS v3.0接入文档

1.背景 为在线教育部提供高效、安全、易用的日志组件。 2.功能介绍 2.1 日志格式化 目前输出的日志格式如下: 日志级别/[YYYY-MM-DD HH:MM:SS MS] TinyLog-Tag: |线程| 代码文件名:行数|函数名|日志输出内容触发flush到文件的时机: 每15分钟定时触发…...

北京大兴专业网站建设公司/防疫优化措施

前言 很对一定工作年限的读者相信都遇到把老项目重构成技术比较新的项目,比如,笔者之前就是把一些MVC的项目重构为springcloud项目等,这一路上消耗的时间不亚于重写写一个项目,后来发现了重构项目的神器,在这里供读者…...

手机wap网站多少钱/美国搜索引擎排名

我已将我的Windows环境从8更新到10,并发现未返回默认打印机,而是返回另一个.我已关闭“让Windows管理我的默认打印机”设置,但仍然没有获得默认打印机.我有以下代码:private void testPrinter() {PrintService[] array PrintServiceLookup.lookupPrintServices(nul…...

申请个人营业执照需要什么资料/深圳搜狗seo

自MySQL5.1.0起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一…...

wordpress帝国哪个安全/seo软件优化

netstat -an | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}查看系统tcp连接中各个状态的连接数。netstat -an |grep 80 |grep ESTA |awk {print$5 "\n"} |awk BEGIN {FS":"} {print $1 "\n"} |sort |uniq查看和本机80端口建立连接并状…...

合肥做网站工作室/seo优化工具哪个好

♣题目部分在Oracle中,如何从执行计划初步判断SQL的性能问题?♣答案部分从以下几点去考虑:l 执行计划关注点l 预估返回行数l 真实返回行与逻辑读比率l 预估行数和真实返回行数的差异l Predicate Information部分是否有隐式类型转换l 递归调用…...

怎样建设自己的美甲网站/站长之家工具

package com.bjpowernode.javase.enum2; // 采用枚举的方式改造程序 /* 总结: 1、枚举是一种引用数据类型 2、枚举类型怎么定义,语法是? enum 枚举类型名{ 枚举值1,枚举值2 } 3、结果只有两种情况的…...