IMFPMediaItem::SetStartStopPosition 方法 (mfplay.h)

重要 废弃。 此 API 可能会从 Windows 的未来版本中删除。 应用程序应使用 媒体会话 进行播放。
 

设置媒体项的开始和停止时间。

语法

HRESULT SetStartStopPosition(
  [in] const GUID        *pguidStartPositionType,
  [in] const PROPVARIANT *pvStartValue,
  [in] const GUID        *pguidStopPositionType,
  [in] const PROPVARIANT *pvStopValue
);

参数

[in] pguidStartPositionType

开始位置的时间单位。 请参阅“备注”。 此参数可以为 NULL。

[in] pvStartValue

开始位置。 此参数的含义和数据类型由 pguidStartPositionType 参数指示。 如果 pguidStartPositionTypeNULL,pvStartValue 参数必须为 NULL,否则不能为 NULL

[in] pguidStopPositionType

停止位置的时间单位。 请参阅“备注”。 此参数可以为 NULL。

[in] pvStopValue

停止位置。 此参数的含义和数据类型由 pguidStopPositionType 参数指示。 如果 pguidStopPositionTypeNULL则 pvStopValue 参数必须为 NULL,否则不能为 NULL

返回值

该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

返回代码 说明
S_OK
方法成功。
E_INVALIDARG
无效的参数。
MF_E_OUT_OF_RANGE
启动或停止时间无效。 以下任一项都可能导致此错误:
  • 时间小于零。
  • 大于媒体项总持续时间的时间。
  • 停止时间小于开始时间。

注解

默认情况下,媒体项从文件的开头到结尾播放。 此方法调整开始时间和/或停止时间:

  • 若要设置开始时间,请为 pguidStartPositionTypepvStartValue 传递非 NULL 值。
  • 若要设置停止时间,请为 pguidStopPositionTypepvStopValue 传递非 NULL 值。
pguidStartPositionTypepguidStopPositionType 参数提供使用的时间单位。 目前,唯一支持的值是 MFP_POSITIONTYPE_100NS
说明
MFP_POSITIONTYPE_100NS 100 纳秒单位。 pvStartValuepvStopValue) (time 参数使用以下数据类型:
  • 变量类型 (vt) : VT_I8
  • Variant 成员: hVal
若要清除以前设置的时间,请使用空的 PROPVARIANT (VT_EMPTY) 。
 

下次使用此媒体项调用 IMFPMediaPlayer::SetMediaItem 时,将使用调整后的开始和停止时间。 如果已在播放器上设置了媒体项,则除非再次调用 SetMediaItem ,否则不会发生更改。

示例

HRESULT PlayMediaClip(
    IMFPMediaPlayer *pPlayer,
    PCWSTR pszURL,
    LONGLONG    hnsStart,
    LONGLONG    hnsEnd
    )
{
    IMFPMediaItem *pItem = NULL;
    PROPVARIANT varStart, varEnd;

    ULONGLONG hnsDuration = 0;

    HRESULT hr = pPlayer->CreateMediaItemFromURL(pszURL, TRUE, 0, &pItem);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = GetPlaybackDuration(pItem, &hnsDuration);
    if (FAILED(hr))
    {
        goto done;
    }

    if ((ULONGLONG)hnsEnd > hnsDuration)
    {
        hnsEnd = hnsDuration;
    }

    hr = InitPropVariantFromInt64(hnsStart, &varStart);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = InitPropVariantFromInt64(hnsEnd, &varEnd);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pItem->SetStartStopPosition(
        &MFP_POSITIONTYPE_100NS,
        &varStart,
        &MFP_POSITIONTYPE_100NS,
        &varEnd
        );
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pPlayer->SetMediaItem(pItem);

done:
    SafeRelease(&pItem);
    return hr;
}

要求

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

另请参阅

如何播放文件剪辑

IMFPMediaItem

使用 MFPlay 进行音频/视频播放