WindowsMediaSDK介绍 - 爱东东

时间:2024-02-19 14:38:09

WindowsMediaSDK介绍

一 Windows Media SDK

  Microsoft Windows Media技术是通过公司intranets与Internet流式传输多媒体内容的强大方案,该平台支持网址和网页开发,以连续数据流传输音频、视频和脚本命令。流式传输多媒体能力让用户通过网络边下载边播放内容,减少等待时间和对用户计算机的存储要求。同时使不限长度的演示(如现场直播)成为可能。
   Windows Media 技术支持各种网络和协议。媒体格式说明安排、组织同步多媒体数据的传输文件格式,并为通过网络传输及在客户机上播放作了优化。媒体格式不仅为记录文件指定了格式,也为现场直播指定了格式。 运行Microsoft? Windows Media? 服务的服务器支持单播和组播。Microsoft? Windows Media?软件开发包(SDK)中有六个主要组件,如表 所示:
   表 Windows Media SDK中主要组件

Windows Media Services SDK
管理单播和组播服务

Windows Media Encoder SDK
支持设置和控制 Windows Media编码器的自动化接口

Windows Media Player SDK
支持indows Media&Player ActiveX控件,可向基于COM的文档(网页)提供多媒体能力

Windows Media Metafiles
支持创建元文件播放列表,包括广告插播,banner 和流的无缝切换

Windows Media Format SDK
支持对Windows Media文件的读、写和编辑

Windows Media Rights Manager SDK
支持保护Windows Media文


二 Windows Media 服务SDK
   Microsoft Windows Media 服务(SDK)包括一系列广泛的技术,某些部分满足网站开发需要,其它部分针对Internet服务提供商 (ISVs)。Windows Media 服务SDK包括组件如下。
   Windows Media Unicast控件 :
   一套Microsoft ActiveX控件,控制设置、监控和管理Windows Media单播服务属性。
   Windows Media Station控件:
      控制设置、监控和管理Windows Media组播服务属性。
   Windows Media 服务授权API:
      COM兼容API ,用来开发给用户授权的程序包。
   Windows Media 服务事件通知和授权API:
      COM兼容API,用来开发给服务器授权的程序包。
   Windows Media 服务文件传输控件:
      一个ActiveX 控件,用来接收组播文件传输。

2.1 Windows Media单播控件
   Windows Media 单播服务包含在Nsunimgr.ocx 文件中,包括两个控件: Windows Media 单播管理(Admin)和Windows Media单播跟踪(TraceView)。前者用来设置和管理服务器,后者用于监控服务器事件。要使用Windows Media单播服务控件,计算机上必须注册Nsunimgr.ocx 和Nsoobj.dll文件。
   Admin 控件是一个ActiveX 控件,用于管理Windows Media服务器单播。除暴露属性、方法和事件外,它也管理一组提供不同服务的对象。例如, Client 对象表示连接到服务器的客户,而Clients对象表示客户对象的集合。Admin 控件功能如下:
   设置与查询服务器属性,如最大集合带宽和连接用户最大数目。
   监控客户活动,包括连接、断开与播放剪辑标题。
   监控整个系统活动,包括服务器状态、管理功能和服务器限制。
过滤控件接收的事件类型。
   Admin 控件暴露的属性是运行时属性,即在设计应用时不可用。直到Connect方法成功完成才可设置或返回属性值。
   TraceView为监控Windows Media服务的单播活动提供了一个易于使用的接口。 它的图形用户界面用来显示运行Windows Media服务所激活的事件列表,包括事件描述、事件所触发的日期与时间。
   SDK安装程序安装并注册Windows Media 单播控件及相关文件。如同其它ActiveX控件,你可在HTML页面、VB与VC++应用程序中直接使用此控件。使用TraceView控件可执行下列功能:
      暂停并恢复事件监控。
      清除事件日志显示。
   选择监控的事件类型,包括Server, Client, Admin, 和Alert 事件。
   要激活嵌入在应用程序中的TraceView 控件,必须调用其 SetServer 方法进行初始化。它将TraceView 控件连接到服务器,使其可开始接收事件并显示出来。
2.2 Windows Media Station控件
   Windows Media Station控件是一个ActiveX? 控件,允许管理员设置广播组播站、启动或停止流。Station 控件可执行下列任务:
      创建、删除和管理站。
      创建、删除和管理流。
      Creating, deleting, and managing 创建、删除和管理客户端。
      创建、删除和管理主机地址
      创建、删除和管理站Windows Media Station 控件对象。
   站为流定义发送机制。例如,站包含站名称、目标的组播地址、站格式等等。站本身并不包含媒体内容,而是描述内容如何发送。每个站可连接一个或多个客户,客户可以是Windows Media? Encoder或另外Windows Media Station 控制,也可以是通过媒体流广播发布(MSBD)协议连接到服务器的Windows Media? Player事例。站与主机地址相关,服务器网卡使用该地址广播内容。Windows Media Station控制对象管理下列对象:
   Channels 集合对象,包含很多Channel 对象。
   Channel 对象,管理ChannelFormats 管理对象。
   ChannelFormats集合对象,包括很多ChannelFormat 对象。
   ChannelFormat对象,管理StreamDescriptors集合对象。
   StreamDescriptors集合对象,包含很多StreamDescriptor 对象。
   StreamDescriptor对象,描述流特征。
   Streams集合对象,包含很多Stream对象。
   Stream对象, 定义媒体流内容。
   Clients集合对象, 包含很多 Client对象。
   Client对象,定义管理员用户。
   HostAddresses集合对象,包含很多Address 对象。
   Address 对象,定义组播地址。
   要使用Windows Media Station 控件(Nschmgr.ocx),必须安装Windows Media 服务,或将Nschmgr.ocx控件拷贝到计算机并以RegSvr32 应用程序注册。
创建点播组播

2.3 Windows Media服务认证API
  Windows Media服务认证API设计用来提供创建用户认证插件组件。用户向拥有认证特征的服务器发出请求时,服务器验证用户身份。基于各种认证协议,一般检验用户的用户名和密码。Windows Media服务认证者是基于COM的对象。每个认证者实现一种认证。尽管在一个系统中可注册多个认证者,但在某时刻只能使用一个认证者。
  Windows Media 服务要求 COM 组件支持多线程(COINIT_MULTITHREADED)模型,当创建认证组件时,必须避免使用单线程(COINIT_APARTMENTHREADED) 模型。前者提供较好性能和灵活性,但并发模型缺乏线程安全特征。
  认证类型描述用来交换认证信息的安全协议。不同认证者可有同样的类型,但根据不同数据库验证用户。因此类型仅描述信息如何交换,而不是处理信息如何验证。 Windows Media服务器与Media? 播放器支持两种内建的认证协议:
  HTTP-BASIC
  Microsoft Windows NT LAN 管理器(NTLM)
  HTTP-BASIC以文本格式交换信息,包括用户名和密码。该协议是Internet应用的理想协议。对NTLM认证,服务器使用加密的请求/响应方案给用户认证,更适用于intranet应用。
下面简要描述认证API的使用:
1、初始化
  首先,服务器查询系统注册表寻找认证插件组件,如返回成功信息,服务器检索插件组件类标识 (CLSID) 并事例化该插件对象。然后,服务器初始化此事例对象。上下文内容包括描述服务器某些特征的属性,如:
  服务器名和别名。
  服务器版本号。
  Initialize方法为认证者执行预备认证任务提供机会,如建立用户帐户连接、给认证者分配系统资源。
2、获得认证类型
  初始化认证插件对象后,服务器调用GetAuthenticationType 方法检索认证类型。播放器必须能识别此类型,目前Windows Media播放器仅支持HTTP-BASIC和NTLM 两种类型。
3、用户认证对象
  认证对象由认证者对象管理,它实现INSSAuthenticator 接口。在用户每次连接时,检验并验证用户信息。用户每次连接到服务器时创建不同的认证对象。服务器调用CreateUserAuthentication 方法创建用户认证对象。
4、认证运行方式
  用户每次请求打开标题,服务器就通知Windows Media 播放器需要用户认证。服务器向用户请求用户名和密码等数据,并将数据传输到认证者检验。认证者使用服务器传进验证信息与对应用户数据库比较,通知服务器验证结束或需要进一步交流。Windows Media 播放器提示用户输入用户名与密码验证信息,并将其发送到服务器。服务器又将信息传递给认证者检验,认证者根据数据库中用户信息进行检验,并将结果通知服务器。根据结果,服务器允许或拒绝用户访问内容。
5、认证后
  确定用户身份后,服务器将此指针拷贝到用户上下文的NSS_USER_AUTHENTICATION 属性。认证结果与用户名可通过INSSUserAuthentication接口检索。
6、注册认证者
  安装Windows Media 服务组件时,在计算机注册表中加入类似如下的键值:
  [HKEY_LOCAL_MACHINE\Software\Microsoft\NetShow\Servers\
    \Default\Authentication]
    [HKEY_LOCAL_MACHINE\Software\Microsoft\NetShow\Servers\
        \Default\Authentication\Sample Authentication Module]
          "CLSID"="{16DA4310-2955-11D1-9E98-006097D2D7CF}"
          "Description"="Sample Authentication module"
          "Author"="Developer Name"
          "Copyright"="? Developer 1998"
          "Enabled"=dword:00000001

第三节 Windows Media编码器SDK
   Windows Media? Encoder主要用于将媒体内容编码成Windows Media? 格式流或文件。媒体格式流或文件包含音频、视频或脚本数据。媒体编码器以Idispatch接口暴露方法和属性。
   首先,必须为媒体编码器指定GUID:
   static const GUID CLSID_IAsfRTEncoder =
{ 0x7DEBA670, 0x68AB, 0x11D0, { 0x98, 0xEB, 0x00, 0xaa, 0x00, 0xbb, 0xb5, 0x2c } };
   接着用函数ConnectToEnc尝试连接到媒体编码器的一个事例,如连接成功,函数返回一个有效指针pIRexUnknown,该指针指向IUknown 接口。然后使用QueryInterface 获得 IDispatch 接口:
   STDMETHODIMP CMyClass::ConnectToEnc(IDispatch **pIDispatch)
   {
      HRESULT hr;
      IUnknown *pIRexUnknown = NULL;

      if (NULL == pIDispatch)
         return E_INVALIDARG;

      hr = GetActiveObject(CLSID_IAsfRTEncoder, NULL, &pIRexUnknown);

      if (SUCCEEDED(hr))
 hr = pIRexUnknown->QueryInterface(IID_IDispatch, (LPVOID *)pIDispatch);

      if (pIRexUnknown)
         pIRexUnknown->Release();

      return hr;
      }
   StartNewEnc 函数使用CoCreateInstance 函数创建一个新媒体编码器事例:
   STDMETHODIMP CMyClass::StartNewEnc(IDispatch **pIDispatch)
   {
      HRESULT hr;
      IUnknown *pIRexUnknown = NULL;

      if (NULL == pIDispatch)
      return E_INVALIDARG;

      hr = CoCreateInstance(CLSID_IAsfRTEncoder,
      NULL,
      CLSCTX_SERVER,
      IID_IDispatch,
      (LPVOID *)pIDispatch);

      return hr;
   }
   一旦媒体编码器被安装,就可使用pIDispatch指针激发编码器方法并操纵其属性。现在可开始编码工作:
   Dim Encoder As Object
   Set Encoder = CreateObject("ASF.RealTimeEncoder")
   Encoder.LoadASD("c:\SampleConfig.asd")
   Encoder.Start
   停止编码方法如下:
   Encoder.Stop
   Set Encoder = Nothing
   将内容记录到.asf文件的代码如下:
   Encoder.RecordMaxSize = 5000 \' 5 MB file maximum size
   Encoder.RecordFileName = "c:\Sample.asf"
   Encoder.RecordStart
   停止记录使用如下方法:
   Encoder.RecordStop