编写编码程序可以使用已经配置好的文件进行编码,文件为“,wme”文件。
这需要调用IWMEncoder的Load()方法。其定义为:
HRESULT Load(
BSTR bstrFileName) 其中,BSTR是一个类似CString类的指向宽字符串的类,bstrFileName包含了编码文件的文件名,即相对路径。
HRESULT是COM中用来向用户报告各种情况的32位值。这个名称很容易让人将这种类型的值当成一个指向某个结果的句柄,
实际上并不是这样。它是一个可分为三个区域的32位值。可理解为“Here’s the Result”。返值为S_OK时,表示成功。
S_OK被定义为0。失败时支持IerrorInfo接口,不同的错误有不同的错误号。
使用IWMEncoder前,需要先定义并初始化COM库,返回一个指向该接口的指针。
HRESULT hr;IWMEncoder* pEncoder;
// Initialize the COM library and retrieve a pointer// to an IWMEncoder interface. hr = CoInitialize(NULL); CoCreateInstance(CLSID_WMEncoder, NULL, CLSCTX_INPROC_SERVER, IID_IWMEncoder, (void**) &pEncoder);
//装载.wme文件
CComBSTR bstrFileName(L"file_name.wme");
hr = pEncoder->Load(bstrFileName);
//可以用IWMEncoder->Save()将配置文件备份保存
//准备编码
hr = pEncoder->PrepareToEncode(VARIANT_TRUE)
//启动编码
hr = pEncoder->Start();
//此时,可以用IWMEncoder->get_RunState()得到编码进程的状态。1代表正在开始,2代表正在编码,4代表正在停止,5代表已经停止。
WMENC_ENCODER_STATE enumEncoderState;hr = pEncoder->get_RunState(&enumEncoderState);//可用一个判断编码是否结束的if语句控制编码 如果结束,退出循环。
while(1){if (enumEncoderState != WMENC_ENCODER_RUNNING) { break;}}//停止编码
hr = pEncoder->Stop();//释放占用资源hr = pEncoder->Release(); 程序需要的头文件为:#include <windows.h>#include <atlbase.h> // Includes CComBSTR.#include "wmencode.h" 总结:这是进行编码编程的一个最基本的程序,使用已经配置好的文件进行编码。
在做的过程中,遇到了很多问题,比如:hr的含义,CComBSTR的类型,
COM的初始化。尤其是在最后编码的时候,不能得到编码的内容,是因为过早地结束了程序,没有编码时间。经过老师的悉心指点和教导,最后终于完成。从中收获颇多。
博客介绍了编写编码程序的方法,可使用已配置好的.wme文件进行编码,需调用IWMEncoder的Load()方法。使用前要定义并初始化COM库,还可通过IWMEncoder->Save()备份保存配置文件,能利用IWMEncoder->get_RunState()获取编码进程状态。
2443

被折叠的 条评论
为什么被折叠?



