De Wikipedia, la enciclopedia libre
DirectShow (También abreviado como DS o DShow), en sus inicios Quartz, es un framework multimedia y una API creada por Microsoft para desarrolladores de software con el fin de desempeñar numerosas operaciones con ficheros multimedia y streams. Se creó para reemplazar la antigua tecnología de Microsoft Video for Windows.[1] Basado en el framework Microsoft Windows Component Object Model (COM), DirectShow proporciona una interfaz común para la gestión multimedia en diferentes lenguajes de programación, y es un framework con arquitectura basada en filtros que puede reproducir en pantalla y grabar ficheros de video bajo demanda del usuario o el desarrollador. Las herramientas de desarrollo de DirectShow y la documentación fue originalmente distribuida como parte de DirectX SDK. Actualmente, se distribuyen como parte de Windows SDK (antiguamente conocido como Platform SDK).[2]
Entre los contrincantes de DirectShow en otras plataformas están el framework QuickTime de Apple y varios frameworks multimedia de Linux como GStreamer o Xine. Microsoft planea, gradualmente, reemplazar completamente DirectShow por Media Foundation en futuras versiones de Windows.[3] Las aplicaciones para Windows Vista y Windows 7 usan Media Foundation en lugar de DirectShow para algunas tareas relacionadas con multimedia.
El siguiente ejemplo muestra cómo crear una aplicación sencilla que reproduzca un fichero de video visualizándolo por pantalla:
#include "stdafx.h" #include <dshow.h> int _tmain(int argc, _TCHAR* argv[]) { IGraphBuilder *pGraph = NULL; IMediaControl *pControl = NULL; IMediaEvent *pEvent = NULL; IMediaSeeking *pSeeking = NULL; // Inicializa la biblioteca COM. HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { printf("ERROR - No se ha podido inicializar la biblioteca COM"); system("pause"); return -1; } // Crea el gestor de grafos y filtros y obtiene las interfaces de control. hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); if (FAILED(hr)) { printf("ERROR - No se ha podido crear el gestor de grafos y filtros."); system("pause"); return -1; } hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); hr = pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pSeeking); // Construye el grafo DirectShow hr = pGraph->RenderFile(L"D:\\Videos\\costaColorW.mpg", NULL); if (SUCCEEDED(hr)) { // Inicia la reproducción de grafo hr = pControl->Run(); if (SUCCEEDED(hr)) { // Opcional: Configura la reproducción para que se detenga a los 10 segundos LONGLONG pCurrent = 0, pStop = 100000000; hr = pSeeking->SetPositions(&pCurrent, AM_SEEKING_AbsolutePositioning, &pStop, AM_SEEKING_AbsolutePositioning); if (FAILED(hr)) { printf("ERROR - SetPositions ha fallado."); } // Espera a que la reproducción finalice. long evCode; pEvent->WaitForCompletion(INFINITE, &evCode); // Nota: No utilice INFINITE en una aplicación real, puede provocar // el bloqueo indefinido. } } else printf("ERROR - El fichero no existe o no hay codec para reproducirlo."); // Ejecuta el comando 'pause' una vez finalizada la reproducción. system("pause"); pControl->Release(); pEvent->Release(); pSeeking->Release(); pGraph->Release(); CoUninitialize(); return 0; }
Seamless Wikipedia browsing. On steroids.