public EsStreamController(EsPlayerPacketStorage storage, Window window) { if (SynchronizationContext.Current == null) { throw new ArgumentNullException(nameof(SynchronizationContext.Current)); } _syncCtx = SynchronizationContext.Current; // Create placeholder to data streams & chunk states esStreams = new EsStream[(int)StreamType.Count]; playbackErrorSubs = new IDisposable[(int)StreamType.Count]; _playerClock = new PlayerClockProvider(_clockScheduler); dataSynchronizer = new Synchronizer(_playerClock); _dataClock = new DataClockProvider(_clockScheduler, _playerClock); _dataClock.SynchronizerClock = dataSynchronizer.Pts(); packetStorage = storage; displayWindow = window; try { player = new ESPlayer.ESPlayer(); OpenPlayer(); } catch (Exception e) { logger.Error(e); } }
private void CreatePlayer() { player = new ESPlayer.ESPlayer(); player.Open(); player.SetTrustZoneUse(true); player.SetDisplay(displayWindow); resourceConflict = false; }
private void CreatePlayer() { player = new ESPlayer.ESPlayer(); player.Open(); //The Tizen TV emulator is based on the x86 architecture. Using trust zone (DRM'ed content playback) is not supported by the emulator. if (RuntimeInformation.ProcessArchitecture != Architecture.X86) { player.SetTrustZoneUse(true); } player.SetDisplay(displayWindow); resourceConflict = false; }
private Task ChangeConfiguration(TimeSpan position, CancellationToken token) { logger.Info(""); var stateSnapshot = GetSuspendState(position); // TODO: Access to stream controller should be "blocked" in an async way while // TODO: player is restarted. Hell will break loose otherwise. SetState(PlayerState.Idle, CancellationToken.None); ClosePlayer(); player.Dispose(); player = new ESPlayer.ESPlayer(); OpenPlayer(); return(RestoreStateSnapshot(stateSnapshot, token)); }
public async Task Resume() { try { if (_suspendState == null) { logger.Info("Restore state not found"); return; } var restoreState = _suspendState; _suspendState = null; activeTaskCts.Dispose(); activeTaskCts = new CancellationTokenSource(); logger.Info("Waiting async Op completion"); await AsyncOperationCompletions().WithoutException(logger); using (await asyncOpSerializer.LockAsync(activeTaskCts.Token)) { /*Acquire lock prior to proceeding. Async ops may still be terminating. * Not applicable to real life scenarios. Applicable to integration tests*/ } logger.Info("Async Ops completed"); ClosePlayer(); player.Dispose(); // Propagate closures & disposals... or InitAvoc() may fail on MuseM in PreapareAsync(). await Task.Yield(); player = new ESPlayer.ESPlayer(); OpenPlayer(); await RestoreStateSnapshot(restoreState, activeTaskCts.Token).ConfigureAwait(false); } catch (Exception e) when(!(e is OperationCanceledException)) { logger.Error(e); } }
private PlayerClockFn CreatePlayerClockFunction(ESPlayer.ESPlayer playerInstance) { TimeSpan Del() { try { playerInstance.GetPlayingTime(out var currentClock); return(currentClock); } catch (Exception e) { if (e is ObjectDisposedException || e is InvalidOperationException) { return(PlayerClockProviderConfig.InvalidClock); } logger.Error(e); throw; } } return(Del); }
private void ClosePlayer() { logger.Info(""); DetachEventHandlers(); _playerClock.SetPlayerClockSource(null); player.Stop(); player.Close(); player.Dispose(); player = new ESPlayer.ESPlayer(); foreach (var stream in esStreams) { if (stream == null) { continue; } stream.IsConfigured = false; stream.SetPlayer(player); } }
/// <summary> /// Sets the player to be used by EsStream /// </summary> /// <param name="player">ESPlayer</param> public void SetPlayer(ESPlayer.ESPlayer player) { this.player = player; }
/// <summary> /// Sets the player to be used by EsStream /// </summary> /// <param name="newPlayer">ESPlayer</param> public void SetPlayer(ESPlayer.ESPlayer newPlayer) { logger.Info($"{streamType}"); player = newPlayer; }
/// <summary> /// Sets the player to be used by EsStream /// </summary> /// <param name="newPlayer">ESPlayer</param> public void SetPlayer(ESPlayer.ESPlayer newPlayer) { logger.Info($"{streamType}"); player = newPlayer; IsConfigured = false; }