<code class="lang-cpp">// dshowtest.cpp : Defines the entry point for the console application. // #include "stdafx.h" // 用于控制台的头文件 #include <stdio.h> #include <locale.h> #include <io.h> #include <fcntl.h> // 用于Windows和COM的头文件 #define UNICODE 1 #include <windows.h> // DirectShow的一个头文件、两个库 #include <dshow.h> #pragma comment(lib, "strmiids.lib") #pragma comment(lib, "quartz.lib") int main() { // 设置Unicode控制台环境 _wsetlocale(LC_ALL, L""); _setmode(_fileno(stdin), _O_WTEXT); // 文件名乱码的话,请将此句注释 _setmode(_fileno(stdout), _O_WTEXT); _setmode(_fileno(stderr), _O_WTEXT); // 初始化COM环境 HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 1, hr); return 1; } // 创建DirectShow的接口IGraphBuilder,用于文件加载 IGraphBuilder *pGraph = NULL; hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 2, hr); return 1; } // IMediaContorl用于控制播放 // IMediaEvent用于接收事件 IMediaControl *pControl = NULL; IMediaEvent *pEvent = NULL; hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 3, hr); return 1; } hr = pGraph->QueryInterface(IID_IMediaEvent, (void**)&pEvent); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 4, hr); return 1; } wchar_t filename[MAX_PATH + 2]; wprintf(L"File name: "); _getws_s(filename); // 去掉文件名的引号 if (filename[0] == L'\"' && filename[wcslen(filename) - 1] == L'\"') { filename[wcslen(filename) - 1] = 0; wmemmove(filename, filename + 1, wcslen(filename + 1) + 1); } // 读取文件 wprintf(L"Reading file: %s...\n", filename); hr = pGraph->RenderFile(filename, NULL); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 5, hr); return 1; } // 播放文件 wprintf(L"Start playing...\n"); hr = pControl->Run(); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 6, hr); return 1; } // 等待播放结束 wprintf(L"Waiting...\n"); long evCode = 0; hr = pEvent->WaitForCompletion(INFINITE, &evCode); if (FAILED(hr)) { wprintf(L"%d HRESULT %x\n", 7, hr); return 1; } wprintf(L"Complete.\n"); // 释放资源 pControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); return 0; }</dshow.h></windows.h></fcntl.h></io.h></locale.h></stdio.h></code>
[修改于 9年0个月前 - 2015/12/22 19:14:22]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |