Compartir a través de


Configuración del objeto Splitter de ASF

El objeto divisor ASF es un objeto de capa WMContainer que analiza el objeto de datos ASF de un archivo de formato de sistemas avanzados (ASF). Después de crear e inicializar el divisor para analizar el objeto de datos ASF de un archivo multimedia, el divisor debe configurarse para generar muestras para secuencias específicas. Llame a IMFASFSplitter::SelectStreams para seleccionar las secuencias necesarias.

Opcionalmente, una aplicación también puede configurarla para generar muestras en orden inverso o generar muestras para el contenido protegido. Para establecer estas opciones, llame a IMFASFSplitter::SetFlags y pase la combinación bit a bit necesaria de las marcas admitidas. Antes de llamar a este método, el cliente debe completar correctamente la llamada IMFASFSplitter::Initialize ; De lo contrario, SetFlags produce un error MF_E_NOT_INITIALIZED código de error. Para obtener información sobre cómo inicializar el divisor, vea Creating the ASF Splitter Object.

Para comprobar si esta marca está establecida actualmente en el divisor, llame a IMFASFSplitter::GetFlags.

Selección de secuencias para analizar

Durante el proceso de inicialización a través de la llamada IMFASFSplitter::Initialize , el divisor detecta el número de secuencias y los identificadores de flujo en el archivo ASF. De forma predeterminada, el divisor no selecciona ningún flujo. La aplicación debe seleccionar las secuencias llamando a IMFASFSplitter::SelectStreams. Este método toma una matriz de números de secuencia. Para obtener el número de secuencia de una secuencia, llame a IMFASFProfile::GetStream en el perfil de ASF o llame a IMFStreamDescriptor::GetStreamIdentifier en el descriptor de secuencia. (Puede obtener tanto el perfil de ASF como el descriptor de secuencia del objeto ContentInfo). Si el cliente pasa un número de secuencia que no reconoce el divisor, se produce un error de MF_E_INVALIDSTREAMNUMBER .

Al llamar a SelectStreams , se borran las selecciones anteriores. No se selecciona ninguna secuencia que no se especifique en la matriz. Para obtener una lista de secuencias seleccionadas actualmente, llame a IMFASFSplitter::GetSelectedStreams. Este método toma un puntero a una matriz, que el método rellena con los números de secuencia. Si el tamaño de la matriz es menor que el número de secuencias seleccionadas, el método produce el error MF_E_BUFFERTOOSMALL . En este caso, el método devuelve el número de secuencias seleccionadas en el parámetro pwNumStreams . A continuación, puede usar este número para asignar una matriz del tamaño correcto y volver a llamar al método.

Para obtener código de ejemplo, vea "Seleccionar una secuencia para analizar" en Tutorial: Lectura de un archivo ASF.

Configuración de reproducción inversa

Durante el proceso de inicialización del divisor, determina si el contenido de ASF admite la reproducción inversa. Si es así, el divisor se puede configurar para generar muestras en orden inverso estableciendo la marca MFASF_SPLITTER_REVERSE . Si el contenido no admite la reproducción inversa, imfASFSplitter::SetFlags devuelve MF_E_INVALIDREQUEST, pero la marca se establece en el divisor.

Si el divisor está configurado para analizar en la dirección inversa, el divisor siempre comienza a analizar al final del búfer que contiene el objeto de datos ASF. Por lo tanto, para analizar inverso el desplazamiento de datos y la longitud de los datos que se van a analizar debe establecerse correctamente. Para obtener información sobre cómo establecer los valores correctos, vea Generar muestras de flujo a partir de un objeto de datos ASF existente.

Configuración de contenido protegido

El divisor se puede configurar para que funcione con contenido de cifrado de nivel de paquete estableciendo el MFASF_SPLITTER_WMDRM a través de IMFASFSplitter::SetFlags. Esto indica al divisor que entregue ejemplos de contenido protegido por Windows Media Digital Rights Management (DRM). Cuando se establece esta marca, los ejemplos generados por el divisor contienen información necesaria para descifrar los datos multimedia y reconstruir los fotogramas, como el atributo MFSampleExtension_PacketCrossOffsets . Este atributo es un blob que contiene una matriz de DWORDs. Cada DWORD proporciona los límites de carga del marco con respecto al principio del marco. Si este atributo no está presente, el marco se encuentra en una sola carga. Normalmente, las muestras generadas por el divisor contienen varios búferes multimedia, la aplicación puede copiar todos los búferes en un búfer contiguo llamando a IMFSample::ConvertToContiguousBuffer. El búfer resultante contiene el marco y el valor del atributo contiene desplazamientos en este búfer.

Divisor de ASF