zoukankan      html  css  js  c++  java
  • ffmpeg FFmpeg在VS2017下的编译

    //部分依赖

    //https://gitlab.com/libidn/libidn/-/tree/master/lib

    //https://gitlab.com/libidn/libidn

    {

    简单记录下过程,以防将来重装系统等情况,备忘。

    https://github.com/ShiftMediaProject/FFmpeg

    git clone 此项目,运行SMPproject_get_dependencies.bat 下载。

    不过我之前并不知道这个自动下载依赖,我直接clone了这个人的所有项目......

    查看SMP eadme.txt,可知,除了相关库外,还需要单独下载一些他没有带的内容。

    你需要建一个目录,包含这些单独的头文件。

    比如叫__FFMPEG_Need,建立一个include目录,再在其下建立4个目录

    AMF

    ffnvcodec

    gl

    KHR

    在gl目录中放入以下2个文件

    https://www.khronos.org/registry/OpenGL/api/GL/glext.h

    https://www.khronos.org/registry/OpenGL/api/GL/wglext.h

    KHR放入

    https://www.khronos.org/registry/EGL/api/KHR/khrplatform.h

    然后clone这个项目

    https://github.com/FFmpeg/nv-codec-headers

    把这个项目include下的内容,直接放到我们当前include目录即可,也就是复制那个ffnvcodec目录

    最后clone AMF

    https://github.com/GPUOpen-LibrariesAndSDKs/AMF

    amf/public/include

    内容放到你的AMF目录下,也就是把

    components

    core

    复制到AMF目录下

    至此,include目录准备完毕,等会编译工程,把这个目录加入所有工程include路径即可,你可以选择加入VS全局include目录里。

    ========================================

    接下来下载YASM和NASM

    http://yasm.tortall.net/Download.html

     YASM只需下载exe即可,32还是64位随意,我只需要32位,

    http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe

    下好后改名yasm.exe

    建个目录,比如

    E:Yasm

    把yasm.exe放入

    新建环境变量YASMPATH,写入路径地址

    注意路径最后要有反斜杠结尾

    然后下载NASM

    https://www.nasm.us/pub/nasm/releasebuilds/2.14/

    要下载安装器,不知道为什么,我下载zip好像失败了,所以只能用exe安装版本。

    https://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/nasm-2.14-installer-x86.exe

    把nasm安装一下,比如

    E: asm-2.14

    之后同上,新建环境变量NASMPATH,加入路径

    因为我是单独clone的所有工程,所以

    https://github.com/ShiftMediaProject/VSYASM

    https://github.com/ShiftMediaProject/VSNASM

    在这2个工程里,把每个工程的

    .props
    .targets
    .xml

    类型配置文件,1个工程有3个文件,总共6个文件,复制到类似下面的目录中,也就是你VS2017的配置目录,VS默认只有masm的配置

    D:Program Files (x86)Microsoft Visual Studio2017EnterpriseCommon7IDEVCVCTargetsBuildCustomizations

    然后打开SMPffmpeg_deps.sln工程,如果提示更新一些VS组件就都选是更新。

    如果工程全都可以打开,不缺少工程的话,那么配置就OK了。如果有加载不了的项目,分2种情况

    1.如果是少工程就补全工程。

    其他工程都与ffmpeg同级。

    ffmpeg

    libass

    这样同级目录

    2.如果工程文件目录都正常存在,但是还是加载不了,可能就是YASM和NASM配置有问题,但是现在应该都配置好了,我是先有问题,才后装的NASM。

    最后,你应该得到一个可以打开

    FFmpegSMPffmpeg_deps.sln

    之后,所有工程都可以加载上的,没有Load Fail的Solution

     

    试着编译,如果显示Windows SDK不正常,修改一下所有工程使用的SDK即可,默认似乎是Win8 SDK,我重装VS2017似乎只有Win10 SDK,没有Win8,所以改成Win10 SDK才能编译。

    继续,如果编译libav之类的库,一定会提示缺少头文件,因为最开始单独下载的那些include头文件没有放进VS全局目录,加入即可。

    比如

    E:PProjectsGitDownloads\__FFMPEG_Needinclude

    然后再次编译,直接编译debug即可,因为主要是学习原理,而非测试运行效率。

    如果全都编译通过没有错误,就可以再打开

    FFmpegSMPffmpeg.sln

    把ffplay之类的也编译了,对我来说ffplay才是重点,因为这是播放器应用实例,我个人能在网上找到播放视频最实用的例子了。

    展开ffplay工程,ffplay.c文件,如果直接编译这个ffplay,生成的ffplay.exe播放视频会提示音频初始化失败而播放不出声音,似乎是因为dsound初始化失败了。

    根据之前2次编译ffplay的经验,在文件头加入window头

    #include <Windows.h>

    搜索SDL_OpenAudioDevice

    在这行前加入

    CoInitialize(NULL);

    再编译即可修复音频问题。

    我的FFMPEG工程目录在

    E:PProjectsGitDownloadsFFmpeg

    那么生成的文件在

    E:PProjectsmsvcinx86ffplay.exe

    这个msvc目录似乎是自动生成的

    还不算完,现在要测试一个带字幕的视频文件,并且用ffplay播放字幕。

    一般的命令,比如ffplay mv.mkv是不会播放视频的字幕的。

    想播放字幕,正确的用法是

    ffplay -vf subtitles=mv.mkv mv.mkv

    外挂字幕同理

    ffplay -vf subtitles=mv.ass mv.mkv

    这样才行

    至此结束,可以开始断点跟踪代码走向了,最叼的是全VS工程,完全可控的代码,让你有心情查看每一个库的实现,而不是像屎一样的那种一堆源码,自动编译完就能用的那种垃圾。

    }

  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/13601126.html
Copyright © 2011-2022 走看看