来自 美高梅4858官方网站 2019-12-11 05:36 的文章
当前位置: 美高梅4858官方网站 > 美高梅4858官方网站 > 正文

接口实例,使用DirectX实现视频播放

美高梅4858官方网站,mysql的官方网址有对MySQL Connector/C++的文书档案解释和求实实例,然则大家也掌握,若是把那么些具体实例的代码只是干Baba的套入项目工程中是相对不 行的,因为项目安全性必要,供给对容错,财富创立释放难点严苛关切,上面贴多个本人的章程函数,里面富含了相关安全处理并且对调用存款和储蓄进度也富有涉及

无数人第三回接触到DirectX大都以由此游戏,至于安装、晋级DirectX的原因仅仅是满意游戏运营的急需。Direct X其实是微软集团生产的二个为Windows平台的多媒体API函数库,它提供标准接口来与显卡和声卡、输入设备等进行互相。如果未有那组正式API函数库,那您就需求为每风姿浪漫种显卡、声卡的每种组合和每系列型的键盘、鼠标和游戏杆编写分化的代码。这不又再次回到了原先的Dos时期。为了缓和这几个难点,微软集团临盆了DirectX。DirectX从现实的硬件中架空出来,况且将生龙活虎组通用指令转变到硬件的具体命令。那样开采语言因此调用统豆蔻年华规范的Direct X函数库就能够操作每意气风发种显卡、声卡的种种组合和每体系型的键盘、鼠标和游戏杆等多媒体了。

[C/C++]代码

  风流罗曼蒂克.Direct X SDK 9.0装置及类库介绍:

bool CommonService::......(JSONNode& in, JSONNode& out)
{
    /*=====校验json传入参数=====*/
    ..........

    /*=====解析json传入参数,得到安装码或者id, 安装时间, 硬盘序列号, ip,mac=====*/

    ..........

    /*=====通过安装码找到数据库中的对应记录写入传入的值=====*/
    /********数据库操作**********/
    //1.得到数据库连接
    Connection* con = G<ConnectionPool>().GetConnection();
    if (con == NULL)
    {
        LOG4CXX_ERROR(g_logger, "不能得到数据库连接");
        out.push_back(JSONNode(RESULT, ACTION_FALSE));
        out.push_back(JSONNode(ERROR_MESSAGE, "不能得到数据库连接"));
        return false;
    }

    int ret = 1;
    PreparedStatement* prep_stmt = NULL;
    ResultSet* res = NULL;

    try
    {
        con->setSchema(G<ConnectionPool>().GetDBName().c_str());

        //执行sql改变安装状态
        std::string sql_statement = "update tb_host set reg_date=?, sn=?, ip=?, mac=?, state=?, sync_state=? where reg_code =? and state=?";//要执行的sql语句
        //事务处理
        con->setAutoCommit(0);
        prep_stmt = con->prepareStatement(sql_statement.c_str());

        prep_stmt->setString(1, install_time.c_str());
        prep_stmt->setString(2, harddrive_sn.c_str());
        prep_stmt->setString(3, ip_address.c_str());
        prep_stmt->setString(4, mac_address.c_str());
        prep_stmt->setInt(5, HAS_INSTALL);
        prep_stmt->setInt(6, HAS_SYNC);
        prep_stmt->setString(7, install_code.c_str());
        prep_stmt->setInt(8, NO_INSTALL);

        if(prep_stmt->executeUpdate() == 0)
        {
            ret = 2;
            LOG4CXX_INFO(g_logger, ".....");
            out.push_back(JSONNode(ERROR_MESSAGE, "....."));
            goto Finally_handle;
        }
        //调用赋默认策略存储过程
        std::string procedure = "CALL updateHostPolicyByModHost(?,?, @ret, @msg)";
        prep_stmt = con->prepareStatement(procedure.c_str());
        prep_stmt->setString(1, install_code.c_str());
        prep_stmt->setInt(2, 0);
        prep_stmt->execute();

        std::string query = "select @ret AS ret,@msg AS msg";
        prep_stmt = con->prepareStatement(query.c_str());
        res = prep_stmt->executeQuery();
        while(res->next())
        {
            if(res->getInt("ret") != 0)
            {
                LOG4CXX_ERROR(g_logger, "....." << res->getString("msg").c_str() << res->getInt("ret"));
                out.push_back(JSONNode(ERROR_MESSAGE, "....."));
                goto Finally_handle;
            }
        }
        con ->commit();

    }
    catch (SQLException& e)
    {
        try
        {
            con->rollback();
        }
        catch (SQLException& e)
        {
            ret = 0;
            LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
            goto Finally_handle;
        }

        ret = 0;
        LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
        out.push_back(JSONNode(ERROR_MESSAGE, e.what()));
        goto Finally_handle;
    }
    catch (...)
    {
        ret = 0;
        LOG4CXX_ERROR(g_logger, "其他错误");
        out.push_back(JSONNode(ERROR_MESSAGE, "其他错误"));
        goto Finally_handle;
    }

    Finally_handle:
    DestorySql(res, prep_stmt);
    //将连接释放到连接池
    G<ConnectionPool>().ReleaseConnection(con);

    if (ret == 1)
    {
        out.push_back(JSONNode(RESULT, ACTION_SUCCESS));
        return true;
    }
    else if (ret == 2)
    {
        out.push_back(JSONNode(RESULT, ACTION_FALSE));
        return true;
    }
    else
    {
        out.push_back(JSONNode(RESULT, ACTION_FALSE));
        return false;
    }

}

/************************************************************************/
/* 销毁数据库记录集资源                                                 */
/************************************************************************/
void CommonService::DestorySql(ResultSet* res, PreparedStatement* prep_stmt)
{
    if (res != NULL)
    {
        try
        {
            res ->close();
        }
        catch(SQLException& e)
        {
            LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
        }
        delete res;
        res = NULL;
    }
    if (prep_stmt != NULL) {
        try
        {
            prep_stmt->close();
        }
        catch(SQLException& e)
        {
            LOG4CXX_ERROR(g_logger, "数据库异常" << e.what());
        }
        delete prep_stmt;
        prep_stmt = NULL;
    }
}

  .Net FrameWork SDK中并从未蕴含Direct X SDK,所认为了顺遂的成功本文前边介绍,
总得先下载、安装Direct X SDK。具体的下载地址为: X后,就能在存在"C:WINDOWSMicrosoft.NETManaged DirectX"那样一个目录,此目录中目录中应有有柒个DLL文件和七个XML文件。柒个DLL文件大致对应于DirectX中的11个命名空间。编制程序中正是行使在那之中的命名空间来提供对输入设备、声音、互联网广播、图形等的支撑。Direct X SDK 9.0中的定义的命名空间及其首要的法力具体如表01所示:

命名空间 描述
Microsoft.DirectX 公共类和数学结构
Microsoft.DirectX.Direct3D 3D图形和助手库
Microsoft.DirectX.DirectDraw Direct Draw 图形API。这是旧式命名空间,现在已经不需要使用它。
Microsoft.DirectX.DirectPlay 用于多玩家游戏的网络API
Microsoft.DirectX.DirectSound 声音支持
Microsoft.DirectX.DirectInput 输入设备支持(例如,鼠标和游戏杆)
Microsoft.DirectX.AudioVideoPlayback 播放视频和音频(例如,在电脑上播放各自视频动画文件)
Microsoft.DirectX.Diagnostics 疑难解答
Microsoft.DirectX.Security 访问安全性
Microsoft.DirectX.Security.Permissions 访问安全权限

       表01:Direct X SDK9.0中的定义的命名空间及其首要的职能

  Direct X内容拾贰分加多,下文介绍的只是在这之中的二个小的应用,即用Visual C#调用Direct X中的SDK来播放录制文件为例子,程序中只利用了命名空间"Microsoft.DirectX.奥迪oVideoPlayback"。 Microsoft.DirectX.奥迪oVideoPlayback命名空间中定义了多个类:"奥迪(Audi卡塔尔o"、"Video"和"TextureRenderEventArgs"。此中前二个类是最常用的,分别用来支撑音频和录像。Microsoft.DirectX.奥迪(Audi卡塔尔国oVideoPlayback命名空间中定义的常用属性及其实际的职能可参照他事他说加以考察表02所示:

属性 描述
Audio 获取视频文件中的音频对象,可用来后续的音频播放
Caption 获取或设置在Form上播放视频的名称
CurrentPosition 获取或设置播放视频的当前位置
DefaultSize 获取播放视频的缺省的视频大小
Fullscreen 获取或设置视频文件是否在全屏模式下播放
IsCursorHidden 获取播放的视频时鼠标的状态:隐藏或显示
Owner 获取或设置视频播放的宿主组件
Paused 获取当前的播放状态是否处于暂停状态
Playing 获取当前的播放状态是否处于播放状态.
SeekingCaps 获取是否可以搜索性能
Size Retrieves and sets the size of the video for playback.
State 获取当前的播放状态
Stopped 获取当前的播放状态是否处于停止状态
StopPosition 获取播放的视频的停止播放位置

    表02:Microsoft.DirectX.奥迪(Audi卡塔尔国oVideoPlayback命名空间中定义的常用属性及其实际的成效

  Microsoft.DirectX.奥迪(Audi卡塔尔(قطر‎oVideoPlayback命名空间中定义的常用方法及其实际的法力可参看表03所示:

方法 描述
HideCursor 隐藏当前播放视频的鼠标
Open 装入新的文件到Video对象中
Pause 设置为暂停播放状态.
Play 设置为播放状态
SeekCurrentPosition 搜索转入到制定的播放位置
SeekStopPosition 设置一个新的停止位置
ShowCursor 显示当前播放视频的鼠标
Stop 设置为停止播放状态
Video 初始化一个新的Video实例

    表03:Microsoft.DirectX.奥迪oVideoPlayback命名空间中定义的常用属性及其实际的作用

  掌握了上述这几个根基知识后,下边就从头介绍Visual C#调用Direct X播放录像文件的现实落实方式。

  二.本小说的次第设计、调节和测量检验和平运动转的遇到:

  (1).微软公司视窗二〇〇二中文公司版。

  (2).Visual Studio .Net 2001厂家创设版,.Net FrameWork SDK 1.1版本号4322。

  三.Visual C#行使Direct X的落到实处录像播放

  Visual C#使用Direct X的实现录制播放难题无非以下几点:

  1. 掌握在Visual C#引进Dirext X函数库的艺术。

  2. 装置Direct X摄像播放的宿主组件。

  3. 着力的广播命令的设置:播放、截止、暂停等。

  上边正是Visual C#行使Direct X的贯彻录制播放具体落到实处步骤:

  1. 启动Visual Studio .Net。

  2. 精选菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目项目】设置为【Visual C#项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【Visual C#中央银行使DriectX完成媒体播发】。

  6. 在【地点】的文本框中输入【E:VS.NET项目】,然后单击【鲜明】开关。那样在"E:VS.NET项目"目录中就创立了四个名号为"Visual C#中利用DriectX完毕媒体播发"的文本夹,里面寄放的就是"Visual C#中动用DriectX完结媒体播发"项目标具有文件。

  7. 选中【建设方案微机】|【援用】,单击鼠标右键,选中【增多援引】菜单,具体如图01所示:


图01:添加引用

本文由美高梅4858官方网站发布于美高梅4858官方网站,转载请注明出处:接口实例,使用DirectX实现视频播放

关键词: