所以在dll中我们有 x264_param_t 结构\对象及其设置函数 x264_param_apply_profile. 。在C中我们使用 这样的代码 设置它

x264_param_t param;
x264_param_default_preset(&param, "veryfast", "zerolatency");
param.i_threads = 1;
param.i_width = width;
param.i_height = height;
param.i_fps_num = fps;
param.i_fps_den = 1;
// Intra refres:
param.i_keyint_max = fps;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;
x264_param_apply_profile(&param, "baseline");

我想为这样的创建包装器..事物。所以我有 libx264.dll 和 Visual Studio 2010 Pro。

如何为其创建 .Net C# 包装器?

我是 P\Invoke 方面的初学者,所以我不太了解......

我想要实现的是使用 x264 的逐帧级别...现在我只需要编码部分......在 C 语言中执行此操作所需的所有示例代码都在 如何使用 x264 C API 将一系列图像编码为 H264? 。所以我只需要为那里提到的东西写一个包装器......所以我问 - 如何在参数和函数上创建一个包装器来设置 thap 参数。我很想知道如何从 C# 调用该包装器。因此,如果您可以提供任何支持代码,我将很高兴看到它。

有帮助吗?

解决方案

我可以建议您尝试一下,而不是自己尝试这个(以及无数其他代码) 优秀的MeGUI?它是用 C# 开发的,支持所有 X264,可以在您的 C# 或其他 .NET 项目中使用。不需要包装纸,他们已经为你做好了这一切。

虽然使用 C# 调用 C 库函数并不是非常困难,但如果您确实希望自己完成这一切,我建议您看一下 http://pinvoke.net, ,其中为您提供了大量如何自行执行此操作的示例。

其他提示

令人惊讶的是,这些年来,似乎没有人为 libx264 构建和共享哪怕是最简单的 .NET 包装器。所以我最近构建了一个,我称之为“x264net”并将其放在 github 上,在这里: https://github.com/bp2008/x264net

此时的包装器非常简单,使其成为如何从 .NET 语言访问 C 库的一个很好的示例。我没有使用 P/Invoke,因为我发现它很难使用。相反,我使用一种名为“C++/CLI”的语言来创建互操作层。C++/CLI 是一种基于 C++ 的语言,可以访问本机 C/C++ 库,同时本身也可由 .NET 代码访问。因此,它就像 P/Invoke 一样弥合了托管代码和本机代码之间的差距。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top