DirectShow
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.
Ejemplo de código fuente
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; }
Véase también
- GraphStudio – open source GraphEdit project
- DirectX Media Objects
- DirectX plugins
- DirectX Video Acceleration
- DirectShowPlayer
Referencias
- «MSDN DirectShow documentation». Consultado el 7 de julio de 2007.
- Pesce, Mark D. (2003). Programming Microsoft DirectShow for Digital Video and Television. Microsoft Press. ISBN 0-7356-1821-6. (Sample Chapter)
Notas
- Blome, Michael; Wasson, Mike (julio de 2002). «Core Media Technology in Windows XP Empowers You to Create Custom Audio/Video Processing Components». MSDN Magazine (Microsoft). Consultado el 2 de abril de 2007.
- «DirectShow documentation». MSDN Library. Microsoft. 1 de enero de 2006. Consultado el 1 de enero de 2006.
- «Migrating from DirectShow to Media Foundation». MSDN Library. Microsoft. julio de 2006. Consultado el 17 de agosto de 2010.
Enlaces externos (en inglés)
- DirectShow on MSDN (documentación oficial)
- J. River DirectShow Playback Guide (tutorial sobre DirectShow con información general)
- VideoLab (librería de procesamiento de vídeo con soporte para DirectShow (gratis para propósitos no comerciales))