-
Notifications
You must be signed in to change notification settings - Fork 146
decoderMode
金山云播放器提供了软解、硬解等多种视频解码方式, 可满足不同层次的需求。
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以下的系统,采用软解方式
-
通过videoDecoderMode属性来设置/获取当前配置的解码方式,只在播放前配置生效;
-
当videoDecoderMode设置为MPMovieVideoDecoderMode_AUTO时,播放器只会在MPMovieVideoDecoderMode_Hardware和MPMovieVideoDecoderMode_Software两者中选择,如果希望使用MPMovieVideoDecoderMode_DisplayLayer模式,需要设置videoDecoderMode为MPMovieVideoDecoderMode_DisplayLayer方可生效;
-
实际采用的视频解码方式不一定就是配置的解码方式,真正使用的解码方式会通过MPMoviePlayerPlaybackStatusNotification消息发送出来,可从userInfo中获取实际使用的方式,若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusHWCodecUsed,说明实际采用VideoToolBox硬件解码;若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusSWCodecUsed,说明实际采用软件解码;若MPMoviePlayerPlaybackStatusUserInfoKey对应的值为MPMovieStatusDLCodecUsed,说明实际采用AVSampleBufferDisplayLayer解码渲染;
-
目前iOS在VideoToolBox和AVSampleBufferDisplayLayer解码时只支持h.264视频格式,如果播放非h.264格式的视频,则自动使用软解;
-
在使用VideoToolBox和AVSampleBufferDisplayLayer解码h.264视频格式时,如果无法正确解出视频帧,则会自动切换到软解;
-
使用AVSampleBufferDisplayLayer解码时,seek时请勿使用精准seek功能
性能 | 软解 | VideoToolBox | AVSamleBufferDisplayLayer |
---|---|---|---|
内存占用 | 最高 | 居中 | 最低 |
CPU占用 | 最高 | 居中 | 最低 |
温度 | 最高 | 居中 | 最低 |
耗电量 | 最高 | 居中 | 最低 |
功能 | 软解 | VideoToolBox | AVSamleBufferDisplayLayer |
---|---|---|---|
视频格式 | 全格式 | H.264 | H.264 |
双指缩放/旋转 | 支持 | 支持 | 支持 |
填充模式 | 支持 | 支持 | 支持(开始播放前配置生效) |
画面旋转/镜像 | 支持 | 支持 | 不支持 |
截图 | 支持 | 支持 | 不支持 |
回调原始数据 | 支持 | 支持 | 不支持 |
录屏 | 支持 | 支持 | 不支持 |
_player.videoDecoderMode = MPMovieVideoDecoderMode_Hardware;