Compartir a través de


Método ICaptureGraphBuilder2::RenderStream (strmif.h)

[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.

El RenderStream método conecta un pin de salida en un filtro de origen a un filtro receptor, opcionalmente a través de un filtro intermedio.

Sintaxis

HRESULT RenderStream(
  [in] const GUID  *pCategory,
  [in] const GUID  *pType,
  [in] IUnknown    *pSource,
  [in] IBaseFilter *pfCompressor,
  [in] IBaseFilter *pfRenderer
);

Parámetros

[in] pCategory

Puntero a un GUID que especifica una de las categorías de patillas enumeradas en Conjunto de propiedades de pin. Para que coincida con cualquier patilla, independientemente de la categoría, establezca este parámetro en NULL. Entre los valores típicos se incluyen los siguientes.

  • PIN_CATEGORY_CAPTURE
  • PIN_CATEGORY_PREVIEW
  • PIN_CATEGORY_CC

[in] pType

Puntero a un GUID de tipo principal que especifica el tipo de medio del pin de salida; o NULL para usar cualquier patilla, independientemente del tipo de medio. Para obtener una lista de los valores posibles, consulte Tipos principales.

[in] pSource

Especifica un puntero al filtro inicial de la conexión o a un pin de salida.

[in] pfCompressor

Puntero a la interfaz IBaseFilter de un filtro intermedio, como un filtro de compresión. Puede ser NULL.

[in] pfRenderer

Puntero a la interfaz IBaseFilter de un filtro receptor, como un representador o un filtro mux. Si el valor es NULL, el método usa un representador predeterminado (vea Comentarios).

Valor devuelto

Devuelve un valor HRESULT . Entre los posibles valores devueltos se incluyen los siguientes.

Código devuelto Descripción
S_OK
Correcto.
VFW_S_NOPREVIEWPIN
La vista previa se ha representado a través del filtro Smart Tee.
E_FAIL
Error.
E_INVALIDARG
Argumento no válido.
E_POINTER
Argumento de puntero NULL.
VFW_E_NOT_IN_GRAPH
Un filtro no está en el gráfico de filtros. Este error puede producirse si no ha llamado a AddFilter para agregar pSource, pIntermediate o pSink al grafo. También puede ocurrir si no llamó a SetFiltergraph para conectar el grafo al Generador de grafos de captura; en este caso, el objeto Capture Graph Builder crea automáticamente su propio grafo de filtro. Consulte Acerca de Capture Graph Builder.

Comentarios

Este método representa una secuencia mediante la conexión de dos o más filtros juntos en una cadena:

  • El parámetro pSource especifica el inicio de la cadena, ya sea un filtro o un pin de salida.
  • El parámetro pIntermediate especifica un filtro intermedio, normalmente un filtro de compresión. Este parámetro puede ser NULL.
  • El parámetro pSink especifica el filtro al final de la cadena. Normalmente, este filtro es un representador para la vista previa o una mux para la captura de archivos.
El método conecta pSource a pIntermediate y, a continuación, conecta pIntermediate a pSink. Si pIntermediate es NULL, el método simplemente conecta pSource a pSink. Todos los filtros especificados por pSource, pIntermediate y pSink deben agregarse al gráfico antes de llamar al método . El método usa Intelligent Connect, por lo que se pueden agregar filtros adicionales, como descodificadores, al grafo.

Si el parámetro pSink es NULL, el método intenta usar un representador predeterminado. En el caso del vídeo, usa Video Renderer y, para el audio, usa directSound Renderer.

Si pSource es un filtro, el método busca un pin de salida en ese filtro. En ese caso, use los parámetros pCategory y pType para restringir la búsqueda. Por ejemplo, si un filtro tiene patillas independientes para la vista previa y la captura, puede especificar PIN_CATEGORY_CAPTURE o PIN_CATEGORY_PREVIEW. Si pSource es un pin de salida, establezca pCategory y pType en NULL.

En todos los casos, el método busca patillas no conectadas. Si más de un pin cumple los criterios especificados, el método usa el primer pin de este tipo que encuentra.

Tenga en cuenta que para la captura DV, si el tipo de medio es MEDIATYPE_Interleaved y el parámetro pSink es NULL, el método divide la secuencia intercalada en una secuencia de audio y una secuencia de vídeo, y representa ambas secuencias.

El RenderStream método controla muchos de los detalles necesarios para los gráficos de captura:

Tee inteligente. Algunos filtros de captura tienen un pin de captura, pero ningún pin de vista previa. Para obtener una vista previa, el pin de captura debe estar conectado al filtro Smart Tee. Este filtro divide los datos en dos flujos, una secuencia de captura y una secuencia de vista previa. Al especificar PIN_CATEGORY_PREVIEW o PIN_CATEGORY_CAPTURE, el método inserta un filtro Smart Tee si es necesario. A continuación, representa la secuencia especificada en el filtro Smart Tee. Si representa una secuencia de vista previa y el método usa un filtro Smart Tee, devuelve VFW_S_NOPREVIEWPIN.

Subtítulos. Puede usar este método para capturar o obtener una vista previa de subtítulos. Algunos filtros de captura entregan datos de Intervalo de en blanco vertical (VBI), otros entregan datos de subtítulos. Para controlar cualquiera de los casos, llame al método dos veces, una vez mediante PIN_CATEGORY_VBI y una vez mediante PIN_CATEGORY_CC. El método inserta los filtros necesarios para convertir los datos de VBI en subtítulos. Para obtener una vista previa de los datos, establezca el parámetro pSink en NULL. Para capturar los datos en un archivo, use el puntero de interfaz IBaseFilter del filtro multiplexador. Puede capturar y obtener una vista previa de los datos en el mismo gráfico. Llame al método una vez mediante NULL y otra vez mediante el multiplexador. Establezca el parámetro pIntermediate en NULL.

Patillas de puerto de vídeo. Los filtros que funcionan con el hardware de captura de vídeo de extensión de puerto de vídeo (VPE) pueden tener patillas de puerto de vídeo (PIN_CATEGORY_VIDEOPORT) en lugar de patillas de vista previa. Para que la vista previa o la captura funcionen, un pin de puerto de vídeo debe conectarse al filtro mezclador de superposición. El método controla este detalle. No es necesario especificar PIN_CATEGORY_VIDEOPORT. Especifique PIN_CATEGORY_PREVIEW o PIN_CATEGORY_CAPTURE, y el método conectará el pin correctamente. De forma similar, algunos filtros entregan datos de VBI mediante patillas de puerto de vídeo (PIN_CATEGORY_VIDEOPORT_VBI). Al igual que con PIN_CATEGORY_VIDEOPORT, el método controla este detalle. No es necesario especificar PIN_CATEGORY_VIDEOPORT_VBI.

Filtros auxiliares. Si un dispositivo de captura usa un controlador de Modelo de controlador de Windows (WDM), el gráfico puede requerir ciertos filtros ascendentes del filtro de captura de vídeo WDM, como un filtro de tuner de TV o un filtro de barra cruzada de vídeo analógico. Si este método representa correctamente la secuencia, también inserta los filtros WDM necesarios en el grafo. El método consulta las patillas de entrada en el filtro de captura para determinar qué medios admiten y los conecta a filtros coincidentes.

Código de ejemplo

Para un gráfico de captura típico, conecte la patilla de vista previa al representador predeterminado, sin ningún filtro intermedio:
C++
// Video: 
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCaptureFilter, NULL, NULL); 
// Audio:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, 
    pCaptureFilter, NULL, NULL); 
Conecte el pin de captura a un filtro mux o filtro de escritor de archivos, en función del tipo de archivo que desee generar. En el caso de los archivos AVI, use el filtro Mux avi. Para los archivos ASF, use el filtro WM ASF Writer . Normalmente, obtendrá un puntero a este filtro desde el parámetro ppf del método ICaptureGraphBuilder2::SetOutputFileName .
C++
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", 
    &ppf, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
    pCaptureFilter, NULL, ppf);

Orígenes de archivos

Puede usar este método para transcodificar o volver a comprimir un archivo. En la siguiente explicación se supone que el archivo tiene como máximo una secuencia de vídeo y una secuencia de audio, o bien una única secuencia intercalada. De lo contrario, el método no funcionará correctamente.

Un origen de archivo tiene un pin de salida, por lo que debe establecer pCategory y pType en NULL. Llame al método dos veces: una para representar la secuencia de vídeo y una vez para representar la secuencia de audio. La primera llamada conecta el filtro de origen a un filtro del analizador y representa uno de los pines de salida del filtro del analizador. La segunda llamada representa el pin de salida restante del analizador. Si está comprimiendo una secuencia pero no la otra, asegúrese de especificar el filtro del compresor en la primera llamada. El método seleccionará automáticamente la secuencia correcta en función del tipo de compresión.

C++
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux);
pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux);
Para obtener un ejemplo completo, vea Volver a comprimir un archivo AVI.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado strmif.h (incluye Dshow.h)
Library Strmiids.lib

Consulte también

Creación de gráficos con Capture Graph Builder

Códigos de error y éxito

ICaptureGraphBuilder2 (Interfaz)

Captura de vídeo