zoukankan      html  css  js  c++  java
  • ffmpeg windows config win32/win64 compile

    为Windows运行时编译和使用FFmpeg库(Windows 10或Windows8.1应用程序)

    FFmpeg库可以用于Windows应用程序的开发目标Windows 10Windows 8.1,和Windows电话8.1。下面的指南为所有受支持的目标配置(平台和体系结构)提供构建指导。每种配置都需要一组不同的工具、环境变量和下面每一节中概述的配置选项。它结束了一些实用的和潜在的不明显的信息消费FFmpeg DLL从您的应用程序。


    先决条件和第一次设置说明

    先决条件

    Windows 10安装程序

    下载和安装​Microsoft Visual Studio 2015在Windows 10机器上。

    Windows 8.1设置

    下载和安装​Microsoft Visual Studio 2013在Windows8.1机器上

    MSYS 2设置

    下载最新的MSYS 2安装程序​http://msys2.github.io/严格遵守安装说明。从安装网页。为了在MSYS 2端继承Windows端的环境,如果有msys 2_shell.cmd,请从msys 2_shell.cmd取消注释如下:REM集MSYS 2_PATH_TYPE=继承带着设置MSYS 2_PATH_TYPE=Inherence这将允许将VisualStudio的环境变量传输到MSYS 2环境并返回。

    成功安装基本MSYS 2后,获取最新的制作通过调用MSYS2shell中的以下命令进行包

    pacman -S make
    

    还有最新消息GCC包装

    pacman -S gcc
    

    重命名或删除link.exe在MSYS2 usr bin文件夹中(例如。C:msys 64usrinlink.exe)防止与MSVC发生冲突link.exe

    安装perl,因为它是运行“gas-preprocessor.pl”所需的。

    pacman -S perl
    

    还安装用于配置脚本的散列

    pacman -S diffutils
    

    YASM装置

    ​http://yasm.tortall.net/Download.html。您必须下载“一般用途“二进制文件而不是VS 2010的二进制文件。Win 32或Win 64二进制文件都支持为这两种体系结构输出对象文件,所以这不重要。yasm-1.3.0-win64.exe.

    将下载的可执行文件重命名为yasm.exe并将其放置在您的MSYS 2路径中。例如:C:msys 64usrinyasm.exe.

    气体预处理装置

    下载gas-preprocessor.plPerl脚本​https://github.com/FFmpeg/gas-preprocessor

    将下载的Perl脚本放在MSYS 2路径中。例如:C:msys 64usringas-preprocessor.pl

    验证FFmpeg环境设置

    启动VisualStudioARM交叉工具命令提示符。例如:

    C:ProgramDataMicrosoftWindowsStart MenuProgramsVisual Studio 2015Visual Studio ToolsWindows Desktop Command PromptsVS2015 x86 ARM Cross Tools Command Prompt
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,通过运行以下命令,验证以下所有工具是否正确设置

    $ which cl
    /c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/x86_ARM/cl
    
    $ which link
    /c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/x86_ARM/link
    
    $ which armasm
    /c/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/x86_ARM/armasm
    
    $ which yasm
    /usr/bin/yasm
    
    $ which cpp
    /usr/bin/cpp
    
    $ which gas-preprocessor.pl
    /usr/bin/gas-preprocessor.pl
    

    验证工具在路径中,并指向安装MSYS 2和VisualStudio的正确位置


    为了保持源树干净和平台分离,我们将让中间文件转到输出<Platform><Architecture>文件夹下的FFmpeg源树我们还会让安装文件(在应用程序中链接和使用FFmpeg所需的文件)转到构建<平台><体系结构>文件夹下的FFmpeg源树


    Windows 10编译

    Windows 10 x86

    发射VS 2015 x86本机工具命令提示符。例如:

    C:ProgramDataMicrosoftWindowsStart MenuProgramsVisual Studio 2015Visual Studio ToolsWindows Desktop Command PromptsVS2015 x86 Native Tools Command Prompt
    

    在上面启动的命令提示符中设置以下环境变量

    SET LIB=%VSINSTALLDIR%VClibstore;%VSINSTALLDIR%VCatlmfclib;%UniversalCRTSdkDir%lib\%UCRTVersion%ucrtx86;;%UniversalCRTSdkDir%lib\%UCRTVersion%umx86;C:Program Files (x86)Windows KitsNETFXSDK4.6libumx86;;C:Program Files (x86)Windows KitsNETFXSDK4.6Libumx86
    SET LIBPATH=%VSINSTALLDIR%VCatlmfclib;%VSINSTALLDIR%VClib;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%UniversalCRTSdkDir%Include\%UCRTVersion%ucrt;%UniversalCRTSdkDir%Include\%UCRTVersion%um;%UniversalCRTSdkDir%Include\%UCRTVersion%shared;%UniversalCRTSdkDir%Include\%UCRTVersion%winrt;C:Program Files (x86)Windows KitsNETFXSDK4.6Includeum;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows10/x86
    
    cd Output/Windows10/x86
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=x86 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00" 
    --extra-ldflags="-APPCONTAINER WindowsApp.lib" 
    --prefix=../../../Build/Windows10/x86
    
    make
    
    make install
    

    生成的库可以在构建/Windows 10/x86中指定的文件夹-前缀以上选项


    Windows 10 x64

    发射VS 2015 x86x64跨工具命令提示符。例如:

    C:ProgramDataMicrosoftWindowsStart MenuProgramsVisual Studio 2015Visual Studio ToolsWindows Desktop Command PromptsVS2015 x86 x64 Cross Tools Command Prompt
    

    在上面启动的命令提示符中设置以下环境变量

    SET LIB=%VSINSTALLDIR%VClibstoreamd64;%VSINSTALLDIR%VCatlmfclibamd64;%UniversalCRTSdkDir%lib\%UCRTVersion%ucrtx64;;%UniversalCRTSdkDir%lib\%UCRTVersion%umx64;C:Program Files (x86)Windows KitsNETFXSDK4.6libumx64;;C:Program Files (x86)Windows KitsNETFXSDK4.6Libumx64
    SET LIBPATH=%VSINSTALLDIR%VCatlmfclibamd64;%VSINSTALLDIR%VClibamd64;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%UniversalCRTSdkDir%Include\%UCRTVersion%ucrt;%UniversalCRTSdkDir%Include\%UCRTVersion%um;%UniversalCRTSdkDir%Include\%UCRTVersion%shared;%UniversalCRTSdkDir%Include\%UCRTVersion%winrt;C:Program Files (x86)Windows KitsNETFXSDK4.6Includeum;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows10/x64
    
    cd Output/Windows10/x64
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=x86_64 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00" 
    --extra-ldflags="-APPCONTAINER WindowsApp.lib" 
    --prefix=../../../Build/Windows10/x64
    
    make
    
    make install
    

    生成的库可以在构建/Windows 10/x64中指定的文件夹-前缀以上选项

    如果由于Link.exe抱怨MSPDB140.dll安装了错误版本,所以链接出现错误。从管理命令提示符中运行以下命令并重新生成:

    copy "C:Program Files (x86)Microsoft Visual Studio 14.0VCinmspdbsrv.exe" "C:Program Files (x86)Microsoft Visual Studio 14.0Common7IDE"
    

    Windows 10臂

    发射VS 2015 x86 ARM交叉工具命令提示符。例如:

    C:ProgramDataMicrosoftWindowsStart MenuProgramsVisual Studio 2015Visual Studio ToolsWindows Desktop Command PromptsVS2015 x86 ARM Cross Tools Command Prompt
    

    在上面启动的命令提示符中设置以下环境变量

    SET LIB=%VSINSTALLDIR%VClibstoreARM;%VSINSTALLDIR%VCatlmfclibARM;%UniversalCRTSdkDir%lib\%UCRTVersion%ucrtarm;;%UniversalCRTSdkDir%lib\%UCRTVersion%umarm;C:Program Files (x86)Windows KitsNETFXSDK4.6libumarm;;C:Program Files (x86)Windows KitsNETFXSDK4.6Libumarm
    SET LIBPATH=%VSINSTALLDIR%VCatlmfclibARM;%VSINSTALLDIR%VClibARM;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%UniversalCRTSdkDir%Include\%UCRTVersion%ucrt;%UniversalCRTSdkDir%Include\%UCRTVersion%um;%UniversalCRTSdkDir%Include\%UCRTVersion%shared;%UniversalCRTSdkDir%Include\%UCRTVersion%winrt;C:Program Files (x86)Windows KitsNETFXSDK4.6Includeum;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows10/ARM
    
    cd Output/Windows10/ARM
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=arm 
    --as=armasm 
    --cpu=armv7 
    --enable-thumb 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00 -D__ARM_PCS_VFP" 
    --extra-ldflags="-APPCONTAINER WindowsApp.lib" 
    --prefix=../../../Build/Windows10/ARM
    
    make
    
    make install
    

    生成的库可以在构建/Windows 10/ARM中指定的文件夹-前缀以上选项

    如果您遇到链接错误,因为link.exe抱怨MSPDB140.dll安装了错误的版本。从行政命令提示符重建:

    copy "C:Program Files (x86)Microsoft Visual Studio 14.0VCinmspdbsrv.exe" "C:Program Files (x86)Microsoft Visual Studio 14.0Common7IDE"
    

    Windows 8.1编译

    Windows Store 8.1 x86(VisualStudio中的Windows 8.1 Win 32)

    发射VS 2013的开发人员命令提示符

    Start Menu > Visual Studio 2013 (Start Menu Folder) > Visual Studio Tools > Developer Command Prompt for VS2013
    

    在上面已启动的命令提示符中设置以下环境变量。这些环境变量用正确的目标特定路径覆盖默认路径。

    SET LIB=%VSINSTALLDIR%VClibstore;%VSINSTALLDIR%VCatlmfclib;%WindowsSdkDir%libwinv6.3umx86;;
    SET LIBPATH=%WindowsSdkDir%ReferencesCommonConfigurationNeutral;;%VSINSTALLDIR%VCatlmfclib;%VSINSTALLDIR%VClib;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%WindowsSdkDir%Includeum;%WindowsSdkDir%Includeshared;%WindowsSdkDir%Includewinrt;;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows8.1/x86
    
    cd Output/Windows8.1/x86
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-dxva2 
    --arch=x86 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603" 
    --extra-ldflags="-APPCONTAINER" 
    --prefix=../../../Build/Windows8.1/x86
    
    make
    
    make install
    

    生成的库可以在构建/Windows8.1/x86中指定的文件夹-前缀以上选项


    Windows Store 8.1 x64(VisualStudio中的Windows 8.1 x64)

    发射VS 2013 x64跨工具命令提示符

    Start Menu > Visual Studio 2013 (Start Menu Folder) > Visual Studio Tools > VS2013 x64 Cross Tools Command Prompt
    

    在上面已启动的命令提示符中设置以下环境变量。这些环境变量用正确的目标特定路径覆盖默认路径。

    SET LIB=%VSINSTALLDIR%VClibstoreamd64;%VSINSTALLDIR%VCatlmfclibamd64;%WindowsSdkDir%libwinv6.3umx64;;
    SET LIBPATH=%WindowsSdkDir%ReferencesCommonConfigurationNeutral;;%VSINSTALLDIR%VCatlmfclibamd64;%VSINSTALLDIR%VClibamd64;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%WindowsSdkDir%Includeum;%WindowsSdkDir%Includeshared;%WindowsSdkDir%Includewinrt;;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows8.1/x64
    
    cd Output/Windows8.1/x64
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-dxva2 
    --arch=x86_64 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603" 
    --extra-ldflags="-APPCONTAINER" 
    --prefix=../../../Build/Windows8.1/x64
    
    make
    
    make install
    

    生成的库可以在构建/Windows8.1/x64中指定的文件夹-前缀以上选项


    WindowsStore 8.1 ARM(VisualStudio中的Windows8.1 ARM)

    发射VS 2013 ARM交叉工具命令提示符

    Start Menu > Visual Studio 2013 (Start Menu Folder) > Visual Studio Tools > VS2013 ARM Cross Tools Command Prompt
    

    在上面已启动的命令提示符中设置以下环境变量。这些环境变量用正确的目标特定路径覆盖默认路径。

    SET LIB=%VSINSTALLDIR%VClibstoreARM;%VSINSTALLDIR%VCatlmfclibARM;%WindowsSdkDir%libwinv6.3umarm;;
    SET LIBPATH=%WindowsSdkDir%ReferencesCommonConfigurationNeutral;;%VSINSTALLDIR%VCatlmfclibARM;%VSINSTALLDIR%VClibARM;
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%WindowsSdkDir%Includeum;%WindowsSdkDir%Includeshared;%WindowsSdkDir%Includewinrt;;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/Windows8.1/ARM
    
    cd Output/Windows8.1/ARM
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=arm 
    --as=armasm 
    --cpu=armv7 
    --enable-thumb 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603 -D__ARM_PCS_VFP" 
    --extra-ldflags="-APPCONTAINER -MACHINE:ARM" 
    --prefix=../../../Build/Windows8.1/ARM
    
    make
    
    make install
    

    生成的库可以在构建/Windows8.1/ARM中指定的文件夹-前缀以上选项


    WindowsPhone 8.1 x86(VisualStudio中的WindowsPhone 8.1 Win32模拟器)

    发射VS 2013的开发人员命令提示符

    Start Menu > Visual Studio 2013 (Start Menu Folder) > Visual Studio Tools > Developer Command Prompt for VS2013
    

    在上面已启动的命令提示符中设置以下环境变量。这些环境变量用正确的目标特定路径覆盖默认路径。

    SET LIB=%VSINSTALLDIR%VClibstore;%VSINSTALLDIR%VCatlmfclib;%WindowsSdkDir%....Windows Phone Kits8.1libx86;;
    SET LIBPATH=%VSINSTALLDIR%VCatlmfclib;%VSINSTALLDIR%VClib
    SET INCLUDE=%VSINSTALLDIR%VCINCLUDE;%VSINSTALLDIR%VCATLMFCINCLUDE;%WindowsSdkDir%....Windows Phone Kits8.1Include;%WindowsSdkDir%....Windows Phone Kits8.1Includeabi;%WindowsSdkDir%....Windows Phone Kits8.1Includemincore;%WindowsSdkDir%....Windows Phone Kits8.1Includeminwin;%WindowsSdkDir%....Windows Phone Kits8.1Includewrl;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/WindowsPhone8.1/x86
    
    cd Output/WindowsPhone8.1/x86
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=x86 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP -D_WIN32_WINNT=0x0603" 
    --extra-ldflags="-APPCONTAINER -subsystem:console -opt:ref WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib -NODEFAULTLIB:kernel32.lib -NODEFAULTLIB:ole32.lib" 
    --prefix=../../../Build/WindowsPhone8.1/x86
    
    make
    
    make install
    

    生成的库可以在构建/WindowsPhone8.1/x86中指定的文件夹-前缀以上选项


    Windows Phone 8.1 ARM(Visual Studio中的Windows Phone 8.1 ARM设备)

    发射VS 2013 ARM交叉工具命令提示符

    Start Menu > Visual Studio 2013 (Start Menu Folder) > Visual Studio Tools > VS2013 ARM Cross Tools Command Prompt
    

    在上面已启动的命令提示符中设置以下环境变量。这些环境变量用正确的目标特定路径覆盖默认路径。

    SET LIB=%VSINSTALLDIR%VClibstoreARM;%VSINSTALLDIR%VCatlmfclibARM;%WindowsSdkDir%....Windows Phone Kits8.1libarm;;
    SET LIBPATH=%VSINSTALLDIR%VCatlmfclibARM;%VSINSTALLDIR%VClibARM
    SET INCLUDE=%VSINSTALLDIR%VCinclude;%VSINSTALLDIR%VCatlmfcinclude;%WindowsSdkDir%....Windows Phone Kits8.1Include;%WindowsSdkDir%....Windows Phone Kits8.1Includeabi;%WindowsSdkDir%....Windows Phone Kits8.1Includemincore;%WindowsSdkDir%....Windows Phone Kits8.1Includeminwin;%WindowsSdkDir%....Windows Phone Kits8.1Includewrl;
    

    打开MSYS 2壳从上面的命令提示符(使用MSYS 2安装的正确驱动器和位置)。请注意,上面的命令shell将关闭,启动MSYS2shell可能需要一段时间。

    C:msys64msys2_shell.cmd
    

    在MSYS 2 shell中,导航到您的克隆FFmpeg文件夹。例如:

    cd /c/ffmpeg
    

    调用以下make命令

    mkdir -p Output/WindowsPhone8.1/ARM
    
    cd Output/WindowsPhone8.1/ARM
    
    ../../../configure 
    --toolchain=msvc 
    --disable-programs 
    --disable-d3d11va 
    --disable-dxva2 
    --arch=arm 
    --as=armasm 
    --cpu=armv7 
    --enable-thumb 
    --enable-shared 
    --enable-cross-compile 
    --target-os=win32 
    --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP -D_WIN32_WINNT=0x0603 -D__ARM_PCS_VFP" 
    --extra-ldflags="-APPCONTAINER -MACHINE:ARM -subsystem:console -opt:ref WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib -NODEFAULTLIB:kernel32.lib -NODEFAULTLIB:ole32.lib" 
    --prefix=../../../Build/WindowsPhone8.1/ARM
    
    make
    
    make install
    

    生成的库可以在构建/WindowsPhone8.1/ARM中指定的文件夹-前缀以上选项


    故障排除

    使用VisualStudio构建ARM库阿玛斯ARM汇编程序需要正确设置gas-preprocessor.plPerl在你的MSYS 2环境。请严格按照设置指示执行。


    Windows商店证书、文件I/O和其他详细信息

    FFmpeg是WindowsMediaFoundation的一个很好的替代方案,它支持FFmpeg所拥有的一小部分编解码器。幸运的是,FFmpeg没有使用任何禁止的Windows或CRT API,与使用此方法构建的DLL链接的应用程序通过最新的Windows AppCertificationKit。然而,有一些重要的事情需要记住。

    首先,不要忘记确保应用程序包中包含根文件夹中所有必需的FFmpeg DLL。在VisualC++项目中,应将指向根项目文件夹中FFmpeg DLL的链接包括在内,确保将“生成操作”设置为“Content”,将“复制到输出目录”设置为“始终复制”。仅仅链接到导入库是不够的。如果您要求您的用户单独安装FFmpeg DLL,您将无法通过认证。

    您还需要向任何用户提供自定义文件I/O上下文。AVFormatContext而不是依靠阿维奥xxx函数,因为标准的I/O函数使用WinRT中不支持的CRT I/O。(您不会失败认证,但您的应用程序将无法访问AVFormatContext.filename成员,除非它可能位于应用程序的本地存储区)。文件I/O上下文需要初始化以指向朗读,和寻觅函数,与不透明成员指向结构IRandomAccessStream^类中使用正确的WinRT IO调用打开文件时获得的窗口::存储命名空间。(你需要一个结构举行IRandomAccessStream^,因为你不能抛出无效*到裁判柄)。你的朗读,和寻觅函数应该将空洞*不透明结构*定义,然后使用IRandomAccessStream^所有的I/O。

    因为FFmpeg I/O调用是同步的,但是IRandomAccessStream成员都是异步的,您需要利用创建任务等()在IO上下文实现函数中的所有I/O调用。请注意,这需要在工作线程上执行任何利用文件I/O的FFmpeg函数,因为如果您使用等()在UI线程中。这里的最佳解决方案是创建您将使用的主要ffmpeg函数的winrt友好包装函数,方法是使用并发性::CREATE异步职能,例如:

    IAsyncOperation<int>^ av_read_frame_async(AVFormatContext* s, AVPacket* pkt)
    {
    	return create_async([s, pkt]()->int
    	{
    		return av_read_frame(s, pkt);
    	});
    }
    

    或者,如果您不想使用Windows运行时扩展,也不介意COM,则可以使用Windows 8-API函数。CreateStreamOverRandomAccessStream,这给了你一个iStream*组件的COM接口。IRandomAccessStream^,使用同步I/O,并且可以作为空洞*不透明IO上下文的成员。这个iStreamI/O调用更易于在C++中使用,因为它们支持直接指针缓冲区访问(您不必处理IBuffer)和更紧密地对应于AVIOContext。但是,您仍然应该确保在后台线程中包装任何利用文件I/O的代码,因为过度阻塞UI确实违反了Windows Store准则,并可能导致应用程序在运行时终止。


    验证已构建的FFmpeg库和示例应用程序

    从上述编译中生成的FFmpeg库可以由Windows运行时组件应用程序。可以在以下项目中对照Interop组件和示例媒体播放器对它们进行测试:

    ​https://github.com/Microsoft/FFmpegInterop

  • 相关阅读:
    Linux:mv命令
    Linux:cp -rp
    Linux:sed命令
    Linux:cut命令...未完待续
    Linux:xargs命令
    python动态获取对象的属性和方法 (转载)
    python 继承中的super
    HTTP认证机制(翻译)
    技术名词解释
    设计模式之代理模式
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/13245785.html
Copyright © 2011-2022 走看看