ShiftMediaProject具体使用

简介: ShiftMediaProject具体使用

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

现在的目录结构如下;

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

要编译 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,如下:

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

第二个是 opengl 的两个头文件 glext.hwglext.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 → 代理里面看到,如下:

然后设置 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

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

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

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

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

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


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

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

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

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

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

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

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

source 目录下的截图如下:

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


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


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

打开之后如下:

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

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


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

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

执行以下命令:

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

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

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

综上,这个 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"

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

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

这样,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


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

可以看到,这些库都没有报 加载失败(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 ,如下:

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


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

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


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

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

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

调试界面如下:



目录
相关文章
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
1165 0
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
1123 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
消息中间件 Kafka 流计算
Flink读取Kafka报Error sending fetch request
实时计算Flink读取消息队列Kafka,flink日志中出现Error sending fetch request (sessionId=1510763375, epoch=12890978) to node 103: {}. org.apache.flink.kafka.shaded.org.apache.kafka.common.errors.DisconnectException: null
13402 3
Flink读取Kafka报Error sending fetch request
|
7月前
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南
蒋星熠Jaxonic,深度学习探索者。本文深度对比TensorFlow与PyTorch架构、性能、生态及应用场景,剖析技术选型关键,助力开发者在二进制星河中驾驭AI未来。
869 13
|
8月前
|
算法 测试技术 API
《Skinned Mesh Renderer与LOD系统蒙皮变形异常全解析》
本文聚焦Unity3D古风开放世界游戏开发中,Skinned Mesh Renderer与LOD系统协同的蒙皮变形异常问题。项目基于Unity 2021.3.15f1 LTS,角色飘带服饰在LOD切换时出现变形断裂、骨骼绑定丢失等问题,PC与移动端均有发生,切换频率越高异常概率越高。经排查,根源为LOD模型导入时压缩导致权重丢失、LOD切换时骨骼矩阵更新不同步,及动态骨骼与蒙皮更新脱节。
392 11
|
编解码 监控 开发工具
H.264语法结构分析之frame_cropping_flag
本文深入探讨了H.264标准中的`frame_cropping_flag`,一个常被提及却易被误解的概念。该标志用于指示解码后图像是否需裁剪,通过四个裁剪偏移量参数调整分辨率。文章分析了其在视频转码、流处理及编辑中的应用,并讨论对视频质量的影响,如内容完整性、分辨率调整和传输效率。合理设置此参数可优化视频适配与播放体验,但需注意兼容性问题。最后强调,理解音视频协议框架对开发高质量播放器至关重要。
363 9
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
1323 0
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
NoSQL 关系型数据库 MySQL
快速使用Docker部署MySQL、Redis、Nginx
快速使用Docker部署MySQL、Redis、Nginx
快速使用Docker部署MySQL、Redis、Nginx
|
Android开发
【苹果安卓通用】xlsx 和 vCard 文件转换器,txt转vCard文件格式,CSV转 vCard格式,如何批量号码导入手机通讯录,一篇文章说全
本文介绍了如何快速将批量号码导入手机通讯录,适用于企业客户管理、营销团队、活动组织、团队协作和新员工入职等场景。步骤包括:1) 下载软件,提供腾讯云盘和百度网盘链接;2) 打开软件,复制粘贴号码并进行加载预览和制作文件;3) 将制作好的文件通过QQ或微信发送至手机,然后按苹果、安卓或鸿蒙系统的指示导入。整个过程简便快捷,可在1分钟内完成。
1364 6
|
存储 安全 编译器
【c++】类和对象(四)深入了解拷贝构造函数
朋友们大家好啊,本篇内容带大家深入了解拷贝构造函数
【c++】类和对象(四)深入了解拷贝构造函数