上次本来说好,今天咱们来讨论 socket 相关的话题,但,对于 socket ,老周还有一些问题没弄清楚,等弄清楚了,再和大伙伴们一起探讨。故,今天咱们扯一扯多媒体转码的事。

听起来挺复杂的,不过,由于有现成的API,使得在UWP中完成转码并不算复杂,我一说,大家就会懂的。

不说F话,直入正题吧。多媒体转码相关的API在 Windows.Media.Transcoding 命名空间下,具体的使用步骤如下:

a、new一个MediaTranscoder实例,不用教你了吧。

b、正常情况下,不用修改什么属性,直接可以干活。调用 PrepareXXXXTranscodeAsync 方法做好转码操作的准备。如果输入/输出的是媒体文件(如MP4、MP3、WMV、Mkv等),那就调用PrepareFileTranscodeAsync方法;如果是以流的形式输入/输出的,就调用PrepareStreamTranscodeAsync方法。

c、调用 PrepareXXXXXXX后,会得到一个 PrepareTranscodeResult 实例,注意啊,此时转码操作还没开始呢,别兴奋得太早了,此前只是分析阶段,看看你输入的文件的人品够不够格,如果够格就可以转码,不够格就没办法了。实际上是分析系统当前所支持的解码/编码器。

d、访问 PrepareTranscodeResult 对象的 CanTranscode 属性以确定能不能转码,你要确认它返回 true 才能进行转码。要想知道无法转码的原因,可以访问FailureReason属性,它是个枚举值,我就不一一说了,看名字就懂的,不懂就查字典。

e、确认可以转码后,调用 PrepareTranscodeResult对象的 TranscodeAsync() 方法,就会开始转码了,这是可以异步等待的方法,别问我是啥,回家复习一下 C# 5 新特性就明白了。

由于转码的过程较长,具体看文件类型,反正我转码一集电视剧的mkv文件为mp4文件,用了15分钟左右,可能是我的电脑配置拖了后腿。所以,最好可以监测转码的进度,并在用户界面上实时显示处理进度,不然的话,不懂事的小孩子会以为你的程序挂了。

比较提升人品的做法是调用AsTask扩展方法,把基于RT的异步操作转化为基于.NET的Task模型的操作,这样一来,既可以用.net中的Progress<T>来报告进度,用CancellationTokenSource来取消操作。

放心,后面老周会给大伙上核心代码,其他代码的话,自己下载示例源码看吧,看懂了不要问我,看不懂也不要问我。

看,启动转码操作的代码如下:

            int n = cmbOutputFmt.SelectedIndex;
MediaEncodingProfile profile = null;
if (n == ) //mp4
profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
else // wmv
profile = MediaEncodingProfile.CreateWmv(VideoEncodingQuality.HD720p);
// 开始转码
btnSelInputfile.IsEnabled = btnSelOutputfile.IsEnabled = btnTranscode.IsEnabled = false;
btnCancelTranscode.IsEnabled = true; var prptransres = await transcoder.PrepareFileTranscodeAsync(inputFile, outputFile, profile);
if (prptransres.CanTranscode)
{
if (canceltsrc != null)
{
canceltsrc.Dispose();
canceltsrc = null;
}
canceltsrc = new CancellationTokenSource();
var progress = new Progress<double>(ps =>
{
tbmsg.Text = $"当前处理进度:{ps:N0}%";
});
await prptransres.TranscodeAsync().AsTask(canceltsrc.Token, progress);
tbmsg.Text = "转码完成。";
}
else
{
tbmsg.Text = "此格式暂不受支持。";
}

注意,在调用PrepareFileTranscodeAsync方法时,需要提供一个MediaEncodingProfile实例,这个家伙用来干吗?它用来描述转码的目标类型的属性的配置,记住,是描述输出媒体的格式,不是输入媒体。

比如我要把一个视频文件转码为一个.mp4文件,那么这个参数就要一个描述MP4的配置信息,使用CreateMp4静态方法可以直接获得实例。

要取消转码过程,可以调用CancellationTokenSource实例的Cancel方法,调用后会取消操作,当会得到一个异常,在调试时会抛出,在直接运行时你自己想办法过滤。

好,重点知识讲完了,其他代码不重要,可以自行查看示例项目。

看看运行结果,老周拿出收藏多年的六小龄童版《西游记》电视剧来转换为MP4。如图。

这些转码API支持输入.mkv、.avi、.mov、.asf、.flac等文件格式,至于说.ra和.rmvb就别做梦了,毕竟已经过时的格式。

示例源代码下载

===========================================================

哦,差点忘了讲故事。

有人会问,老周,你不编程的时候,平时都干些什么。

编程是职业,至于业余嘛,老周干的事情可多了,只要不违法,不违德的事都可以干。有人找我去玩就去耍耍,如果没人找我玩,就在家自己耍,听音乐、看书、诗词歌赋、写字涂鸦,笛子瑶琴电子琴,看电视看新闻。反正,家里能找得出来的东西都能耍,晚上睡觉前可以看恐怖片。

实在闷得很就独自出去散步,什么广场、公园、电脑城、手机店、古玩市场、画廓、文具店、影剧院,都可以去耍耍。

总之一句话——生活充实得很。

【Win 10 应用开发】多媒体转码的更多相关文章

  1. 【Win 10 应用开发】在后台进行多媒体转码

    前面,老周给大伙儿讲了如何运用 MediaTranscoder 类来完成多媒体.然而,你懂的,要是多媒体文件比较大,转码时间会更长,有可能用户不会一眭停在当前应用界面上,或许会切换到其他应用程序,甚至 ...

  2. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  3. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  4. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  5. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  6. 【Win 10 应用开发】Toast通知激活应用——前台&后台

    老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...

  7. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  8. 【Win 10 应用开发】在代码中加载文本资源

    记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...

  9. dell win 10笔记本关闭多媒体键,启用功能键的快捷方式

    自从使用win 10之后,在使用快捷键方面就没有win 7之前来的顺手,比如F8切换投影仪,F5/F6调试等等.特地搜了下,使用Fn+Esc可以在功能键和多媒体键之间切换.

随机推荐

  1. 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信

    接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...

  2. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  3. 02.SQLServer性能优化之---牛逼的OSQL----大数据导入

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...

  4. favicon.ioc使用以及注意事项

    1.效果 2.使用引入方法 2.1 注意事项:(把图标命名为favicon.ico,并且放在根目录下,同时使用Link标签,多重保险) 浏览器默认使用根目录下的favicon.ico 图标(如果你并没 ...

  5. 初步认识TDD

    TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名.本文将对TDD有一个较为系统的认识.    基础属性 ...

  6. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  7. SAP CRM 用户界面对象类型和设计对象

    在CRM中的用户界面对象类型的帮助下,我们可以做这些工作: 进行不同的视图配置 创建动态导航 从设计层控制字段标签.值帮助 控制BOL对象的属性的可视性 从导航栏访问自定义组件 一个用户界面对象类型之 ...

  8. SAP CRM 将组件整合至导航栏中

    到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...

  9. H3 BPM让天下没有难用的流程之产品概述

    一.产品简介 BPM(Business Process Management),是指根据业务环境的变化,推进人与人之间.人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具. H3 ...

  10. Dynamics CRM 之ADFS 使用 WID 的独立联合服务器

    ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库