zoukankan      html  css  js  c++  java
  • 【UWP】FFmpeg库的编译

    本文是关于windows8.1/windows10通用应用下编译ffmpeg的一些需要注意的地方,针对最新的msys2而写,都是我在实际操作中遇到的,但是网上没有提到的。如果大家遇到什么问题或是在之前的MINGW中可以编译,但在最新的msys2里遇到了问题,或许可以从本文中获取一点参考。

    uwp应用中,如果我们想要实现系统原生支持之外的媒体格式的解码(如:flv,ape等),需要使用FFmpeg库的支持。在Windows环境中,微软写好了一个专门用于编译、调试FFmpeg的项目,也提供了三种语言的使用范例。但是,很多人经常卡在编译ffmpeg这个最基础的步骤上,原因五花八门,但最常见的问题则是cl编译器无法工作。

    这个问题,有很多可能的原因,网上也有很多解决方案,以下根据我遇到的情况,只针对。“cl is unable to create an executable file.”的问题补充、纠正几点(网络上的众多解决方案其实有一些于事无补,还会增加大量不必要的操作):

    ①cl.exe编译器自身的问题:

    使用命令提示符打开Visual Studio的VC编译器的目录(eg:C:Program Files (x86)Microsoft Visual Studio 14.0VCin),有几个文件夹需要注意:

    ·amd64

    ·amd64_arm

    ·amd64_x86

    ·arm

    ·x86_amd64

    ·x86_arm

    显而易见,这几个文件夹提供的是对应(跨)平台的编译工具。我们需要编译什么平台的ffmpeg库,最好在之前打开相应文件夹里的link.exe,看能否正常打开;使用命令提示符打开cl.exe,检查是否有正常的提示信息打印在控制台里。如果cl.exe无法打开,很可能是缺失动态链接库的原因。在……Microsoft Visual Studio 14.0Common7IDE目录下,将msobj140.dll,mspdb140.dll,mspdbcore.dll和mspdbsrv.exe四个文件覆盖到……Microsoft Visual Studio 14.0VCin目录下。完成后,双击cl.exe,提示符瞬间弹出即为正常。

    ②VS库没有被msys正确链接:

    网络上其他的编译ffmpeg的教程几乎都提到:如果不用vs提供的命令提示符打开msys2,也可以通过为msys2添加环境变量的方式来完成编译。事实上,这一方法有很多漏洞,可行性很低,如果之前就遇到了cl相关的问题,那么通过手动添加环境变量的方式看似正确,实则会让人走入弯路。

    1.通过export命令直接添加

    这个方法可能是最常用的,比如:export PATH=$PATH:"/c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_arm"。随后执行echo $PATH,可以看到环境变量添加成功。但是,在编译时,ffmpeg里的configure配置无法读取到后来手动添加的路径。说白了,这个方法是徒劳的。

    2.直接修改默认环境变量

    这个方法直接修改msys目录下/etc/profile文件,为其添加:

    unset VS

    VS=“路径”

    随后在MINGW的三个case语句里的PATH后面追加${VS}。这个方法可行,但是还是很容易出错,原因解释:

    msys2在执行链接到VS的交叉编译时,需要引入的环境变量不止……Microsoft Visual Studio 14.0/VC/bin/<平台>一个。(事实上,perl等的编译也需要vs的介入。)环境变量缺一不可。

    所以,最稳妥的解决方法是:使用vs自带的命令提示符(注意平台的对应)来打开msys2。

    如果这之后观察环境变量,发现还是msys2默认的那几个,就根据平台打开对应的ini配置文件,将MSYS2_PATH_TYPE=inherit一句的注释取掉(删掉前面的“#”)。

    执行 echo $PATH 指令,可以看到相比之前多出了很多vs的lib和include目录,接下来再执行which指令确认cl(推荐使用文件的完全名称(如:cl.exe)进行which指令查询。)、link.exe(注意是在vs的目录下,msys目录下的文件需要临时重命名)、armasm.exe(针对arm平台的编译所需)是否就位(至于cpp.exe等包含于msys的文件,如果缺失,请检查gcc,perl等库的安装),完毕后,将目录cd至ffmpeg所在目录,然后执行BuildFFmpegInterop.bat [系统] [平台] 即可。

    一点补充:

    Ⅰ.关于ffmpeg库,推荐从github上直接下载zip包,只有14.6mb。如果使用git指令获取的话,你可能会得到一个300m+的包,其实我们真正用到的只有解压出来的那几十m而已。

    Ⅱ.微软提供的批处理已经写入了允许交叉编译的指令,同时编译出的库允许为商店应用所用,不需要我们添加额外的 -store 参数。另外,关于dx11的相关库的编译是默认关闭的。

    希望本文能为想在自己应用中引入多格式媒体支持,却又在编译ffmpeg库遇到问题时的各位提供帮助。

  • 相关阅读:
    VS2005 新控件之 容器 《PlaceHolder》
    vs2005/.NET2.0 控件演示之 超级链接 《HyperLink》
    VS2005 控件演示之 容器《Panel》
    投票系统[单/复选,投票数量/项随意][C#/SQL/文件包括数据库代码全部在]
    datalgrid\datalist\repeater\的用法以及相关小技巧
    使用XmlDocument类完成对XML的查、删、添、改(不完美,望指教)
    Repeater读取数据并分页
    vs2005控件演示之 MultiView
    datagrid 分页及隐藏指定列再以及鼠标动作(换背景)
    VS2.0控件之日历《Calendar》C#
  • 原文地址:https://www.cnblogs.com/DaweiX/p/6435027.html
Copyright © 2011-2022 走看看