Я отправляю отчет об ошибке, пока публиковал это, я не знал, что могу увидеть FFmpeg.Autogen из трассировки стека. В любом случае я разместил отчет об ошибке на Github
https://github.com/Ruslan-B/FFmpeg.AutoGen/issues/109
Я пытаюсь запустить свой код в Linux, который использует FFmpeg.Autogen для взаимодействия с библиотеками ffmpeg. Я получаю файл kernel32 dll, не найденный, не могу понять почему. Он просит не публиковать сообщения о проблемах на github для устранения неполадок.
Возможная связанная проблема: https://github.com/Ruslan-B/FFmpeg.AutoGen/issues/89
Первое, что я попробовал, — это включить двоичный вспомогательный класс из примера кода, который я немного подправил. Добавлен точный путь к файлам Linux.
Второе, что я сделал, это добавил FFmpeg.AutoGen.dll.config, если он настроен правильно, и он пытается сослаться на DLL Windows, которая должна указывать на Linux.
Stacktrace :
System.DllNotFoundException: kernel32
at at (wrapper managed-to-native) FFmpeg.AutoGen.Native.WindowsNativeMethods.GetProcAddress(intptr,string)
at FFmpeg.AutoGen.Native.FunctionLoader.GetFunctionPointer (System.IntPtr nativeLibraryHandle, System.String functionName) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\Native\FunctionLoader.cs:55
at FFmpeg.AutoGen.Native.FunctionLoader.GetFunctionDelegate[T] (System.IntPtr nativeLibraryHandle, System.String functionName, System.Boolean throwOnError) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\Native\FunctionLoader.cs:28
at FFmpeg.AutoGen.ffmpeg.GetFunctionDelegate[T] (System.IntPtr libraryHandle, System.String functionName) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.cs:50
at FFmpeg.AutoGen.ffmpeg+c.b__4_318 () [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.functions.export.g.cs:7163
at FFmpeg.AutoGen.ffmpeg.avformat_alloc_context () [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.functions.export.g.cs:7176
at FF8.FfccVaribleGroup..ctor () [0x0009c] in /home/robert/OpenVIII/FF8/FfccVaribleGroup.cs:53
at FF8.Ffcc..ctor (System.String filename, FFmpeg.AutoGen.AVMediaType mediatype, FF8.Ffcc+FfccMode mode) [0x00008] in /home/robert/OpenVIII/FF8/Ffcc.cs:31
at FF8.Module_movie_test.InitMovie () [0x00001] in /home/robert/OpenVIII/FF8/module_movie_test.cs:160
at FF8.Module_movie_test.Update () [0x000c5] in /home/robert/OpenVIII/FF8/module_movie_test.cs:88
at FF8.ModuleHandler.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x000ac] in /home/robert/OpenVIII/FF8/ModuleHandler.cs:43
at FF8.Game1.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00030] in /home/robert/OpenVIII/FF8/Game1.cs:69
at Microsoft.Xna.Framework.Game.DoUpdate (Microsoft.Xna.Framework.GameTime gameTime) [0x00019] in :0
at Microsoft.Xna.Framework.Game.Tick () [0x00103] in :0
at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop () [0x00021] in :0
at Microsoft.Xna.Framework.Game.Run (Microsoft.Xna.Framework.GameRunBehavior runBehavior) [0x0008b] in :0
at Microsoft.Xna.Framework.Game.Run () [0x0000c] in :0
at FF8.Program.Main () [0x00007] in /home/robert/OpenVIII/FF8/Program.cs:17
Мой код, который запускает это:
Format = ffmpeg.avformat_alloc_context();
Binaryhelper должен правильно указать путь к файлу
internal static void RegisterFFmpegBinaries()
{
var libraryPath = "";
switch (Environment.OSVersion.Platform)
{
case PlatformID.Win32NT:
case PlatformID.Win32S:
case PlatformID.Win32Windows:
var current = Environment.CurrentDirectory;
var probe = Path.Combine(Environment.Is64BitProcess ? "x64" : "x86");
while (current != null)
{
var ffmpegDirectory = Path.Combine(current, probe);
if (Directory.Exists(ffmpegDirectory))
{
Console.WriteLine($"FFmpeg binaries found in: {ffmpegDirectory}");
RegisterLibrariesSearchPath(ffmpegDirectory);
return;
}
current = Directory.GetParent(current)?.FullName;
}
break;
case PlatformID.Unix:
libraryPath = "/usr/lib/x86_64-linux-gnu";
RegisterLibrariesSearchPath(libraryPath);
break;
case PlatformID.MacOSX:
libraryPath = Environment.GetEnvironmentVariable(LD_LIBRARY_PATH);
RegisterLibrariesSearchPath(libraryPath);
break;
}
}
Файл FFmpeg.Autogen.dll.config
Подробнее здесь: https://stackoverflow.com/questions/554 ... mono-linux
Kernel32 не найден при использовании FFmpeg.Autogen 4.1.0.2 в Mono/Linux ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вызовите Mono после завершения первого Mono и верните результат первого Mono.
Anonymous » » в форуме JAVA - 0 Ответы
- 52 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как устранить рассинхронизацию библиотек классов Mono со средой выполнения Mono
Anonymous » » в форуме C# - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-