Git Product home page Git Product logo

mfisolatedtest's Introduction

MFIsolatedTest

Problem: microsoft/windowsservercore, mcr.microsoft.com/windows/servercore:1809 (and Windows Server 2016 Core, Windows Server 2019 Core) cannot transcode H264 video.

It is possible to install Server Media Foundation components in microsoft/windowsservercore, but the neccesary DirectX components are still missing.

It is NOT possible to install Server Media Foundation components in mcr.microsoft.com/windows/servercore:1809 - see below.

This github project incorporates the Microsoft example code from here:

https://docs.microsoft.com/en-us/windows/desktop/medfound/tutorial--encoding-an-mp4-file-

and adds a DOCKERFILE and instructions to reproduce the problem.

An additional binary tool, mftenum.exe is included to help validate that the Server Media Foundation feature has been succesfully installed.

Build

In visual studio, build the solution in release x86 mode.

or: msbuild MFIsolatedTest.sln /p:Configuration=Release /p:Platform=x86

(x86 because that reproduces the build configuration of the real project this is an isolated test for)

Make the docker image

docker build --tag sira/mfisolatedtest:latest .

Run the image

docker run -it -p 4022:4022 -p 4023:4023

Note: the port mappings are for the Visual Studio Remote Debugger

Confirm that Media Foundation is installed

C:\>powershell
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\> get-windowsfeature -Name *Media*

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[X] Media Foundation                                    Server-Media-Foundation        Installed


PS C:\>

Validate Media Foundation

In the docker command line environment run:

c:\> cd MFIsolatedTest
c:\MFIsolatedTest\>mftenum.exe 

Observe, amongst other things:

-- Video encoders ({F79EAC7D-E545-4387-BDEE-D647D7BDE42A}) --
H264 Encoder MFT ({6CA50344-051A-4DED-9779-A43305165E35})

Demonstrate the problem

In the docker command line environment run:

c:\> cd MFIsolatedTest
c:\MFIsolatedTest\>mfisolatedtest.exe 

Notice that it crashes, without displaying the usage text.

Use WinDbg or VS debugger, following the instructions below.

Use WinDbg

In the docker container environment do:

C:\mfisolatedtest>"c:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe" -o mfisolatedtest.exe

The debugger will output lots of info. Embedded somewhere will be a line like:

06ac:066c @ 00092281 - LdrpProcessWork - ERROR: Unable to load DLL: "ksuser.dll", Parent Module: "C:\Windows\SYSTEM32\MFCORE.DLL", Status: 0xc0000135

Connect the VS debugger

In the docker container environment do:

cd C:\Program Files\Microsoft Visual Studio 15.0\Common7\IDE\Remote Debugger\x64

msvsmon.exe /noauth /anyuser /silent /nostatus /noclrwarn /nosecuritywarn /nofirewallwarn /nowowwarn /timeout:36000

In visual studio, set debugging to Remote Windows Debugger with the following settings:

Remote Command: c:\mfisolatedtest\mfisolatedtext.exe Remote Command Arguments: c:\test_data\h264.mp4 out.mp4 Working Directory: c:\mfisolatedtest Remote Server Name: localhost:4022 Connection: Remote with no Authentication

Hit F5 to launch the debugger.

You should see the debugger start, then immediately exit.

Look at the Output tab and you'll see something like:

'mfisolatedtest.exe' (Win32): Loaded 'C:\mfisolatedtest\mfisolatedtest.exe'. Symbols loaded.
'mfisolatedtest.exe' (Win32): Loaded '\Device\vmsmb\VSMB-{dcc079ae-60ba-4d07-847c-3493609c0870}\os\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
06d8:0700 @ 00370515 - LdrpInitializeProcess - INFO: Beginning execution of MFIsolatedTest.exe (C:\MFIsolatedTest\MFIsolatedTest.exe)
	Current directory: C:\Windows
	Package directories: (null)

	[SNIP]

06d8:0218 @ 00371484 - LdrpResolveDllName - ENTER: DLL name: C:\Users\ContainerAdministrator\AppData\Local\Microsoft\WindowsApps\ksuser.dll
06d8:0218 @ 00371500 - LdrpResolveDllName - RETURN: Status: 0xc0000135
06d8:0218 @ 00371500 - LdrpSearchPath - RETURN: Status: 0xc0000135
06d8:0218 @ 00371500 - LdrpProcessWork - ERROR: Unable to load DLL: "ksuser.dll", Parent Module: "C:\Windows\SYSTEM32\MFCORE.DLL", Status: 0xc0000135

06d8:0700 @ 00371500 - LdrpInitializeProcess - ERROR: Walking the import tables of the executable and its static imports failed with status 0xc0000135
06d8:0700 @ 00371500 - _LdrpInitialize - ERROR: Process initialization failed with status 0xc0000135
06d8:0700 @ 00371500 - LdrpInitializationFailure - ERROR: Process initialization failed with status 0xc0000135
The thread 0x700 has exited with code -1073741515 (0xc0000135).
The thread 0x224 has exited with code -1073741515 (0xc0000135).
The program '[1752] MFIsolatedTest.exe' has exited with code -1073741515 (0xc0000135) 'A dependent dll was not found'.

The key line is:

06d8:0218 @ 00371500 - LdrpProcessWork - ERROR: Unable to load DLL: "ksuser.dll", Parent Module: "C:\Windows\SYSTEM32\MFCORE.DLL", Status: 0xc0000135

1809

mcr.microsoft.com/windows/servercore:1809 is the latest Windows Server 2019 container version. Unfortunately we see the following:

C:\>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\>
PS C:\> get-windowsfeature -Name *Media*

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[ ] Media Foundation                                    Server-Media-Foundation          Removed

The feature is not there!

If we attempt to install it anyway:

PS C:\> install-windowsfeature Server-Media-Foundation
install-windowsfeature : The request to add or remove features on the specified server failed.
Installation of one or more roles, role services, or features failed.
The source files could not be found.
Use the "Source" option to specify the location of the files that are required to restore the feature. For more information on specifying a source location, see
http://go.microsoft.com/fwlink/?LinkId=243077. Error: 0x800f081f
At line:1 char:1
+ install-windowsfeature Server-Media-Foundation
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (@{Vhd=; Credent...Name=localhost}:PSObject) [Install-WindowsFeature], Exception
    + FullyQualifiedErrorId : DISMAPI_Error__Failed_To_Enable_Updates,Microsoft.Windows.ServerManager.Commands.AddWindowsFeatureCommand

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
False   No             Failed         {}


PS C:\>

The source for the feature cannot be found.

mfisolatedtest's People

Contributors

rdstevens avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.