MFCreateASFStreamingMediaSinkActivate
関数シグネチャ
// MF.dll
#include <windows.h>
HRESULT MFCreateASFStreamingMediaSinkActivate(
IMFActivate* pByteStreamActivate,
IMFASFContentInfo* pContentInfo,
IMFActivate** ppIActivate
);パラメーター
| 名前 | 型 | 方向 | 説明 |
|---|---|---|---|
| pByteStreamActivate | IMFActivate* | in | アクティベーション オブジェクトの IMFActivate インターフェイスへのポインター。このインターフェイスは呼び出し元が実装します。このアクティベーション オブジェクトの IMFActivate::ActivateObject メソッドは、バイト ストリーム オブジェクトを作成する必要があります。このバイト ストリームは IMFByteStream インターフェイスを公開します。ASF ストリーミング シンクはこのバイト ストリームにデータを書き込みます。 |
| pContentInfo | IMFASFContentInfo* | in | ASF コンテンツを記述するプロパティを格納する ASF ContentInfo Object へのポインター。これらの設定には、ストリーム設定、エンコード プロパティ、メタデータを含めることができます。これらのプロパティの詳細については、Setting Properties in the ContentInfo Object を参照してください。 |
| ppIActivate | IMFActivate** | out | ASF ストリーミング メディア シンクの作成に使用されるアクティベーション オブジェクトの IMFActivate インターフェイスへのポインターを受け取ります。メディア シンクを作成するには、アプリケーションは受け取ったポインターを使用して IMFActivate::ActivateObject を呼び出す必要があります。ActivateObject メソッドは、pByteStreamActivate で指定されたバイト ストリーム アクティベーション オブジェクトに対しても IMFActivate::Activate を呼び出し、これを作成することで、メディア シンクがストリーミング コンテンツをバイト ストリームに書き込めるようにします。呼び出し元は、ppIActivate で受け取ったメディア シンク アクティベーション オブジェクトの IMFActivate インターフェイス ポインターを解放する必要があります。 |
戻り値の型: HRESULT
公式ドキュメント
ASF ストリーミング シンク用のアクティベーション オブジェクトを作成します。(MFCreateASFStreamingMediaSinkActivate)
戻り値
この関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
Windows 7 以降、Media Foundation はライブ ストリーミング シナリオでコンテンツを書き込む ASF ストリーミング シンクを提供します。この関数は、このメディア シンクをリモート プロセスで作成および構成する必要があるセキュア トランスコード シナリオで使用してください。ASF ファイル シンクと同様に、新しいメディア シンクは、ASF ヘッダーの書き込みやデータ パケットの生成 (多重化) などの ASF 関連タスクを実行します。コンテンツは、HTTP バイト ストリームなど、呼び出し元が実装するバイト ストリームに書き込まれます。 呼び出し元は、メディア シンクがバイト ストリームをリモートで作成するために使用できるアクティベーション オブジェクトも提供する必要があります。
さらに、保護されたコンテンツをストリーミングするためのトランスクリプション (transcryption) を実行します。ライセンス要求と応答を処理する、ネットワーク デバイス向け Windows Media Digital Rights Management (DRM) の Output Trust Authority (OTA) をホストします。詳細については、IMFDRMNetHelper インターフェイスを参照してください。
新しいメディア シンクは時刻の調整を一切行いません。クロックがシークしても、タイムスタンプは変更されません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での呼び出し定義
// MF.dll
#include <windows.h>
HRESULT MFCreateASFStreamingMediaSinkActivate(
IMFActivate* pByteStreamActivate,
IMFASFContentInfo* pContentInfo,
IMFActivate** ppIActivate
);[DllImport("MF.dll", ExactSpelling = true)]
static extern int MFCreateASFStreamingMediaSinkActivate(
IntPtr pByteStreamActivate, // IMFActivate*
IntPtr pContentInfo, // IMFASFContentInfo*
IntPtr ppIActivate // IMFActivate** out
);<DllImport("MF.dll", ExactSpelling:=True)>
Public Shared Function MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate As IntPtr, ' IMFActivate*
pContentInfo As IntPtr, ' IMFASFContentInfo*
ppIActivate As IntPtr ' IMFActivate** out
) As Integer
End Function' pByteStreamActivate : IMFActivate*
' pContentInfo : IMFASFContentInfo*
' ppIActivate : IMFActivate** out
Declare PtrSafe Function MFCreateASFStreamingMediaSinkActivate Lib "mf" ( _
ByVal pByteStreamActivate As LongPtr, _
ByVal pContentInfo As LongPtr, _
ByVal ppIActivate As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。import ctypes
from ctypes import wintypes
MFCreateASFStreamingMediaSinkActivate = ctypes.windll.mf.MFCreateASFStreamingMediaSinkActivate
MFCreateASFStreamingMediaSinkActivate.restype = ctypes.c_int
MFCreateASFStreamingMediaSinkActivate.argtypes = [
ctypes.c_void_p, # pByteStreamActivate : IMFActivate*
ctypes.c_void_p, # pContentInfo : IMFASFContentInfo*
ctypes.c_void_p, # ppIActivate : IMFActivate** out
]require 'fiddle'
require 'fiddle/import'
lib = Fiddle.dlopen('MF.dll')
MFCreateASFStreamingMediaSinkActivate = Fiddle::Function.new(
lib['MFCreateASFStreamingMediaSinkActivate'],
[
Fiddle::TYPE_VOIDP, # pByteStreamActivate : IMFActivate*
Fiddle::TYPE_VOIDP, # pContentInfo : IMFASFContentInfo*
Fiddle::TYPE_VOIDP, # ppIActivate : IMFActivate** out
],
Fiddle::TYPE_INT)#[link(name = "mf")]
extern "system" {
fn MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate: *mut core::ffi::c_void, // IMFActivate*
pContentInfo: *mut core::ffi::c_void, // IMFASFContentInfo*
ppIActivate: *mut *mut core::ffi::c_void // IMFActivate** out
) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.$sig = @"
[DllImport("MF.dll")]
public static extern int MFCreateASFStreamingMediaSinkActivate(IntPtr pByteStreamActivate, IntPtr pContentInfo, IntPtr ppIActivate);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MF_MFCreateASFStreamingMediaSinkActivate' -Namespace Win32 -PassThru
# $api::MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)#uselib "MF.dll"
#func global MFCreateASFStreamingMediaSinkActivate "MFCreateASFStreamingMediaSinkActivate" sptr, sptr, sptr
; MFCreateASFStreamingMediaSinkActivate pByteStreamActivate, pContentInfo, ppIActivate ; 戻り値は stat
; pByteStreamActivate : IMFActivate* -> "sptr"
; pContentInfo : IMFASFContentInfo* -> "sptr"
; ppIActivate : IMFActivate** out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。#uselib "MF.dll"
#cfunc global MFCreateASFStreamingMediaSinkActivate "MFCreateASFStreamingMediaSinkActivate" sptr, sptr, sptr
; res = MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
; pByteStreamActivate : IMFActivate* -> "sptr"
; pContentInfo : IMFASFContentInfo* -> "sptr"
; ppIActivate : IMFActivate** out -> "sptr"; HRESULT MFCreateASFStreamingMediaSinkActivate(IMFActivate* pByteStreamActivate, IMFASFContentInfo* pContentInfo, IMFActivate** ppIActivate)
#uselib "MF.dll"
#cfunc global MFCreateASFStreamingMediaSinkActivate "MFCreateASFStreamingMediaSinkActivate" intptr, intptr, intptr
; res = MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
; pByteStreamActivate : IMFActivate* -> "intptr"
; pContentInfo : IMFASFContentInfo* -> "intptr"
; ppIActivate : IMFActivate** out -> "intptr"import (
"golang.org/x/sys/windows"
"unsafe"
)
var (
mf = windows.NewLazySystemDLL("MF.dll")
procMFCreateASFStreamingMediaSinkActivate = mf.NewProc("MFCreateASFStreamingMediaSinkActivate")
)
// pByteStreamActivate (IMFActivate*), pContentInfo (IMFASFContentInfo*), ppIActivate (IMFActivate** out)
r1, _, err := procMFCreateASFStreamingMediaSinkActivate.Call(
uintptr(pByteStreamActivate),
uintptr(pContentInfo),
uintptr(ppIActivate),
)
_ = err // syscall.Errno (valid when the call sets last-error)
_ = r1 // HRESULTfunction MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate: Pointer; // IMFActivate*
pContentInfo: Pointer; // IMFASFContentInfo*
ppIActivate: Pointer // IMFActivate** out
): Integer; stdcall;
external 'MF.dll' name 'MFCreateASFStreamingMediaSinkActivate';result := DllCall("MF\MFCreateASFStreamingMediaSinkActivate"
, "Ptr", pByteStreamActivate ; IMFActivate*
, "Ptr", pContentInfo ; IMFASFContentInfo*
, "Ptr", ppIActivate ; IMFActivate** out
, "Int") ; return: HRESULT●MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate) = DLL("MF.dll", "int MFCreateASFStreamingMediaSinkActivate(void*, void*, void*)")
# 呼び出し: MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
# pByteStreamActivate : IMFActivate* -> "void*"
# pContentInfo : IMFASFContentInfo* -> "void*"
# ppIActivate : IMFActivate** out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。const std = @import("std");
extern "mf" fn MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate: ?*anyopaque, // IMFActivate*
pContentInfo: ?*anyopaque, // IMFASFContentInfo*
ppIActivate: ?*anyopaque // IMFActivate** out
) callconv(std.os.windows.WINAPI) i32;proc MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate: pointer, # IMFActivate*
pContentInfo: pointer, # IMFASFContentInfo*
ppIActivate: pointer # IMFActivate** out
): int32 {.importc: "MFCreateASFStreamingMediaSinkActivate", stdcall, dynlib: "MF.dll".}pragma(lib, "mf");
extern(Windows)
int MFCreateASFStreamingMediaSinkActivate(
void* pByteStreamActivate, // IMFActivate*
void* pContentInfo, // IMFASFContentInfo*
void* ppIActivate // IMFActivate** out
);ccall((:MFCreateASFStreamingMediaSinkActivate, "MF.dll"), stdcall, Int32,
(Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}),
pByteStreamActivate, pContentInfo, ppIActivate)
# pByteStreamActivate : IMFActivate* -> Ptr{Cvoid}
# pContentInfo : IMFASFContentInfo* -> Ptr{Cvoid}
# ppIActivate : IMFActivate** out -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。local ffi = require("ffi")
ffi.cdef[[
int32_t MFCreateASFStreamingMediaSinkActivate(
void* pByteStreamActivate,
void* pContentInfo,
void* ppIActivate);
]]
local mf = ffi.load("mf")
-- mf.MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
-- pByteStreamActivate : IMFActivate*
-- pContentInfo : IMFASFContentInfo*
-- ppIActivate : IMFActivate** out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。const koffi = require('koffi');
const lib = koffi.load('MF.dll');
const MFCreateASFStreamingMediaSinkActivate = lib.func('__stdcall', 'MFCreateASFStreamingMediaSinkActivate', 'int32_t', ['void *', 'void *', 'void *']);
// MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
// pByteStreamActivate : IMFActivate* -> 'void *'
// pContentInfo : IMFASFContentInfo* -> 'void *'
// ppIActivate : IMFActivate** out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。const lib = Deno.dlopen("MF.dll", {
MFCreateASFStreamingMediaSinkActivate: { parameters: ["pointer", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate)
// pByteStreamActivate : IMFActivate* -> "pointer"
// pContentInfo : IMFASFContentInfo* -> "pointer"
// ppIActivate : IMFActivate** out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。<?php
$ffi = FFI::cdef(<<<C
int32_t MFCreateASFStreamingMediaSinkActivate(
void* pByteStreamActivate,
void* pContentInfo,
void* ppIActivate);
C, "MF.dll");
// $ffi->MFCreateASFStreamingMediaSinkActivate(pByteStreamActivate, pContentInfo, ppIActivate);
// pByteStreamActivate : IMFActivate*
// pContentInfo : IMFASFContentInfo*
// ppIActivate : IMFActivate** out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Mf extends StdCallLibrary {
Mf INSTANCE = Native.load("mf", Mf.class);
int MFCreateASFStreamingMediaSinkActivate(
Pointer pByteStreamActivate, // IMFActivate*
Pointer pContentInfo, // IMFASFContentInfo*
Pointer ppIActivate // IMFActivate** out
);
}@[Link("mf")]
lib LibMF
fun MFCreateASFStreamingMediaSinkActivate = MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate : Void*, # IMFActivate*
pContentInfo : Void*, # IMFASFContentInfo*
ppIActivate : Void* # IMFActivate** out
) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef MFCreateASFStreamingMediaSinkActivateNative = Int32 Function(Pointer<Void>, Pointer<Void>, Pointer<Void>);
typedef MFCreateASFStreamingMediaSinkActivateDart = int Function(Pointer<Void>, Pointer<Void>, Pointer<Void>);
final MFCreateASFStreamingMediaSinkActivate = DynamicLibrary.open('MF.dll')
.lookupFunction<MFCreateASFStreamingMediaSinkActivateNative, MFCreateASFStreamingMediaSinkActivateDart>('MFCreateASFStreamingMediaSinkActivate');
// pByteStreamActivate : IMFActivate* -> Pointer<Void>
// pContentInfo : IMFASFContentInfo* -> Pointer<Void>
// ppIActivate : IMFActivate** out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。{$mode objfpc}{$H+}
function MFCreateASFStreamingMediaSinkActivate(
pByteStreamActivate: Pointer; // IMFActivate*
pContentInfo: Pointer; // IMFASFContentInfo*
ppIActivate: Pointer // IMFActivate** out
): Integer; stdcall;
external 'MF.dll' name 'MFCreateASFStreamingMediaSinkActivate';import Foreign
import Foreign.C.Types
import Foreign.C.String
foreign import stdcall safe "MFCreateASFStreamingMediaSinkActivate"
c_MFCreateASFStreamingMediaSinkActivate :: Ptr () -> Ptr () -> Ptr () -> IO Int32
-- pByteStreamActivate : IMFActivate* -> Ptr ()
-- pContentInfo : IMFASFContentInfo* -> Ptr ()
-- ppIActivate : IMFActivate** out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。open Ctypes
open Foreign
let mfcreateasfstreamingmediasinkactivate =
foreign "MFCreateASFStreamingMediaSinkActivate"
((ptr void) @-> (ptr void) @-> (ptr void) @-> returning int32_t)
(* pByteStreamActivate : IMFActivate* -> (ptr void) *)
(* pContentInfo : IMFASFContentInfo* -> (ptr void) *)
(* ppIActivate : IMFActivate** out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)(cffi:define-foreign-library mf (t "MF.dll"))
(cffi:use-foreign-library mf)
(cffi:defcfun ("MFCreateASFStreamingMediaSinkActivate" mfcreate-asfstreaming-media-sink-activate :convention :stdcall) :int32
(p-byte-stream-activate :pointer) ; IMFActivate*
(p-content-info :pointer) ; IMFASFContentInfo*
(pp-iactivate :pointer)) ; IMFActivate** out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。use Win32::API;
my $MFCreateASFStreamingMediaSinkActivate = Win32::API::More->new('MF',
'int MFCreateASFStreamingMediaSinkActivate(LPVOID pByteStreamActivate, LPVOID pContentInfo, LPVOID ppIActivate)');
# my $ret = $MFCreateASFStreamingMediaSinkActivate->Call($pByteStreamActivate, $pContentInfo, $ppIActivate);
# pByteStreamActivate : IMFActivate* -> LPVOID
# pContentInfo : IMFASFContentInfo* -> LPVOID
# ppIActivate : IMFActivate** out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。関連項目
- f MFCreateASFStreamingMediaSink — ネットワーク配信用のASFストリーミングメディアシンクを生成する。