1、编码器 SDK 简明教程 版权说明:本文版权属于作者闻怡洋,在未经过作者允许的情况下禁止以下行为: 在互联网上转载本文。 在任何盈利性杂志或是盈利性行为中使用本文。 关键字:开发 编程 MS Media Encoder SDK 教程 多媒体 编码 MS Media 编码器 SDK 简明教程 第 0 章 介绍 第 1 章 创建简单的编码程序 1.1 引用 Encoder对象 1.2 基本思路 1.3 代码与说明 1.4 编码配置 1.5 WMEncoder 对象介绍 1.6 IWMEncSource 对象介绍 第 2 章 创建多组编码程序和使用自定义配置 2.1 基本思路 2.2 代码与说明 第
2、 0 章 介绍 本文的主要内容是讲解 MS Media 编码器 SDK 的基本用法,简单的说:通过这个 SDK 可以创建各种流媒体编码程序,甚至可以创建流媒体广播程序。被编码的输入来源可以是文件,也可以是屏幕捕捉,也可以是视频音频设备。鉴于目前国内此方面的开发资料比较少,所以编写本文,希望能够带给流媒体的开发人员一些帮助。 在 Windows2000推出时,其中附带了一个服务器产品“流媒体服务器”,在之后的几年中随着微软流媒体产品的完善, Windows格式的流媒体对市场的占有方面已经开始赶超Real 公司的流媒体产品。 微软的流媒体产品中有服务器产品,如“流媒体服务器”,也有个人产品,如“媒
3、体播放机”、“ Windows Movie Maker”和本文要介绍的“ Windows Media Encoder”。 微软对“ Windows Media Encoder”的定义是:一种能制作 Windows 流媒体文件和流(包括音频和视频)的应用工具。这个工具的作用大致包括以下几个方面: 转换编码格式。 创建并播放网络媒体流。 从设备中捕捉视频、音频。 捕捉屏幕。 创建和修改编码配置文件。 数字媒体版权 管理。 微软网站相关资源: Windows Media 主页 http:/ Windows Media家族所有产品的介绍。 Windows Media 编码器主页 http:/ Wind
4、ows Media 9 系列 SDK 主页 http:/ 其中 Windows Media 编码器 SDK http:/ SDK中一部分功能的应用。 首先我们需要下载并两个安装包,一个是: Windows Media Encoder,另一个是: Windows Media 编码器 SDK。通过 Windows Media 编码器 SDK 开发的应用程序在分发时候必须与 Windows Media 编码器一起发布。安装结束后,会在开始菜单中生成一个名为 Windows Media的程序组,里面包含了 Windows Media Encoder 应用工具和 SDK 文档。 Windows Medi
5、a 编码器 SDK 所支持的开发语言有 VBScript, JavaScript, VB, C, C+, C#。本文所选择的开发语言是 C#。 SDK是以 COM 的形式提供各种功能的, C#在调用 COM 组件时候所需要的基础知识本文不再做讲解,幸运的是读者不需要对 COM 的模式和调用过程有过多的了解,依然可以读懂本文。使用 C/C+的读者也可以直接调用 COM接口来使用 SDK。 本文内容的安排如下: 第 一章:创建简单的编码和格式转换程序将结果保存至文件;了解编码类型;编码配置。 第二章:创建多组编码程序,通过这个程序可以合并多个文件;使用自定义的编码配置。 第三章:创建视频、音频、屏
6、幕捕捉程序;实现编码时效果预览;将编码结果广播到网络。 第四章:其他,如捕捉事件,控制 DV设备播放等。 准备工作: Windows Media 编码器到 C:Program FilesWindows Media ComponentsEncoder 。 安装 Windows Media 编码器 SDK 到 C:WMSDK,在安装 SDK 之后会在开始菜单“程序 Windows MediaWindows Media SDK”中增加一个名为“ Windows Media Encoder SDK”的帮助文件,里面包含了所有的 SDK帮助信息。 建立目录 C:WMSDKDemo,用于保存视频音频文件。
7、拷贝两个 MP3文件到此目录,并改名为 src1.mp3 和 src2.mp3,拷贝两个 MPEG文件到该目录,并 改名为 src1.mpg和 src2.mpg。 建立目录 C:WMSDKCode,用于保存演示代码文件。 第 1 章 创建简单的编码程序 1.1 引用 Encoder对象 在创建一个工程之后,首先需要在工程里面添加对“ Microsoft Media Encoder”的引用,方法如图 2.1与图 2.2。 图 2.1 添加引用 图 2.2 添加引用 在代码中要加入如下语句: using WMEncoderLib;。 1.2 基本思路 首先需要创建一个 WMEncoder 对象。
8、创建一个 IWMEncSourceGroup 对象, IWMEncSourceGroup 里面保存的是需要进行编码的原始视频和音频来源。 通过 IWMEncSourceGroup 创建视频源对象 IWMEncVideoSource 和音频源对象 IWMEncSource。 为源对象设置输入源,在本章里使用文件作为输入源,除了文件以外还可以将视频捕捉设备等作为输入源。 通过 IWMEncFile 对象设定输出目的,在本章内使用文件作为输出目的,除了文件以外还可以向流媒体服务器输出或者直接广播到网络上。 遍历 IWMEncProfileCollection 对象选择一个配置文件,配置文件将决定输出
9、的格式。 开始编码并结束。 1.3 代码与说明 下面的代码会将 C:WMSDKDemosrc1.mpg 文件编码成为C:WMSDKDemoEncodeFile_dest.wmv。 /File: EncodeFile.cs /转换文件格式,将 mpg文件转换为一个 WMV文件 /演示 Media Encoder SDK 的基本用法 / using System; using WMEncoderLib; class EncodeFile static void Main() try / 创建 WMEncoder对象 WMEncoder Encoder = new WMEncoder(); / 创建
10、IWMEncSourceGroupCollection对象, IWMEncSourceGroupCollection 用来存放IWMEncSourceGroup 对象 IWMEncSourceGroupCollection SrcGrpColl = Encoder.SourceGroupCollection; / 创建IWMEncSourceGroup 对象 IWMEncSourceGroup SrcGrp = SrcGrpColl.Add(“SG_1“); / 设定源,将视频来源和音频来源都设定为 C:WMSDKDemosrc1.mpg(视频来源和音频来源可以来自不同文件) IWMEncAu
11、dioSource SrcAud = (IWMEncAudioSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO); SrcAud.SetInput(“C:WMSDKDemosrc1.mpg“, “, “); IWMEncVideoSource SrcVid = (IWMEncVideoSource)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO); SrcVid.SetInput(“C:WMSDKDemosrc1.mpg“, “, “); / 设定输出目标 IWMEncFile File =
12、 Encoder.File; File.LocalFileName = “C:WMSDKDemoEncodeFile_dest.wmv“; / 下面的代码用于列举所有配置文件,并把当前编码的配置设定为 Windows Media Video 8 for Local Area Network (384 Kbps) IWMEncProfileCollection ProColl = Encoder.ProfileCollection; IWMEncProfile Pro; for (int i = 0; i ProColl.Count; i+) Pro = ProColl.Item(i); if
13、(Pro.Name = “Windows Media Video 8 for Local Area Network (384 Kbps)“) SrcGrp.set_Profile(Pro); break; / 开始编码 Encoder.PrepareToEncode(true); Encoder.Start(); / 本示例没有判断何时编码完成,所以需要用户按键终止 Console.WriteLine(“Press Enter when the file has been encoded.“); Console.ReadLine(); Encoder.Stop(); catch (Except
14、ion e) Console.WriteLine(e.Message); 1.4 编码配置 在 C:Program FilesWindows Media ComponentsEncoderSettings 目录下有很多预先设定的配置文件,可以用“程序 Windows MediaUtilities”中的“ Windows Media Profile Editor”打开。 运行下面的代码可以列举系统中的可用的配置名称。 /File: ListAllProfiles.cs /列举 Media Encoder系统自带的所有的编码配置 / using System; using WMEncoderLib
15、; class ListAllProfiles static void Main() try / 创建 WMEncoder对象 WMEncoder Encoder = new WMEncoder(); / 下面的代码用于列举所有配置文件,并把当前编码的配置设定为 Windows Media Video 8 for Local Area Network (384 Kbps) IWMEncProfileCollection ProColl = Encoder.ProfileCollection; IWMEncProfile Pro; for (int i = 0; i ProColl.Count; i+) Pro = ProColl.Item(i); Console.WriteLine(Pro.Name); Console.WriteLine(“t0“,Pro.Description); Console.WriteLine(“);