1

所以在 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 中执行此操作所需的所有示例代码是如何将一系列图像编码为 H264使用 x264 C API?. 所以我只需要为那里提到的东西编写一个包装器......所以我问 - 如何在参数和设置 thap 参数的函数上创建一个包装器。我很想看看如何从 c# 中调用该包装器。因此,如果您可以提供任何支持代码,我将很高兴看到它。

4

2 回答 2

2

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

虽然使用 C# 调用 C 库函数并不难,但如果您确实希望自己完成这一切,我建议您查看http://pinvoke.net,它为您提供了很多示例如何自己执行此操作。

于 2010-07-11T13:20:56.730 回答
0

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

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

于 2016-12-06T17:51:05.277 回答