Skip to content

hardwareDecode

xinbaicheng edited this page Oct 31, 2017 · 10 revisions

一. 接口定义

v1.5.0 or earlier

/**
 * @param flag 开启硬解的标志位
 */
public void setCodecFlag(int flag)

v1.5.1 or later

public enum KSYDecodeMode {
    KSY_DECODE_MODE_SOFTWARE,
    KSY_DECODE_MODE_AUTO,
    KSY_DECODE_MODE_HARDWARE
}

/**
 * @param mode 硬解模式
 */
public void setDecodeMode(KSYDecodeMode mode)

SDK提供三种解码模式,其含义如下所示

名字 含义
KSY_DECODE_MODE_SOFTWARE 播放器使用软解
KSY_DECODE_MODE_AUTO SDK尝试使用硬解,当机器不在白名单里时,自动切换至软解
KSY_DECODE_MODE_HARDWARE SDK尝试使用硬解,当机器不在白名单里时,自动切换至软解

在创建好解码器之后,无论是硬解还是软解,播放器都会通过监听器OnInfoListener将当前使用的解码类型告知使用者

硬解: MEDIA_INFO_HARDWARE_DECODE
软解: MEDIA_INFO_SOFTWARE_DECODE

该消息通知的SDK版本要求: v1.4.6 or later

具体消息定义可参见:https://github.com/ksvc/KSYMediaPlayer_Android/wiki/KsyMediaPlayerConstants

二. 硬解前后台切换黑屏/花屏

解决方法:KSYTextureView

三. 注意事项

  1. 使用硬解功能时建议使用KSYTextureView
  2. 如若不使用TextureView, 而使用纹理Id创建SurfaceTexture, 最后释放资源时应先释放播放器, 再释放SurfaceTexture, 否则容易出现崩溃

四. 调用示例

v1.5.0 or earlier

播放器默认使用软解,在调用本接口后播放器才会尝试使用硬解,如果机型不在白名单中,仍旧使用软解
SDK暂时只支持对264和265视频的硬解,且须在prepareAsync之前设置

KSYMediaPlayer ksyMediaPlayer;

// 硬解264
ksyMediaPlayer.setCodecFlag(KSYMediaPlayer.KSY_USE_MEDIACODEC_H264);

// 硬解265
ksyMediaPlayer.setCodecFlag(KSYMediaPlayer.KSY_USE_MEDIACODEC_H265);

//硬解264&265
ksyMediaPlayer.setCodecFlag(KSYMediaPlayer.KSY_USE_MEDIACODEC_ALL);

ksyMediaPlayer.prepareAsync();

v1.5.1 or later

KSYMediaPlayer ksyMediaPlayer;

//使用软解
ksyMediaPlayer.setDecodeMode(KSYDecodeMode.KSY_DECODE_MODE_SOFTWARE);

//使用自动模式
ksyMediaPlayer.setDecodeMode(KSYDecodeMode.KSY_DECODE_MODE_AUTO);
Clone this wiki locally