IMFTranscodeSinkInfoProvider 接口 (mfidl.h)

由转码接收器激活对象实现。

转码接收器激活对象可用于创建以下任何文件接收器:

  • 3GP 文件接收器
  • MP3 文件接收器
  • MP4 文件接收器

继承

IMFTranscodeSinkInfoProvider 接口继承自 IUnknown 接口。 IMFTranscodeSinkInfoProvider 也具有以下类型的成员:

方法

IMFTranscodeSinkInfoProvider 接口具有这些方法。

 
IMFTranscodeSinkInfoProvider::GetSinkInfo

获取转码配置文件中指定的音频和视频流的媒体类型。
IMFTranscodeSinkInfoProvider::SetOutputByteStream

设置转码媒体接收器的输出字节流。
IMFTranscodeSinkInfoProvider::SetOutputFile

设置编码的输出文件的名称。
IMFTranscodeSinkInfoProvider::SetProfile

设置转码接收器激活对象上的转码配置文件。

注解

若要使用此接口,请执行以下步骤:

  1. 调用 MFCreateTranscodeSinkActivate 以创建转码接收器激活对象。
  2. 查询 IMFTranscodeSinkInfoProvider 接口的激活对象。
  3. 调用 MFCreateTranscodeProfile 以创建转码配置文件。
  4. 在转码配置文件上设置 MF_TRANSCODE_CONTAINERTYPE 属性。 属性必须具有以下值之一:
    • MFTranscodeContainerType_3GP
    • MFTranscodeContainerType_MP3
    • MFTranscodeContainerType_MPEG4
  5. 调用 IMFTranscodeProfile::SetVideoAttributesIMFTranscodeProfile::SetAudioAttributes 以指定视频和音频格式。
  6. 调用 IMFTranscodeSinkInfoProvider::SetProfile 以设置转码配置文件。
  7. (调用以下方法之一,但不能同时) 指定输出文件:
  8. 对激活对象调用 IMFActivate::ActivateObject 以创建媒体接收器。

示例

// Creates an activation object for the generic transcode sink.

HRESULT CreateTranscodeSinkActivate(
    REFGUID         guidContainerType,
    IMFAttributes   *pVideoAttributes,
    IMFAttributes   *pAudioAttributes,
    IMFActivate     *pByteStreamActivate, 
    IMFActivate     **ppSinkActivate
    )
{
    IMFActivate* pSinkActivate = NULL;
    IMFTranscodeSinkInfoProvider* pSinkInfoProvider = NULL;
    IMFTranscodeProfile* pProfile = NULL;
    IMFAttributes* pContainerAttributes = NULL;

    HRESULT hr = MFCreateAttributes(&pContainerAttributes, 1);
    if (FAILED(hr))
    {
        goto done;
    }

    // Create the transcode profile.
    hr = MFCreateTranscodeProfile(&pProfile);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the profile attributes.

    hr = pContainerAttributes->SetGUID(MF_TRANSCODE_CONTAINERTYPE, guidContainerType);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pProfile->SetContainerAttributes(pContainerAttributes);
    if (FAILED(hr))
    {
        goto done;
    }

    if (pVideoAttributes)
    {
        hr = pProfile->SetVideoAttributes(pVideoAttributes);
        if (FAILED(hr))
        {
            goto done;
        }
    }

    if (pAudioAttributes)
    {
        hr = pProfile->SetAudioAttributes(pAudioAttributes);
        if (FAILED(hr))
        {
            goto done;
        }
    }

    // Create the transcode sink activation object.
    hr = MFCreateTranscodeSinkActivate(&pSinkActivate);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pSinkActivate->QueryInterface(IID_PPV_ARGS(&pSinkInfoProvider));
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the output byte stream.
    hr = pSinkInfoProvider->SetOutputByteStream(pByteStreamActivate);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the transcode profile.
    hr = pSinkInfoProvider->SetProfile(pProfile);
    if (FAILED(hr))
    {
        goto done;
    }

    // Return the activation object to the caller.
    *ppSinkActivate = pSinkActivate;
    (*ppSinkActivate)->AddRef();

done:
    SafeRelease(&pProfile);
    SafeRelease(&pSinkInfoProvider);
    SafeRelease(&pSinkActivate);
    SafeRelease(&pContainerAttributes);
    return hr;
}

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 mfidl.h

另请参阅

MFCreateTranscodeSinkActivate

媒体基础接口