public CdmInstance(string keySystem) { cdmInstance = IEME.create(this, keySystem, false, CDM_MODEL.E_CDM_MODEL_DEFAULT); if (cdmInstance == null) { Logger.Error($"Cannot create CDM instance for key system ${keySystem}!"); throw new DrmException($"Cannot create CDM instance for key system ${keySystem}!"); } KeySystem = keySystem; DrmType = EmeUtils.GetDrmTypeFromKeySystemName(KeySystem); sessionsDuringInitializationTcs.TrySetResult(true); }
public ICdmInstance GetCdmInstance(DrmInitData data) { var keySystem = EmeUtils.GetKeySystemName(data.SystemId); lock (drmManagerLock) { try { return(TryGetCdmInstance(keySystem, out var cdmInstance) ? cdmInstance : CreateCdmInstance(keySystem)); } catch (Exception e) { Logger.Error($"Getting CDM instance failed: {e.Message}"); return(null); } } }
private async Task <IDrmSession> CreateDrmSession(DrmInitData initData, IEnumerable <byte[]> keys, List <DrmDescription> clipDrmConfigurations) { Logger.Warn("Creating new DRM session."); var scheme = EmeUtils.GetScheme(initData.SystemId); var drmDescription = clipDrmConfigurations.FirstOrDefault(o => SchemeEquals(o.Scheme, scheme)); if (drmDescription == null) { Logger.Warn("DRM not configured."); throw new DrmException("DRM not configured."); } var iemeKeySystemName = EmeUtils.GetKeySystemName(initData.SystemId); if (IEME.isKeySystemSupported(iemeKeySystemName) != Status.kSupported) { Logger.Warn($"Key System: {iemeKeySystemName} is not supported"); throw new DrmException($"Key System: {iemeKeySystemName} is not supported"); } var session = new MediaKeySession(initData, drmDescription, keys, this); SessionInitializing(); try { await thread.Factory.Run(() => InitializeSessionOnIemeThread(session, initData)).ConfigureAwait(false); } catch (Exception e) { Logger.Error($"EME session creation fail: {e}"); SessionInitializingDone(); CloseSession(session.GetSessionId()); session.Release(); return(null); } return(session); }