Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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);
                }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Sets the player to be used by EsStream
 /// </summary>
 /// <param name="player">ESPlayer</param>
 public void SetPlayer(ESPlayer.ESPlayer player)
 {
     this.player = player;
 }
Ejemplo n.º 9
0
 /// <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;
 }
Ejemplo n.º 10
0
 /// <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;
 }