Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }