音频与视频-windows store app 与windows phone 8的异同

众所周知,随着Windows 8与Windows phone 8的发布,其给我们带来了比以往任何时候都要紧密相似的两个平台。虽然它们非常的相似,但是在数字音频和视频的实现和技术上也存在相当大的区别。希望这篇博客能帮助您认知和理解这两个平台在媒体技术上的差别。在您看这篇博客之前,我假设您已经熟悉windows 8或者windows phone 8其中的任何一个与媒体相关的技术知识,虽然您对另一个平台不甚了解,但您仅仅需要一些相关的知识便可以将媒体技术从一个平台迁徙到另一个平台。 音频/视频的相关播放技术 Audio / Video Playback – Technology Map Windows Store Windows Phone 8 MediaElement  (XAML)   MediaElement  (XAML) IMFMediaEngine  (C++ only) IMFMediaEngine  (C++ only) (Subset)   WASAPI  (C++ only) WASAPI  (C++ only) (Subset)   XAudio2  (C++ only) XAudio2  (C++ only)   MeidaElement 控件能同时在这两个平台是播放音频和视频,但是关于MeidaElement,他们之间也存在一些差异,比如说windows phone 8中,你不能向MeidaElement添加任何的音频和视频效果(如插件)。且在DRM的实现上这两者之间也存在差异。如果你在实现MeidaElement播放音频/视频的时候不做任何花哨或者复杂的处理,那么MeidaElement在这两个平台是可以相互兼容的。 MediaEngine(与上述讨论的MeidaElement 有所不同)是windows 8与Windows…

0

Windows Store App设计时数据的应用

想象这么一个场景:我们在做开发的时候写了一个GirdView并且对GridView的DataTemplate做了布局以及绑定,于是VS设计器中出现了一个框,但是开发人员并不能很好的预料到如果数据填充进去会有什么样的结果,举个例子来说可能长度或者高度设计的不够,导致某个远程图片被缩放变形,同时后期修改会产生大量的项目延迟。 这个时候我们需要使用VS来显示一些设计时数据。 情况一,数据源为本地数据 这种情况是最好的,绑定完成之后debug就可以看到数据显示是否符合需求,稍作修改便可。请参考如何绑定到分层数据并创建主视图/详细信息视图。 情况二,数据源为远程数据 当然你可以使用本地数据作为测试,下面这段代码可以在测试时帮助调用一些本地的测试数据 Fake Date if (Windows.ApplicationModel.DesignMode.DesignModeEnabled) {       GetSampleData(); } else GetRealData(); 同样的,这种方式也仅仅只能在Debug下才能看到数据显示是否正确,如果想在设计时看到数据,那么我们需要其他的一些代码。 情况三,设计时显示测试数据  上图所示就是在设计时候显示的数据,而作为对比,下图为运行时数据 我们需要做的就是 Step1, 定义设计时所需要的数据,我这里创建了一个叫DesignTimeDataCenter的类专门用于放置测试数据 Step2,完善绑定,在此声明下,具有 d: 前缀的属性仅在设计时被解释,而在运行时被忽略。所以绑定的属性可以用d:Source 来实现。 Step3,修改排版,让界面看起来更完美。 具体的代码我贴一部分在这里,其他的大家可以在我的SkyDrive上下载,地址为:http://1drv.ms/1cwIj2c MainPage.XAML文件: <Page  x:Class=”DesignTimeData.MainPage”    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”    xmlns:local=”using:DesignTimeData”      xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″    xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″     DataContext=”{Binding RelativeSource={RelativeSource Self}}”     d:DataContext=”{Binding Source={d:DesignInstance Type=local:DesignTimeDataCenter, IsDesignTimeCreatable=True}}”     mc:Ignorable=”d”>      <Grid Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}”>         <GridView ItemsSource=”{Binding News}”>             <GridView.ItemTemplate>…

0

RenderTargetBitmap 在windows store app 中的应用

前言  RenderTargetBitmap 是windows 8.1中一个新的类,它可以将任意的UIElement以bitmap的形式呈现。这篇博客的第一部分将介绍如何在windows 8.1中使用RenderTargetBitmap。第二部分将介绍在windows store app与WPF中RenderTargetBitmap大小调整方式的差异。UIElement以bitmap的形式呈现时,RenderTargetBitmap如何调整原来的UIElement大小对于你的项目来说是一个难题,但幸运的是这篇文章将会提出一个解决方案,使您可以在windows store app中得到与WPF相同的结果。让我们开始这篇博客的介绍吧。 怎么在windows 8.1中使用RenderTargetBitmap 在windows store app,你可以分以下两种情况来使用RenderTargetBitmap 将它当成一个ImageSources使用(用一个image-Element来显示或者通过ImageBrush来显示) 使用它的pixels值(比如说将一个bitmap存储到硬盘或者与其他的app进行分享) 本节只是介绍一些基础的知识,在MSDN的相关文档里面有详尽的描述: RenderTargetBitmap-class (这个网站有关于RenderTargetBitmap的详细描述 ) XAML render to bitmap sample (一个很好的例子,可以学习如何通过ImageSources和pixels来使用RenderTargetBitmap) 接下来我们来看一个简单的例子以及开始学习如何将一个UIElement以bitmap的方式呈现。 UIElement的呈现 在接下来的章节中,我们将通过下面的代码来定义一个Grid并将它作为RenderTargetBitmap的输入.在这个Grid中包含一个image和TextBlock控件。由于这个Grid没有定义任何的行或列,所以TextBlock的内容呈现在图片的上方。 <Grid x:Name=”elementToRender” Width=”500″ Height=”500″>             <Image Source=”Assets/image.jpg” Stretch=”UniformToFill”/>             <TextBlock Text=”This text is on top of the image” FontSize=”40″ TextWrapping=”Wrap” Margin=”50″/> </Grid> 上段代码的结果如下:   需要注意的是在上面代码中,将Grid的名称定义为elementToRender,我们接下来可以在C#代码中通过该名称来访问Grid。现在我们来看看如何使用该Grid来定义一个RenderTargetBitmap。 用UIElement来定义一个RenderTargetBitmap 你可以通过调用RenderAsync这个方法来定义一个RenderTargetBitmap,该方法的输入参数是一个UIElement,下面的代码是通过将名为elementToRender的Grid来作为该方法的输入参数从而来定义一个RenderTargetBitmap对象:…

0

How to use new controls in Windows 8.1 (2)

­Before developing an app, you should know which tools can be used to help with designand layout. In the previous article, we introduced some new features in windows8.1. Now, let us see more useful new features in this blog.  The Hub Control Hub control is a new feature introduced in windows 8.1 and can display…

0

如何正确使用Background Task的几点建议

前些天,在Windows商店应用论坛搜索了一下“热点问题”,发现有很多关于Background Task的理解误区。以下是关于如何正确使用Background Task的几点建议。 误区:Background Task不是很有用,因为微软对他做了很多的限制。 很多刚接触商店应用的开发者都会有类似的想法,但其实是因为在编写桌面应用程序的时候可以把程序运行在后台并且带少量甚至不带限制。当台式机插入电源的时候这种方式的编程是非常理想的,但并不适用于移动设备或者外置设备。Windows 8 以及8.1都是为了移动设备而定制的,运行在移动设备中的商店应用程序需要关注电池的使用量以及用户的选择,在这样的前提之下,很多的BackgroundTask API都做了限制。但是微软对此相当关注,并且有很多关于Background Task方案的内部讨论,这样做的目的是为了满足开发者最基本的移动编程的需求。移动设备未来将会对Background Task进行扩展,敬请期待。 误区:我有一个运行时间足够长的代码,如果我的应用是处于挂起状态并且我想运行完这段代码,我可以把这段代码放在后台执行,它会自动执行完成。 这个取决于你的代码运行多长时间,请时刻记住为了节约电池,我们对后台线程做了限制,包括可以运行多少后台任务,每个后台任务运行多久,多少时间触发一次。举个例子在Background Task中你是不可能花3个多小时去下载一个高清版的指环王,但是你可以使用Background Downloader来实现。请记住,Background Task仅仅为小数据量的下载更新而被使用,比如说更新磁贴,更新锁屏图标等,他们并非为下载大量数据而设计的。一般来说,你可以间隔的让你的Background Task触发,执行代码,显示必要的数据,然后继续休息。 误区:当应用处于不活跃状态时,你可以用一个标准的Background Task来播放音频视频。 播放背景音乐可以通过使用MediaElement的背景音乐属性或者可以使用<audio/video>的标签。如果想让你的商店应用正常播放背景音乐你需要实现 SystemMediaTransportControls这个类,这个类是替换MediaControl的存在。他们俩做同样的事,都允许用户在锁屏的时候通过硬件按钮或者在锁屏上的控制条来控制音乐的播放。 误区:当我有权限在锁屏时运行带有计时功能的Background Task的时候我可以无限时运行。 答案可以说正确也可以说错误。当你的程序被用户赋予在锁屏运行的权利时,你的应用可以正常运行。但如果用户把你的应用从锁屏中删除的话,你的Background Task将不会在锁屏状态下运行。这样的设计是为了最大化保证电池的续航时间。 误区:如果我的Background Task仅仅耗时1秒,我就不需要注册一个取消的处理事件 我们必须为Background Task取消做好准备,即使它仅仅耗时1秒乃至更少,Background Task可能因为多种原因而被取消。当你拥有一个长时间运行的Background Task但是你忽略了取消,可能会因此导致数据丢失或者程序错误。为此我们应该在Task运行的时候检查取消请求以确保程序正常运行。我们建议在Background Task代码中多设定检查取消的判定以保证取消事件得以及时传递。虽然这个看起来很麻烦,但的确是一个良好的代码习惯。 误区:不要把后台任务和异步操作混淆使用 不当心的话还是很容易把他俩混淆的。假设有这么一种情况,在后台任务中使用了异步操作,但后台任务还没来得及申请挂起之前的短暂停就因为系统锁定而挂起,这样很容易造成异步无法执行完成,导致内存泄漏。 误区:我需要使用WNS来推送所有的消息,我不可以创建我自己的推送服务。 这个理解是错误的,我们为此添加了很多网络Trigger API来确保用户可以使用自己的推送服务,但是为了使这些api能正常工作,我们需要维护一个后台的数据连接传输的功能。WNS本身就有很多优点比如说节省开支,节约代码,并且是独立于语言。一般WNS被诟病的问题就在于推送不及时。当我们在鼓励用户使用WNS的时候,也同时鼓励为了确保推送质量的开发者使用网络检测的api,谨记当使用自己的网络监测api的时候也需要为锁屏注册相应事件。 相应的链接可供参考 Supporting your app with background tasks (Windows Store apps using JavaScript and HTML Being productive in the…

0

How to use new controls in Windows 8.1 (1)

Author: James He   Before developing an app, you should know which tools can be usedto help with design and layout. As Windows 8.1 released on Oct.18th,some new features are introduced accordingly. Within this article, we willshare our experience on using these new controls and try to “hack” thesecontrols from layout and design. DatePicker &…

1

Using Free-COM DLL in Windows Store C++ Project

It is generally known that migrating Desktop App to Windows Store App is quite a headache. In .NET, some namespace cannot be used in Windows Store App, so it is very difficult to deal with when you want to migrate code related to these namespaces. In C++, native code cannot be referenced directly as DLL…

1

How to do data conversion in Windows Store app

Q: How to convert streams in .NET? A: Here is the list to show the different stream types conversion. Conversion between Stream and IRandomAccessStream // stream to IRandomAccessStream var randomAccessStream = new InMemoryRandomAccessStream(); var outputStream = randomAccessStream.GetOutputStreamAt(0); await RandomAccessStream.CopyAsync(stream.AsInputStream(), outputStream);   // IRandomAccessStream to stream Stream stream = WindowsRuntimeStreamExtensions.AsStreamForRead(randomStream.GetInputStreamAt(0));   Conversion between IBuffer and Stream…

0

Using database in Windows Store apps (I)

Author: Aaron Xue Introduction There are lots of discussions about using database in Windows Store apps in MSDN forum. These discussions mainly focus on the usage of SQL database. Based on this scenario, we developed a series of articles along with sample code and demos used to demonstrate how to access both local database and…

16

Using HTML5/Javascript in Windows Store apps: Data access and storage mechanism (III)

Introduction Windows Store app offers lots of methods for data access and storage. And this article will only focus on HTML5/JavaScript programming. In this tutorial, we’ll go over Application Data, File API , HTML5 Web Storage, Indexed Database API and remote data access. With these you can store more data – and store it more…

0