webm视频转换API

发布于 2024-09-02 03:18:45 字数 45 浏览 0 评论 0原文

有谁知道用于将视频转换为谷歌新的 WebM 视频格式的(原型)c# API?

Does anyone know about any (prototype) c# API's for converting video to google's new WebM video format?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十年九夏 2024-09-09 03:18:45

谷歌快速搜索显示:不。但是 示例编码器 看起来应该可以使用 P 轻松转换为 C# /调用。 编码器算法界面看起来非常易于管理。如果其他一切都失败了,那么总是有 C++/CLI。谁启动了 Codeplex 项目? :-)

更新: 截至目前,有一个黑客式的、基本的工作原型 .NET API。在这里:

#include "vpx_codec.h"

#define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx_encoder.h"
#include "vp8cx.h"

#define vp8iface (&vpx_codec_vp8_cx_algo)

using namespace System;

namespace WebM
{
    namespace VP8 
    {
        namespace Native
        {
            public ref class VP8Codec
            {
            private:
                vpx_codec_ctx_t* ctx;

                VP8Codec(vpx_codec_ctx_t* ctx)
                {
                    this->ctx = ctx;
                }

            public:
                ~VP8Codec()
                {
                    vpx_codec_destroy(ctx);
                    delete ctx;
                }

                property String^ LastError
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_error(ctx));
                    }
                }

                property String^ LastErrorDetail
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_error_detail(ctx));
                    }
                }

                int Encode()
                {
                    // TODO: do actual encoding
                    return
                        vpx_codec_encode(ctx, NULL, 0, 1, 0, VPX_DL_REALTIME); 
                }

                static VP8Codec^ CreateEncoder() // TODO: add 'config' argument
                {
                    vpx_codec_ctx_t* ctx;
                    vpx_codec_enc_cfg_t cfg;

                    if(vpx_codec_enc_config_default(vp8iface, &cfg, 0))
                    {
                        return nullptr; // TODO: throw exception
                    }

                    ctx = new vpx_codec_ctx_t;

                    if (vpx_codec_enc_init(ctx, vp8iface, &cfg, 0))
                    {
                        delete ctx;
                        return nullptr; // TODO: throw exception
                    }

                    return gcnew VP8Codec(ctx);
                }

                static property int Version
                {
                    int get()
                    {
                        return vpx_codec_version();
                    }
                }

                static property String^ VersionString
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_version_str());
                    }
                }

                static property String^ BuildConfig
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_build_config());
                    }
                }

                static String^ GetErrorDescription(int errorCode)
                {
                    return gcnew String(
                        vpx_codec_err_to_string((vpx_codec_err_t)errorCode));
                }

                static property String^ IfaceName
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_iface_name(vp8iface));
                    }
                }
            };
        }
    }
}

您应该能够将其链接到 libvpx Windows 构建。我无法摆脱一个警告,但到目前为止它似乎有效。不过,我的 C++/CLI 有点生疏,因此代码中可能存在一些内存泄漏。

测试程序:

namespace WebM.VP8
{
    using System;

    using WebM.VP8.Native;

    public class Program
    {
        public static void Main()
        {
            using (var encoder = VP8Codec.CreateEncoder())
            {
                Console.WriteLine(encoder.Encode());
            }
        }
    }
}

A quick google search says: no. But the example encoder looks like it should be easily translatable to C# using P/Invoke. The Encoder Algorithm Interface looks quite manageable. And there's always C++/CLI if everything else fails. Who starts the codeplex project? :-)

Update: As of now, there is a hackish, rudimentary working prototype .NET API. Here you go:

#include "vpx_codec.h"

#define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx_encoder.h"
#include "vp8cx.h"

#define vp8iface (&vpx_codec_vp8_cx_algo)

using namespace System;

namespace WebM
{
    namespace VP8 
    {
        namespace Native
        {
            public ref class VP8Codec
            {
            private:
                vpx_codec_ctx_t* ctx;

                VP8Codec(vpx_codec_ctx_t* ctx)
                {
                    this->ctx = ctx;
                }

            public:
                ~VP8Codec()
                {
                    vpx_codec_destroy(ctx);
                    delete ctx;
                }

                property String^ LastError
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_error(ctx));
                    }
                }

                property String^ LastErrorDetail
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_error_detail(ctx));
                    }
                }

                int Encode()
                {
                    // TODO: do actual encoding
                    return
                        vpx_codec_encode(ctx, NULL, 0, 1, 0, VPX_DL_REALTIME); 
                }

                static VP8Codec^ CreateEncoder() // TODO: add 'config' argument
                {
                    vpx_codec_ctx_t* ctx;
                    vpx_codec_enc_cfg_t cfg;

                    if(vpx_codec_enc_config_default(vp8iface, &cfg, 0))
                    {
                        return nullptr; // TODO: throw exception
                    }

                    ctx = new vpx_codec_ctx_t;

                    if (vpx_codec_enc_init(ctx, vp8iface, &cfg, 0))
                    {
                        delete ctx;
                        return nullptr; // TODO: throw exception
                    }

                    return gcnew VP8Codec(ctx);
                }

                static property int Version
                {
                    int get()
                    {
                        return vpx_codec_version();
                    }
                }

                static property String^ VersionString
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_version_str());
                    }
                }

                static property String^ BuildConfig
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_build_config());
                    }
                }

                static String^ GetErrorDescription(int errorCode)
                {
                    return gcnew String(
                        vpx_codec_err_to_string((vpx_codec_err_t)errorCode));
                }

                static property String^ IfaceName
                {
                    String^ get()
                    {
                        return gcnew String(vpx_codec_iface_name(vp8iface));
                    }
                }
            };
        }
    }
}

You should be able to link this against vpxmtd.lib from the libvpx Windows build. I wasn't able to get rid of one warning, but so far it seems to work. My C++/CLI is a bit rusty, though, so there may be some memory leaks in the code.

Test program:

namespace WebM.VP8
{
    using System;

    using WebM.VP8.Native;

    public class Program
    {
        public static void Main()
        {
            using (var encoder = VP8Codec.CreateEncoder())
            {
                Console.WriteLine(encoder.Encode());
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文