×
Namespaces

Variants
Actions

诺基亚Lumia610视频播放指南

From Nokia Developer Wiki
Jump to: navigation, search
WP Metro Icon Multimedia.png
WP Metro Icon Graph1.png
SignpostIcon WP7 70px.png
Article Metadata

测试基于
SDK: Windows Phone SDK 7.1

兼容于
平台: Windows Phone 7.5 (only)
Windows Phone 7.5

文章
翻译:
最后由 hamishwillee 在 04 Jul 2013 编辑


本文提供了最佳实践指导,以备你的视频和Windows Phone应用程序运用于诺基亚Lumia610以及其他7x27a处理器的Windows Phone设备。

Contents

简介

作为Windows Phone7.5更新的一部分,Windows Phone设备现在可以使用7X27a处理器

该处理器支持用于其它Lumia智能手机的8x50和8x55处理器的硬件加速编解码器的一个子集。为了使用7x27a处理器的手机播放视频,所有Windows Phone最低也要配备7X27a处理器支持的硬件加速编解码器。

VideoPlaybackLumia610 SpecificationComparison.png

内容提供商可以提供以最低码率和分辨率编码的7X27a智能手机视频。如果没有这样的视频内容,内容提供商应该以新的基准对他们的视频库重新编码。然而,Nokia意识到,许多内容提供商可能选择不这样做。

本文讨论在7x27a智能手机上应用程序达到最佳的视频播放的最佳做法。

支持配备7X27a处理器手机的视频编码器

更新的Windows Phone7.5没有对现有的使用8x50或8x55处理器支持的Windows Phone的视频编码配置文件进行改变。配有 7x27a处理器和256 MB的RAM的Windows Phone设备支持这些视频编码配置文件的一个子集。欲了解更多信息,请参阅MSDN的Supported Media Codecs for Windows Phone

配有8x50-8x55处理器的手机支持三个视频编码器:VC1 Advanced profile(一种常见的WMV格式),MPEG-4 Pt 2 Advanced-Simple profile,和MPEG PT 2-4(512 MB的设备)。但在7x22a处理器的手机上不被硬件加速支持

下表列出7x27a,与8x50/8x55-processor的智能手机支持的视频编码配置文件之间的差异:

Codec and Profile Phone chipset Level Max average bitrate Max peak bitrate Max resolution and framerate
H.263 7x27a/baseline 30 2 Mbps 4 Mbps 800×480 @ 30 fps
8x50 / 8x55 40 2 Mbps 20 Mbps 800x600 @ 30 fps
VC1 Simple (for WMV 9) 7x27a/baseline Medium 2 Mbps Not Available 800×480 @ 30 fps
8x50 / 8x55 Medium 2 Mbps 20 Mbps 800x600 @ 30 fps
VC1 Main (for WMV 9) 7x27a/baseline Low 512 Kbps 1 Mbps 400×240 @ 30 fps
8x50 / 8x55 Medium 2 Mbps 20 Mbps 800x600 @ 30 fps
MPEG-4 Pt 2 Simple 7x27a/baseline 3 2 Mbps 4 Mbps 800×480 @ 30 fps
8x50 / 8x55 2 Mbps 27 Mbps 800x600 @ 30 fps
H.264 Baseline 7x27a/baseline 2.0 2 Mbps 4 Mbps 800×480 @ 30 fps
8x50 / 8x55 3.1 10 Mbps 27 Mbps 1280x720 @ 30 fps
H.264 Main 7x27a/baseline 1.3 - CABAC,

2.0 - CAVL

CABAC: 2 Mbps,

CAVLC: 768 Kbps

4 Mbps 800×480 @ 30 fps
8x50 / 8x55 3.1 10 Mbps 27 Mbps 1280x720 @ 30 fps
H.264 High 7x27a/baseline 1.3 - CABAC,

2.0 - CAVLC

CABAC: 2 Mbps,

CAVLC: 768 Kbps

4 Mbps 800×480 @ 30 fps
8x50 / 8x55 3.1 10 Mbps 27 Mbps 1280x720 @ 30 fps

7x27a处理器的手机播放不支持的格式或编解码器视频时会发生什么?

不被所有Windows Phone支持的格式---如FLAC ,RMVB和OGG------在7X27a智能手机上可能会播放失败。

视频是支持的格式,但是以硬件加速不支持的编码器编码的,或者比特率、分辨率高于Windows Phone基准线的,也可能播放失败,或者使用软件渲染。软件渲染播放将导致效果差—跳跃和震荡。

例如,视频使用VC1 codec Advanced或Main profile可能会通过软件渲染播放而不是硬件加速,但是如果编码的比特率太高,它将会失败。 要了解软件渲染如何影响播放,请看这个例子:

<MediaElement Source="http://tinyurl.com/256mbVC1Advanced" AutoPlay="True"    />

当在Lumia610播放,观察Windows Phone性能分析器将显示CPU大部分时间的利用率超过80%

VideoPlaybackLumia610 PerformanceProfileSoftwareRendering.png

然而,当播放相同的以H.264基线编码的视频,将看到利用率明显下降。

<MediaElement
Source="http://tinyurl.com/256mbH264"
AutoPlay="True"
/>
Performance profile during graphics processor rendering of video

这降低的CPU的使用,是因为视频呈现由专门的图形处理器处理,更重要的是它转换到了较低的电量消耗。这样做大大降低了手机充电的时间,因为如此那是为避免软件渲染建议使用的基线视频编码。

Tip#1:重编码所有视频

如果你的视频内容编码不符合新的Windows Phone基准线规格,最佳推荐操作是以新的Windows Phone视频基准规格重新编码所有视频。如果你有一个现成的视频内容目录,你应该单独为7X27a智能windows phone编码你的目录。

Microsoft Expression Encoder SP1(捆绑在Expression Studio中)提供了一个可用的编解码器清单:

List of available codecs

将7X27a智能手机支持的视频编码器记在脑中,你可以很容易地将不支持的视频编码为支持的

Tip#2:总能处理MediaFailed事件

当在7X27a智能手机上播放VC1 codec Advanced或Main profiles编码器的视频,手机会尝试执行软件渲染。如果视频大大高于支持的视频规格,这样的渲染很可能失败。尝试播放任何其它的不支持的编码视频将会失败。当视频播放失败时MediaElement将触发MediaFailed事件并停止视频播放。当试图在8x50和8x55智能手机上播放不支持的媒体编码器视频如OGG,FLAC或RMVB时,将看到类似的行为。

你应当始终处理MediaFailed事件,向用户显示相应的信息,并妥善处理任何视频播放问题。例如下面是VC1 Advanced编码2MB比特率的视频,它大大高于软件渲染规范。试图播放这个视频将导致MediaFailed几乎立即触发。

<MediaElement
Source="http://tinyurl.com/256mVC1Advanced2Mbps"
AutoPlay="True"
MediaFailed="mediaElement_MediaFailed"
/>
private void mediaElement_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
MessageBox.Show("We're sorry, we couldn't play this video.");
 
if (NavigationService.CanGoBack)
NavigationService.GoBack();
}

在诺基亚Lumia610或256MB模拟器上运行这个软件,你将会看到的MessageBox弹出

Tip#3:在7x27a设备上禁用高品质视频

我们建议你在7x27a智能设备上只提供基准编码的视频。你可以用MediaCapabilities.IsMultiResolutionVideoSupported属性去检测在这手机上是否支持高于基准的视频。在Windows Phone7.1 SDK中已介绍了此属性。

例如,应用程序SuperTube为用户提供观看质量的选项 低品质(LQ),高品质(HQ),或高清晰度(HD)。SuperTube的低品质视频是唯一在7x27a智能手机上受支持的。因此,应用程序可以被修改以便在7x27a智能手机上只提供低品质视频播放。

一个if-then-else的条件判断只显示支持的视频编码器,看起来像这样:

if (MediaCapabilities.IsMultiResolutionVideoSupported)
{
ShowAllVideoFormats();
}
else
{
ShowOnlyLowQualityVideoFormats();
}

Tip#4:当所有视频不被支持,完全移除视频内容

如果在7x27a智能手机上,你的应用程序中没有一个视频可以播放, 我们建议移除所有视频内容,除非这个应用程序的整体体验可以维持。

这是对特定的应用程序的建议,应用程序如混合视频,音频,图像和文字内容,其中这些类型是由不同的“视图”清楚分开的。

App with content types are in clearly separated views.

要移除应用程序视频内容,使用一个if-then-else条件判断,例如:

if (!MediaCapabilities.IsMultiResolutionVideoSupported)
{
RemoveVideoPanoramaItem();
}

如果你的应用程序主要集中在视频播放,但在7x27a智能手机上没有视频内容可以播放,建议你不支持这些手机。关于如何设置应用程序不支持这些手机,请看nokia开发者Wiki的文章 Opting your app out from Windows Phone with 256 MB.

Tip#5:调用RestrictTracks for SmoothStreamingMediaElement

许多Silverlight应用程序在Windows Phone上使用IIS Smooth Streaming实现自适应的视频播放。这样的应用程序不得不通过编程限制在Windows Phone上的自适应设置,并需要在新的视频播放基准上进行更新以限制支持的基线。

IIS Smooth Streaming的工作原理如下:用一个高清视频文件/流开始,用不同码率和分辨率创建多个视频流。 Silverlight然后基于启发式逻辑选择哪个比特率去播放。

VideoPlaybackLumia610 IISSmoothStreamingFlow.png

例如,我们可以检测Smooth Streaming video manifest,看到四种可能的H.264视频比特率和分辨率,每一个在不同的<QualityLevel/>下:

<SmoothStreamingMedia MajorVersion="2" MinorVersion="1" Duration="419999999">
<StreamIndex Type="video" Name="video" Chunks="21" QualityLevels="4" MaxWidth="1280" MaxHeight="720" DisplayWidth="1280" DisplayHeight="720">
<QualityLevel Index="0" Bitrate="1600000" FourCC="H264" MaxWidth="1280" MaxHeight="720" />
<QualityLevel Index="1" Bitrate="800000" FourCC="H264" MaxWidth="720" MaxHeight="404" />
<QualityLevel Index="2" Bitrate="400000" FourCC="H264" MaxWidth="400" MaxHeight="224" />
<QualityLevel Index="3" Bitrate="200000" FourCC="H264" MaxWidth="220" MaxHeight="124" />

我们目标是限制只有哪些设置可以在哪些在手机上播放。 对于7x27a智能手机你的最佳选择是使用微软媒体平台播放器框架:Player Framework这将在下一节中所涵盖。因为它有内置的逻辑能限制频轨。但是,如果你的应用程序直接使用SmoothStreamingMediaElement,建议你限制支持的比特率到一个单一的已测试的比特率或最低的比特率。

对于7x27a智能Windows Phone设备,动态smooth streaming码率变化是不支持的,因此启发式逻辑不是必备的:在视频播放开始前你必须选择一个单一的比特率。接下来的问题是,你会选择哪个单一的视频轨?如果你不能测试您的视频内容,建议你限制视频内容到最小比特率。然而,最小比特率可能低于基准比特率。因此,如果你可以测试你的视频流,建议使用支持成功测试的最高码率。例如,只有限制到最低比特率Smooth Streaming视频才可播放。让我们试图播放没有限制的Smooth Streaming视频,并观察其表现。

<SmoothStreaming:SmoothStreamingMediaElement 
SmoothStreamingSource="http://tinyurl.com/256mbSmoothStreaming"
MediaFailed="ssme_MediaFailed" />
private void ssme_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
MessageBox.Show("We're sorry, we couldn't play this video.");
 
if (NavigationService.CanGoBack)
NavigationService.GoBack();
}
VideoPlaybackLumia610 MessageBoxPopup-UnsupportedVideo.png

现在限制支持的Smooth Streaming频轨到最低可用比特率。

<SmoothStreaming:SmoothStreamingMediaElement 
x:Name="video"
ManifestReady="ssme_ManifestReady"
SmoothStreamingSource="http://tinyurl.com/256mbSmoothStreaming"
MediaFailed="ssme_MediaFailed" />
private void ssme_ManifestReady(object sender, EventArgs e)
{
if (!MediaCapabilities.IsMultiResolutionVideoSupported)
{
OnlyPlaySmoothStreamsWithMinimumBitrate(video);
}
}
 
private void OnlyPlaySmoothStreamsWithMinimumBitrate(
SmoothStreamingMediaElement ssme,
ulong? maximumBitrate = null)
{
if (ssme == null)
{
return;
}
 
var streamsToRemoveTracksFrom =
ssme.ManifestInfo
.Segments
.SelectMany(segmenet => segmenet.AvailableStreams)
.Where(streamInfo => streamInfo.Type == MediaStreamType.Video);
 
foreach (StreamInfo streamInfo in streamsToRemoveTracksFrom)
{
var minimumAvailableBitrate =
streamInfo.AvailableTracks.Min(t => t.Bitrate);
 
var actualMaximumBitrate =
maximumBitrate.HasValue
? maximumBitrate.Value
: minimumAvailableBitrate;
 
var allowedTracksUsingApprovedBitrated =
streamInfo
.AvailableTracks
.Where(track => track.Bitrate == actualMaximumBitrate)
.ToList();
 
streamInfo.RestrictTracks(allowedTracksUsingApprovedBitrated);
}
}

上面的代码片段使用了作为与SmoothStreamingMediaElement主交互点的RestrictTracks方法。要阅读有关此方法的更多信息,请参阅Giuseppe Guerrasio的Using Smooth Streaming Media Element for Windows Phone 7.

当运行这个例子,我们可以看到,视频播放按预期工作

VideoPlaybackLumia610 IISSmoothStreamingWorkingImage.png

当它们测试成功后,你可以选择不是最低比特率的其他播放比特率。例如对于Smooth Streaming视频,尽管230000,331000和477000比特率可用,但我们可以调到688000比特率去播放它。但是谨记,建议你的应用程序只支持一个比特率

<SmoothStreaming:SmoothStreamingMediaElement 
x:Name="video"
ManifestReady="ssme_ManifestReady"
SmoothStreamingSource="http://tinyurl.com/Elephants-Dream"
MediaFailed="ssme_MediaFailed" />
private void ssme_ManifestReady(object sender, EventArgs e)
{
if (!MediaCapabilities.IsMultiResolutionVideoSupported)
{
OnlyPlaySmoothStreamsWithMinimumBitrate(video, 688000);
}
}

针对该视频,限制Smooth Streaming播放到688000轨可以成功播放

Tip#6:为Smooth Streaming视频使用微软媒体平台:Player Framework

Microsoft Media Platform: Player Framework 是由微软提供的全功能Windows Phone视频播放器,它支持7X27a智能手机,<SmfPlayer/>控件在发布的windows phone7.5中已被校对,并会根据前面提到的MediaCapacities 、IsmultiResolutionVideoSupported属性选择最低比特率。对于任何Smooth Streaming视频清单您可以使用<SmfPlayer/>控件并选择最佳轨来播放。

<Mmppf:SMFPlayer VolumeLevel="1">
<Mmppf:SMFPlayer.Playlist>
<Media:PlaylistItem DeliveryMethod="AdaptiveStreaming"
MediaSource="http://tinyurl.com/256mbSmoothStreaming" />
</Mmppf:SMFPlayer.Playlist>
</Mmppf:SMFPlayer>

运行这个程序,你会看到<SmfPlayer/>控件选择正确的的Smooth Streaming的频轨来播放。

VideoPlaybackLumia610 SmfPlayer.png

总结

7x27a智能手机对可播放的视频施加限制。对于较低的处理能力和内存的手机这些限制已实施。然而,重新编码视频,并利用在这篇文章中所述的技术,你可以保留你的应用程序UX,并继续向用户提供了丰富的视频体验。

视频资产

我们要感谢微软Channel9提供在本文中使用的视频内容。在本文中两个视频是Channel9's Inside Windows Phone #33 - Windows Phone 7.5 Refresh和Creative Commons movie Elephants Dream.

This page was last modified on 4 July 2013, at 06:47.
86 page views in the last 30 days.