首页 > 其他分享 >ShiftMediaProject具体使用

ShiftMediaProject具体使用

时间:2023-02-05 12:00:34浏览次数:64  
标签:ShiftMediaProject 如下 project 编译 具体 版本 使用 msvc 目录

前文《ShiftMediaProject项目介绍》已经介绍了 项目的 bat 脚本以及依赖逻辑。了解了 bat 脚本的逻辑,我们就不需要使用这个脚本了,可以手动下载特定版本的压缩包。

现在的目录结构如下;

ShiftMediaProject具体使用_FFmpeg

而且 FFmpeg-4.4.r100605 的 project_get_dependencies.bat 脚本的依赖如下:

ShiftMediaProject具体使用_FFmpeg_02

要编译 FFmpeg ,就需要先编译 以下这些库。

  1. gnutls ,版本:3.7.5,有 git 子模块,在百度网盘。
  2. bzip2 ,版本:​​2-1.0.8​
  3. mfx_dispatch ,版本:​​1.35.r88​
  4. libiconv,版本:​​v1.16-1​
  5. liblzma,版本:​​v5.2.5​
  6. libxml2,版本 :​​v2.9.11​
  7. soxr,版本:​​0.1.3-1​
  8. game-music-emu,版本:​​0.6.3​
  9. modplug,版本:​​0.8.9.0.r283​
  10. freetype2,版本:​​VER-2-11-0-1​
  11. fontconfig,版本:​​2.13.1-6​
  12. libbluray,版本:​​1.3.0-1​
  13. libgpg-error,版本 :​​libgpg-error-1.43​
  14. libgcrypt,版本 :​​libgcrypt-1.9.4​
  15. libssh,版本:​​libssh-0.9.6​
  16. fribidi,版本:​​v1.0.11​
  17. harfbuzz,版本:​​3.2.0​
  18. libass,版本:​​0.15.2-1​
  19. libcdio,版本 :​​release-2.1.0-1​
  20. libcdio-paranoia,版本:​​release-10.2+2.0.1​
  21. SDL,版本:​​release-2.0.16​
  22. libilbc,版本:v3.0.3 ,有 git 子模块,在百度网盘。
  23. lame,版本:​​RELEASE__3_100-1​
  24. opus,版本:​​v1.3.1-1​
  25. libvpx,版本:​​v1.11.0​
  26. x264,版本:​​0.164.r3075-1​
  27. x265,版本:​​3.4​
  28. xvid,版本:​​release-1_3_7​
  29. speex,版本:1.2.0-4
  30. ogg,版本:​​v1.3.5​
  31. vorbis,版本:​​v1.3.7-1​
  32. theora,版本:​​1.2.0alpha1+svn.r135-2​

上面的库要按顺序编译的。为了方便读者,上面的压缩包可以在​​百度网盘​​一次性下载,提取码:kkj2


上面的项目都是在 Shift Media Project 能搜到的,是子项目,但是还有4个依赖是要在其他地方下载,第一个是 ffnvcodec 。

ffnvcodec ​​Version 11.1.5.1​​ ,下载之后,把 nv-codec-headers 里面的 ffnvcodec 文件夹,复制到 ​​D:\shift-media-project\msvc\include​​,如下:

ShiftMediaProject具体使用_FFmpeg_03

这个其实是 NVIDIA 的硬件编解码器的头文件,不需要 硬件解码也要下载一下,要不 编译 avutil 库就会失败。Shift Media Project 的编译脚本不太智能。

第二个是 opengl 的两个头文件 ​​glext.h​​ 跟 ​​wglext.h​​,下载之后放到 ​​D:\shift-media-project\msvc\include\gl\​​ 目录下。

第三个是 ​​khrplatform.h​​ 头文件,下载之后放到 ​​D:\shift-media-project\msvc\include\KHR\​​ 目录下。

第四个是 AMF 的 SDK 头文件。AMF 全称 Advanced Media Framework,在 github 上下载 ​​AMF Release 1.4.23​​ ,然后把 ​​amf/public/include​​ 目录下的内容拷贝到 ​​msvc\include\AMF\​​ 目录,如下:


回到 FFmpeg 的依赖项目,开始安装。

gnutls 这个库是比较难安装,因为他里面有很多的 git 子模块,所以不能在 github 直接下 zip 压缩包,你只能 git clone 把目录拷贝下来,然后执行 project_get_dependencies.bat 脚本。但是 gnutls 项目的整个 git 过程会非常慢,这时候你需要一个很好的魔法工具。

小飞机这种魔法工具的代理是有验证的,所以需要把验证加进去才可以代理成功,这个验证码可以在 Windows设置 → 网络和Intelnet → 代理里面看到,如下:

ShiftMediaProject具体使用_FFmpeg_04

然后设置 git 代理即可

git config --global http.proxy http://127.0.0.1:19899/pac?auth=xxx\&t=xxx
git config --global https.proxy http://127.0.0.1:19899/pac?auth=xxx\&t=xxx

ShiftMediaProject具体使用_FFmpeg_05

下载解压 完 gnutls 之后,目录如下:

ShiftMediaProject具体使用_FFmpeg_06

由于 gnutls 依赖 zlib,gmp,nettle。而 nettle 依赖 gmp ,所以需要按顺序编译,先编译 zlib,再编译 gmp,再编译 nettle,最后编译 gnutls

直接进入 zlib 的 smp 目录,就能看到 vs2019 的解决方案,打开 build 一下就行。如下:

ShiftMediaProject具体使用_FFmpeg_07

ShiftMediaProject具体使用_FFmpeg_08

其他的 3个项目也有 smp 文件夹,也是按相同的方法编译,然后在 msvc 输出目录就会看到相关的库,如下:

提醒:编译 nettle 的时候里面有个 libhogweed 项目也要编译。

ShiftMediaProject具体使用_FFmpeg_09


现在我们手动下一下 bzip2 的源码,选择版本 2-1.0.8,如下:

提示:最好用 搜索框搜索 Shift Media Project 里面的子项目,因为他有分页,第一页可能没有 bzip2 。

ShiftMediaProject具体使用_FFmpeg_10

ShiftMediaProject具体使用_FFmpeg_11

从上图可以看出,实际上有 编译好的 lib 跟 dll 库可以直接用,你也可以下载这些现成的,复制到 ​​D:\shift-media-project\msvc​​ 目录就行。

本文为了演示,还是下载 Source code 的压缩包,放到 source 目录下,如下:

ShiftMediaProject具体使用_FFmpeg_12

然后 用 vs2019 打开 ​​bzip2-bzip2-1.0.8\SMP\libbz2.sln​​ 解决方案文件,直接 build,就会在 msvc 目录生成 libbz2d.lib 静态库,如下:

ShiftMediaProject具体使用_FFmpeg_13

实际上源码编译,跟你直接下他 github 的现成包是一样的。

后面的依赖库就不演示了,操作都是一样的,点击进去 SMP,然后 用 vs2019 编译一下就行。

source 目录下的截图如下:

ShiftMediaProject具体使用_FFmpeg_14

重点提醒:如果你编译上面任何一个项目报错,肯定是依赖项目没有先编译,这时候需要看 project_get_dependencies.bat 脚本里面的内容来判断这个项目到底依赖哪些项目。


编译完这些项目,我已经累死了,所以还是建议直接用他 github 上面编译好的现成包。其实效果是一样的。


上面这些 FFmpeg 依赖项目顺利编译完之后,就可以开始编译 FFmpeg 了,一样是打开 SMP 目录的 sln 文件。

打开之后如下:

ShiftMediaProject具体使用_FFmpeg_15

这样打开项目之后,会发现有一部分项目会加载失败(Load Failed),如下:

ShiftMediaProject具体使用_FFmpeg_16

这是因为 我们没有 配置 nasm 跟 yasm ,这两个东西主要是给汇编用了,FFmpeg 里面有一部分汇编代码。


先关闭 vs2019 ,然后下载 ​​VSNASM.zip​​,将这个压缩包解压到 ​​D:\shift-media-project\msvc​​ 目录,如下:

ShiftMediaProject具体使用_FFmpeg_17

然后找到 Developer Command Prompt for VS 2019 命令行,运行,如下:

ShiftMediaProject具体使用_FFmpeg_18

执行以下命令:

d:
cd D:\shift-media-project\msvc\VSNASM
.\install_script.bat

ShiftMediaProject具体使用_FFmpeg_19

从上图可以看出来,这个脚本安装报错了,我们打开这个 bat 脚本看一下内容,如下:

ShiftMediaProject具体使用_FFmpeg_20

上图中,REM 开头的是注释,然后 我加了两句代码 echo 了两个 变量 ​​%SCRIPTDIR%​​ 跟 ​​%VCTargetsPath%​​,如下:

ShiftMediaProject具体使用_FFmpeg_21

综上,这个 bat 脚本就是在 拷贝 ​​nasm.*​​ 文件的时候出现问题。​​%ERRORLEVEL%​​ 这个变量是 bat 脚本的内置变量,如果命令执行失败,这个 ERRORLEVEL 就不等于 0 。

我们手动执行一下这条 copy 命令,如下:

copy /B /Y  .\nasm.*  "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160\BuildCustomizations"

ShiftMediaProject具体使用_FFmpeg_22

可以看到,错误日志是拒绝访问,因为 这是 C 盘的核心目录,所以需要用管理员权限打开 Developer Command Prompt for VS 2019 命令行。

ShiftMediaProject具体使用_FFmpeg_23

用管理员运行之后,再执行一下以上的操作,就不会出问题了。

这样,vs2019 就安装上了 NASM 工具。


安装 VSYASM 也是类似的套路,下载 ​​VSYASM.zip​​,将这个压缩包解压到 ​​D:\shift-media-project\msvc​​ 目录。

然后 用管理员权限打开 Developer Command Prompt for VS 2019 命令行。执行以下命令:

d:
cd D:\shift-media-project\msvc\VSYASM
.\install_script.bat

ShiftMediaProject具体使用_FFmpeg_24


至此,yasm 跟 nasm 都安装进去 vs2019 了,重新启动 vs2019,然后打开之前的 FFmpeg-4.4.r100605 项目。如下:

ShiftMediaProject具体使用_FFmpeg_25

可以看到,这些库都没有报 加载失败(Load Failed)了。


然后按下面顺序编译 FFmpeg 的各个库 跟 ffmpeg.exe 即可。

  1. libswscale
  2. libswresample
  3. libpostproc
  4. libavutil
  5. libavformat
  6. libavfilter
  7. libavdevice
  8. libavcodec
  9. ffmpeg.exe

重点提示:FFmpeg 项目会有缓存,如果找不到头文件,可以尝试关闭重新打开。


上面的项目编译成功之后,就会生成一个 接近 100M的 ffmpeg.exe ,如下:

ShiftMediaProject具体使用_FFmpeg_26

这个移植的 FFmpeg 项目,实际上把所有 的编码器都集成在里面,如果想自定义一些库,可以使用这个项目 ​​FFVS-Project-Generator​


扩展知识:各个项目默认是编译出静态库的,然后你想用动态库,可以换下 Configuration,他都配置好给你的了。如下:

ShiftMediaProject具体使用_FFmpeg_27

从上图可以看出,调试版本,正式版本,静态库版本,动态库版本都有。


下面演示一下 断点调试 ffmpeg.c 的情况,先把 ffmpeg Program 设置为 Starup Project,如下:

ShiftMediaProject具体使用_FFmpeg_28

然后菜单栏的 绿色三角调试按钮就可以点击了,顺便在 ffmpeg.c 的 main 函数那里打个断点。

项目的 debug 配置好像有问题,如果调试的时候找不到 ffmpegd.exe ,可以按我下图这样修改一下:

ShiftMediaProject具体使用_FFmpeg_29

调试界面如下:

ShiftMediaProject具体使用_FFmpeg_30

标签:ShiftMediaProject,如下,project,编译,具体,版本,使用,msvc,目录
From: https://blog.51cto.com/u_15655186/6038248

相关文章

  • C# 使用 NPOI 导出excel 单击单元格背景变黑色的解决办法
    需要手动指定单元格的背景色为一种颜色,特别注意,我在使用varcolor=newXSSFColor(newcolor...)创建的颜色,即使设置成其他颜色,查看样式属性中,发现color.index总是0也就是......
  • Checkmk监控工具使用手册
    其实用法Checkmk官网文档很全面:https://docs.checkmk.com/latest/en/intro_setup.html顺着beginner'sguide章节看完基本就能上手,以下只是对于整体用法的梳理和总结常用......
  • 5.3虚拟内存把磁盘作为部分内存来使用
    接下来说一下虚拟内存虚拟内存是指把磁盘的一部分作为假想的内存来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)。通过借助虚拟......
  • 熟练使用有棱有角的内存——4.1内存的物理机制很简单
    1.有十个地址信号引脚的内存IC(集成电路)可以指定的地址范围是多少?答:用二进制数来表示的话是0000000000~1111111111(用十进制数来表示的话是0~1023)2.高级编程语言中的数......
  • 4.4数组是高效使用内存的基础
    数组是指多个同样数据类型的数据在内存中连续排列的形式。作为数组元素的各个数据会通过连续的编号被区分开来,这个编号称为索引(index)。指定索引后,就可以对该索引所对应地......
  • QDateEdit 使用
       QDateEdit*dateEdit_date_morning;dateEdit_date_morning=newQDateEdit(centralWidget);dateEdit_date_morning->setObjectName(QStringLiteral("dateEdit_da......
  • 为什么被要求避免使用orcid
    前段时间收到了最高机构的通知,要求不要使用orcid,并对之前使用的情况进行自查。得到这个通知,我其实还是蛮无感的,毕竟我一篇论文也没法过,而且也没有用过这个orcid,虽然我自己......
  • grep中的正则表达式使用
    ◆语法如下图所示、grep的命令行参数非常之多,在此,我们主要介绍如下使用方式:grep[-eexpression][filename]-e指定正则表达式-i不区分大小写-n显示行号  简......
  • 如何使用 systemctl 管理服务
    开机启动对于支持systemd的软件,安装的时候,它会自动的在 /usr/lib/systemd/system 目录添加一个配置文件下面以mysql为例来说明如何设置开机启动systemctlenablemy......
  • 第六十六章 使用 Web 服务监控 IRIS - IRIS 对 WS-Monitoring 的支持概述
    第六十六章使用Web服务监控IRIS-IRIS对WS-Monitoring的支持概述本附录介绍并简要描述了如何使用IRIS®数据平台支持WS-Management规范,它使能够通过SOAP远......