首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webm视频转换接口

webm视频转换接口
EN

Stack Overflow用户
提问于 2010-05-20 21:28:32
回答 1查看 5.8K关注 0票数 10

有没有人知道用来将视频转换成c#新的WebM视频格式的(原型)google?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-20 21:43:20

在谷歌上快速搜索一下就会说:不。但是example encoder看起来应该很容易使用P/Invoke转换成C#。Encoder Algorithm Interface看起来很容易管理。如果其他一切都失败了,总会有C++/CLI。谁启动了codeplex项目?:-)

更新:到目前为止,有一个黑客的,初级的工作原型.NET应用程序接口。这就是了:

代码语言:javascript
复制
#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 build将此链接到vpxmtd.lib。我无法摆脱一个警告,但到目前为止,它似乎是有效的。我的C++/CLI有点生疏,所以代码中可能有一些内存泄漏。

测试程序:

代码语言:javascript
复制
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());
            }
        }
    }
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2874140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档