Windows Media Encode 9 及SDK

Windows Media Encode 9 是 Windows Media 9 Series 组成部分之一,它的主要作用是进行编码。 Windows Media 9 Series 包括了 Windows Media Audio 9 Series 、 Windows Media Video 9 Series 、 Windows Media Encoder 9 Series 、 Windows Media Services 9 Series 、 Windows Media Player 9 Series 、 Windows Media Rights Manager 9 Series 、 Windows Media 9 Series SDK 。基于这个平台,开发者可以利用播放器、解码器以及服务器端配合开发出数字媒体应用程序,通过与 Windows 家族的最新成员: Windows XP Media Center Edition 配合,相信能给用户带来更流畅的数码娱乐享受。

以上是微软的一些产品,微软提供给我们,让我们可以进行开发的是 Windows Media 9 SDK 。 SDK 是软件开发工具包 Software Develop Kits 。 Windows Media 9 SDK 主要包括 Windows Media Player SDK 、 Windows Media Format  SDK 、 Windows Media Rights Manager SDK 、 Windows Media Encoder SDK 、 Windows Media Services SDK 。

我们可以使用Windows Media Encoder SDK开发自己的编码应用。微软的Windows Media Encoder(Windows Media 编码器)就是使用Windows Media Encoder SDK进行开发的。编码应该如何理解呢?或者说编码器应该具有什么功能呢?将设备或者文件中的流媒体采集到并按照微软的媒体格式进行编码,并输出,这就是编码器的作用。用更加执白的话说就是采集、格式转换、压缩。Windows Media Encoder的源可以是设备也可以是文件,设备可以是屏幕或者摄像头或者其他的视频、音频设备,文件可以是视频文件、音频文件。Windows Media Encoder的输出可以将内容编码到文件,也可以对内容进行实况广播。如果要进行广播,既可以通过推传递(在客户端没有请求数据的情况下传递)将流传输到运行 Windows Media Services 的服务器上,也可以允许 Windows Media 服务器和播放机通过拉传递(仅在客户端发出请求时将数据传递给客户)直接从编码器接收流。

Windows Media Encoder SDK不会和Windows Media Encoder一起安装,需要单独下载,Windows Media Encoder SDK中安装了一些示例和帮助文件。Windows Media Encoder SDK以COM组件的方式提供服务,可以参考wmencsdk.chm的内容。

下面以一个简单的例子来展示一下C#使用Windows Media Encoder SDK进行开发的情形。

 

             try
ExpandedBlockStart.gifContractedBlock.gif            
{
                
// 创建WMEncoder object.
                WMEncoder Encoder = new WMEncoder();
                
//获得组源集合
                IWMEncSourceGroupCollection SrcGrpColl = Encoder.SourceGroupCollection;

                
//向集合中增加一个组源
                IWMEncSourceGroup SrcGrp = SrcGrpColl.Add("SG_1");

                
//向组源中增加一个音频源和视频源
                IWMEncSource SrcAud = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
                SrcAud.SetInput(
"C:\\爱就爱了.rm""""");

                IWMEncVideoSource2 SrcVid 
= (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
                SrcVid.SetInput(
"C:\\爱就爱了.rm""""");

                
//制定一个输出文件
                IWMEncFile File = Encoder.File;
                File.LocalFileName 
= "C:\\OutputFile.wmv";

                
//装载配置文件
                WMEncProfile2 Pro = new WMEncProfile2();
                Pro.LoadFromFile(
"c:\\schi.prx");
                SrcGrp.set_Profile(Pro);
              
                
//增加文件描述信息
                IWMEncDisplayInfo Descr = Encoder.DisplayInfo;
                Descr.Author 
= "Author name";
                Descr.Copyright 
= "Copyright information";
                Descr.Description 
= "Text description of encoded content";
                Descr.Rating 
= "Rating information";
                Descr.Title 
= "Title of encoded content";

                IWMEncAttributes Attr 
= Encoder.Attributes;
                Attr.Add(
"URL""IP address");
               
                
//开始编码处理
                Encoder.PrepareToEncode(true);
                Encoder.Start();
                MessageBox.Show(
"It's OK");

            }

            
catch  (Exception e1)
ExpandedBlockStart.gifContractedBlock.gif            
{
                MessageBox.Show(e1.Message
+e1.StackTrace);
Windows Media Encoder SDK的下载可以去微软网站下载,本Blog提供英文版SDK帮助文件下载。wmencsdk.chm
概述

windows media 是微软推出的流式播放媒体格式,有asf(advanced stream format),wma(windows media audio),wmv(windows media vedio)三种格式,其中.asf可以包括音频和视频的内容,可以用windows media on-demond producer 将wav文件或avi压缩而成,且只能压缩这两种格式。asf文件与wma及wmv两种格式等价,微软推荐使用wma和wmv格式。
wma是音频文件,wmv是视频文件。利用微软的windows media encoder 7可以将wav,mp3,wma,asf以及直接的输入设备作为音频的输入,将asf,avi,wmv,mpg,bmp,以及视频捕获作为视频输入。
输出可以是wma和wmv文件,也可以是通过网络端口实况播放。
Windows media format SDK 缺少授权证书文件(WMStub.lib)不能用,该文件可以向微软注册后得到。要求填写打印表格并邮寄到微软公司(不是电子邮寄)。
通过SDK编码的步骤

请参照所附示例
a 首先生成Windows media encoder 对象(vb),得到IWMEncoder 接口指针(vc)
有两个途径:如果不希望有界面,直接创建WMEncoder对象;如果要界面(UI),创建WMEncoderApp对象,通过它得到WMEncoder对象。因为WMEncoderApp是进程外(out-of-process)对象,而后者是进程内对象。
b.创建一个源组(source group)来放置多媒体流
源组保存被编码的同步多媒体流。一个源组必须包括一个音频(Audio)流,可以包括视频和脚本(script)。可以创建多个源组,用 IWMEncSourceGroupCollection接口来管理。 IWMEncSourceGroup 接口管理一个特定源组, IWMEncSource接口来管理特定源。
c.从文件或设备中捕获多媒体流
IWMEncSource接口从文件中载入流或从设备中捕获流,用 IWMEncSourceGroup接口将流加入到源组
d.从编码会话(encode  session)中选一个配置文件(profile)
配置文件指定编解码器(codec),确定比特率等。一个编码会话的多个源组只能指定一个配置文件。配置文件包括不能编辑删除的系统配置文件和自定义配置文件,后者可以用配置文件管理器创建和编辑。但程序化的创建和编辑配置文件只能用Windows media Format SDK进行。或者用 IWMEncProfileManager 接口创建配置文件管理器对话框来创建和管理配置文件。
由于我们Format SDK不能用,用 IWMEncProfileManager接口来创建一个对话框时,程序从Wav转到wma时就正确,而不出现这个接口创建的对话框,则只能转成一个文件头或者一截文件。用VB,VC,Windows script运行都如此。当出现任何Windows Media界面的东西,回调类会检测到OnSourceStateChange,执行WMENC_SOURCE_START,不出现界面则没有执行此步。
不明白的地方是为何只能生成一个文件头或者编码不完全,按理要么不编码,报告错误,要么完全编码。问题就出在这里。
可能的原因:由于没有在其他的装有windows 2000的机子上编译,我不能确定是否与我的计算机相关。例如我的编译器的问题,我安装SDK的问题等。如果排除,会不会SDK本身有问题。因为微软的这套SDK是要注册的,没有注册有可能出错。然后,可能是我程序本身的问题,比如缺少应有的初始化,或缺少启动源组的语句,这种情况应该比较微小。
解决办法:针对以上原因查找,或者创建一个线程关闭出现的界面。
e.确定输出选项
可以归档或者广播。用 IWMEncBroadcast接口选地址和端口广播,用 IWMEncFile 接口来指定一个文件存储编码的内容。
f.加入可选描述信息
IWMEncAttributes 接口用来指定属性, IWMEncDisplayInfo 接口用来指定内容的一般描述信息, MSPropShell 用来显示预定义会话属性界面。这些都不是必须的。
g.运行编码器
IWMEncoder 接口开始和停止编码。
Encoder和Fomat SDK的关系


Format SDK 是Encoder的底层。Windows Media Encoder SDK 是建立在Format SDK 之上的应用程序接口(API),后者包含的接口从文件或缓冲读取媒体数据,写基于windows media 的内容(content)。前者扩展以上功能以便建立更高层次的编程解决方案,例如配置(configuration),捕获,转换和编码处理。
二者都将原始多媒体内容(raw multimedia content)转换为windows media 文件或流,但用Format SDK 必须在处理时每一步都管理数据流。

 

 

转载于:https://www.cnblogs.com/willwayer/archive/2009/08/07/1541443.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值