Ir al contenido

DirectShow

De Wikipedia, la enciclopedia libre
Graph Edit – Ejemplo de un grafo de DirectShow creado con GraphEdit.[cita requerida]

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

[editar]

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

[editar]

Referencias

[editar]

Notas

[editar]
  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)

[editar]