芒果DRM通用框架
Android端¶
集成时,需依赖芒果自研播放器,商业MultiDRM与芒果自研DRM(LightPlay)共用同一芒果DRM通用框架,通过不同配置参数使用不同类型DRM。
以下为芒果DRM通用框架的API使用方法
1.初始化DRMMgtvDrmManager,为全局单例,一般情况只需调用一次¶
if(!MgtvDrmManager.getInstance().isInited()) {
//未初始化MgtvDrmManager
MgtvDrmManager.getInstance().setOnInitListener(new IDrmManager.OnInitListener() {
@Override
public void onInitSuccess() {
//初始化成功
}
@Override
public void onInitError(String errCode, String msg) {
//初始化失败
// errCode -100626 设备root原因初始化失败
}
});
MgtvDrmManager.getInstance().init(ImgoApplication.getApplication(), new IDrmManager.InitConfig(mFilePath, config.enableRoot));
} else {
//已初始化MgtvDrmManager
}
2.每次播放前,生成DrmSession¶
/**
* 生成一个DRM Session用于对应一次DRM流程,会话可以与播放器绑定
* 一次播放对应一个Session
*
* @param config 用于生成drm session的配置
* @return 生成的Session
*/
drmSession = MgtvDrmManager.getInstance().genDrmSession(new IDrmManager.SessionConfig(drmToken, drmCid, drmType, enableRoot, drmInfos));
drmSession.addOnProvisionSuccessListener(new IDrmSession.OnProvisionSuccessListener() {
@Override
public void onSuccess(final IDrmSession session) {
ThreadUtil.postOnUiThread(new Runnable() {
@Override
public void run() {
//drm session provision流程成功,如果调用了session.close则不会回调
Log.i("drmtest", "ProvisionSuccess:" + session.hashCode());
ToastUtil.showToastLong("ProvisionSuccess:" + session.hashCode());
}
});
}
});
drmSession.addOnProvisionErrorListener(new IDrmSession.OnProvisionErrorListener() {
@Override
public void onError(IDrmSession session, final int errorCode, final String msg) {
//drm session provision流程失败,如果调用了session.close则不会回调
Log.i("drmtest", "ProvisionError " + errorCode + "-" + msg);
}
});
drmSession.setOnReportListener(new IDrmSession.OnReportListener() {
@Override
public void onReport(String errorCode, String errorString, String lic) {
//与之前一样进行DRM大数据上报
Log.i("drmtest", "ProvisionReport " + errorCode + "-" + errorString + "-" + lic);
sendDrmReport(errorCode, errorString, lic);
}
@Override
public void onExReport(String errorCode, String errorString, String lic, int firm) {
}
});
// 在非代理DRM模式时, 初始化DRM SESSION同时,
// 并行可以进行播放,塞入地址为原始播放地址,不必使用makeurl来创建代理地址.
if (videoPlayer != null) {
if (seamless && changeDef) {
videoPlayer.switchSmoothSource(new SmoothMediaSource(MgtvMediaPlayer.READ_DATASOURCE_TYPE_NORMAL, getPlayUrl(), getPlayUrl()));
} else {
videoPlayer.startPlayer("", getPlayUrl(), null, null, mVideoId, drmSession);
}
}
//3.drm异步provision(内部创建线程)
drmSession.provisionAsync();
/**
* SessionConfig
*
* @param drmToken intertrust使用
* @param drmCid intertrust使用
* @param drmType 0-marlin 1-marlin-hls 2-cencdash 3-fairplay hls 4-cenc hls 5-sm4 hls
* @param enableRoot 是否运行root
* @param drmInfoList drm license url列表
*/
public SessionConfig(String drmToken, String drmCid,
String drmType, boolean enableRoot, List<MgtvDrmParams.DrmInfo> drmInfoList);
3.退出APP时释放¶
MgtvDrmManager.getInstance().release()