Skip to content

decoderMode

shixuemei edited this page May 23, 2017 · 6 revisions

解码模式

金山云播放器提供了软解、硬解等多种视频解码方式, 可满足不同层次的需求。

一、解码方式

typedef NS_ENUM(NSUInteger, MPMovieVideoDecoderMode) {
    MPMovieVideoDecoderMode_Software = 0,
    MPMovieVideoDecoderMode_Hardware,
    MPMovieVideoDecoderMode_AUTO,
    MPMovieVideoDecoderMode_DisplayLayer,
};

v2.3.0及以上版本支持MPMovieVideoDecoderMode_DisplayLayer解码方式

  • MPMovieVideoDecoderMode_Software — 软件解码
  • MPMovieVideoDecoderMode_Hardware — 使用VideoToolBox进行硬件解码,目前只支持h.264视频格式,对于不支持的格式,则采用软解方式
  • MPMovieVideoDecoderMode_AUTO — 自动选择,对于iOS 8.0及以上的系统,优先采用硬解,不支持的情况下使用软解
  • MPMovieVideoDecoderMode_DisplayLayer — 使用AVSampleBufferDisplayLayer进行解码渲染,目前只支持h.264视频格式,对于不支持的格式或iOS8.0以下的系统,采用软解方式

二、说明

  1. 通过videoDecoderMode属性来设置/获取当前配置的解码方式,只在播放前配置生效;

  2. 当videoDecoderMode设置为MPMovieVideoDecoderMode_AUTO时,播放器只会在MPMovieVideoDecoderMode_Hardware和MPMovieVideoDecoderMode_Software两者中选择,如果希望使用MPMovieVideoDecoderMode_DisplayLayer模式,需要设置videoDecoderMode为MPMovieVideoDecoderMode_DisplayLayer方可生效;

  3. 实际采用的视频解码方式不一定就是配置的解码方式,真正使用的解码方式会通过MPMoviePlayerPlaybackStatusNotification消息发送出来,可从userInfo中获取实际使用的方式,若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusHWCodecUsed,说明实际采用VideoToolBox硬件解码;若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusSWCodecUsed,说明实际采用软件解码;若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusDLCodecUsed,说明实际采用AVSampleBufferDisplayLayer解码渲染;

  4. 目前iOS在VideoToolBox和AVSampleBufferDisplayLayer解码时只支持h.264视频格式,如果播放非h.264格式的视频,则自动使用软解;

  5. 在使用VideoToolBox和AVSampleBufferDisplayLayer解码h.264视频格式时,如果无法正确解出视频帧,则会自动切换到软解;

三、性能及功能对比

性能 软解 VideoToolBox AVSamleBufferDisplayLayer
内存占用 最高 居中 最低
CPU占用 最高 居中 最低
温度 最高 居中 最低
耗电量 最高 居中 最低
功能 软解 VideoToolBox AVSamleBufferDisplayLayer
视频格式 全格式 H.264 H.264
双指缩放/旋转 支持 支持 支持
填充模式 支持 支持 支持(开始播放前配置生效)
画面旋转/镜像 支持 支持 不支持
截图 支持 支持 不支持
回调原始数据 支持 支持 不支持
录屏 支持 支持 不支持

四、示例代码

_player.shouldUseHWCodec = MPMovieVideoDecoderMode_Hardware;
Clone this wiki locally