Escritura de un archivo de Windows Media en DES
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
[Esta API no se admite y puede modificarse o no estar disponible en el futuro].
En esta sección se describe cómo escribir un archivo de Windows Media mediante DirectShow Editing Services (DES).
Importante
No use el motor de representación inteligente para escribir archivos de Windows Media. Use siempre el motor de representación básico (CLSID_RenderEngine).
Para escribir un archivo de Windows Media, haga lo siguiente:
Llame a SetSite en el motor de representación, con un puntero al proveedor de claves.
Cree el front-end del gráfico. (Vea Representación de un proyecto).
Cree el filtro WM ASF Writer y agréguelo al gráfico.
Use la interfaz IFileSinkFilter en el filtro WM ASF Writer para establecer el nombre de archivo.
Configure wm ASF Writer para usar un perfil de Windows Media. Cada perfil tiene un número predefinido de secuencias. Debe elegir un perfil que coincida con los grupos del proyecto.
La interfaz IConfigAsfWriter contiene algunos métodos diferentes para establecer el perfil. Por ejemplo, el método ConfigureFilterUsingProfileGuid especifica un perfil del sistema como GUID. O bien, puedes usar métodos de Windows Media Format para obtener un puntero IWMProfile y, a continuación, llamar a IConfigAsfWriter::ConfigureFilterUsingProfile. Para obtener más información, vea Configuring the ASF Writer.
Conecte el front-end al escritor de ASF. El front-end del gráfico contiene un pin de salida para cada grupo. Suponiendo que especificó un perfil compatible, asf Writer debe tener un conjunto coincidente de patillas de entrada. Conecte cada patilla de salida al pin de entrada correspondiente. La manera más fácil de hacerlo es usar el método ICaptureGraphBuilder2::RenderStream . En primer lugar, cree una nueva instancia del Generador de grafos de captura e inicialícela con un puntero al Administrador de gráficos de filtros:
ICaptureGraphBuilder2 *pBuild = 0; hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild); pBuild->SetFiltergraph(pGraph);
A continuación, recupere el pin de salida de cada grupo llamando al método IRenderEngine::GetGroupOutputPin . Llame a RenderStream para conectar la patilla al escritor de ASF:
long cGroups = 0; hr = pTimeline->GetGroupCount(&cGroups); for (long i = 0; i < cGroups; i++) { IPin *pPin; hr = pRenderEngine->GetGroupOutputPin(i, &pPin); if (SUCCEEDED(hr)) { hr = pBuild->RenderStream(0, 0, pPin, 0, pASF); } pPin->Release(); } pBuild->Release
Temas relacionados