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]

Graph Edit – Ejemplo de un grafo de DirectShow creado con GraphEdit.[cita requerida]

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

Referencias

Notas

  1. 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.
  2. «DirectShow documentation». MSDN Library. Microsoft. 1 de enero de 2006. Consultado el 1 de enero de 2006.
  3. «Migrating from DirectShow to Media Foundation». MSDN Library. Microsoft. julio de 2006. Consultado el 17 de agosto de 2010.

Enlaces externos (en inglés)

Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.