public void OnDRMFound(DRMInitData data) { Logger.Info($"{streamType}"); if (!forceDrmChange && drmSession != null) { return; } IDrmSession newSession = drmManager.CreateDRMSession(data); // Do not reset wait for DRM event. If there is no valid session // do not want to append new data // if (newSession == null) { return; } Logger.Info($"{streamType}: New DRM session found"); forceDrmChange = false; // Decrement use counter for packet stream on old DRM Session drmSession?.Release(); // Add reference count for new session newSession.Share(); // Set new session as current & let data submitters run wild. // There is no need to store sessions. They live in player queue drmSession = newSession; }
private static IDrmManager CreateDrmManagerFake(IDrmSession drmSessionStub) { var drmManagerStub = Substitute.For <IDrmManager>(); drmManagerStub.CreateDRMSession(Arg.Any <DRMInitData>()).Returns(drmSessionStub); return(drmManagerStub); }
private void InstallLicence(IDrmSession session, string responseText) { var sessionId = session.GetSessionId(); SessionUpdate(sessionId, responseText); session.SetLicenceInstalled(); }
public async Task OnDRMFound(DrmInitData data) { using (await packetStreamLock.LockAsync()) { Logger.Info($"{streamType}"); if (!forceDrmChange && currentCdmInstance != null) { return; } IDrmSession newSession = await drmManager.GetDrmSession(data); // Do not reset wait for DRM event. If there is no valid session // do not want to append new data // if (newSession == null) { return; } Logger.Info($"{streamType}: New DRM session found"); forceDrmChange = false; // Set new session as current & let data submitters run wild. // There is no need to store sessions. They live in player queue currentCdmInstance = newSession.CdmInstance; } }
public bool TryAddSession(IEnumerable <byte[]> keys, IDrmSession session) { var addCount = 0; addCount += keys.Count(key => _cache.TryAdd(key, session)); // Duplicate keys are possible. Check if any were added. return(addCount > 0); }
public void OnClearStream() { Logger.Info($"{streamType}"); // Remove reference count held by Packet Stream. // Player may still have packets and process them. Don't force remove // drmSession?.Release(); drmSession = null; config = null; }
public bool TryGetSession(IEnumerable <byte[]> keys, out IDrmSession session) { session = null; foreach (byte[] key in keys) { if (_cache.TryGetValue(key, out session)) { return(true); } } return(false); }
private async Task <string> AcquireLicenceFromServer(IDrmSession session, byte[] requestData) { var drmDescription = session.GetDrmDescription(); var licenceUrl = new Uri(drmDescription.LicenceUrl); HttpClient httpClient = new HttpClient(new RetryHandler(new HttpClientHandler())); httpClient.BaseAddress = licenceUrl; Logger.Info(licenceUrl.AbsoluteUri); HttpContent content = new ByteArrayContent(requestData); content.Headers.ContentLength = requestData.Length; if (drmDescription.KeyRequestProperties != null) { foreach (var property in drmDescription.KeyRequestProperties) { if (!property.Key.ToLowerInvariant().Equals("content-type")) { httpClient.DefaultRequestHeaders.Add(property.Key, property.Value); } else if (MediaTypeHeaderValue.TryParse(property.Value, out var mediaType)) { content.Headers.ContentType = mediaType; } } } var responseTask = await httpClient.PostAsync(licenceUrl, content); var receiveStream = responseTask.Content.ReadAsStreamAsync(); var readStream = new StreamReader(await receiveStream, Encoding.GetEncoding(437)); var responseText = await readStream.ReadToEndAsync(); if (!responseText.StartsWith("GLS/1.0 0 OK")) { return(responseText); } const string headerMark = "\r\n\r\n"; var headerMarkIndex = responseText.IndexOf(headerMark, StringComparison.Ordinal); return(headerMarkIndex == -1 ? responseText : responseText.Substring(headerMarkIndex + headerMark.Length)); }