Exemplo n.º 1
0
        private void MP_OnStateChangeMediaplayer(object sender, MediaplayerState state)
        {
            switch (state)
            {
            case MediaplayerState.Disconnected:
                AddLogLine("===========DISCONNECTED STATE===");
                break;

            case MediaplayerState.Connecting:
                AddLogLine("===========CONNECTING STATE=====");
                break;

            case MediaplayerState.Stop:
                AddLogLine("===========STOP STATE===========");
                break;

            case MediaplayerState.Playing:
                AddLogLine("===========PLAYING STATE========");
                break;

            case MediaplayerState.Pause:
                AddLogLine("===========PAUSE STATE==========");
                break;

            default:
                AddLogLine("===========UNKNOWN STATE========");
                break;
            } //switch
        }
Exemplo n.º 2
0
        /// <summary>
        /// Connect to RTMP server using RTMPServerLink settings
        /// When "Mediaplayer" is connected the "OnServerConnect" event will be fired
        /// 
        /// WARNING if there are changes don't fortget to do this for eMuziek en MuziekwebLusiter 
        /// classes also (have roughly same implementatino with added securirty calls)
        /// </summary>
        protected virtual void MPThread_Connect()
        {
            lastConnectFailed = false;

            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            lock (lockVAR)
            {
                onStateChangeMediaplayer = OnStateChangeMediaplayer;
                mediaplayerState = MediaplayerState.Connecting;
                dtLastAutoReconnect = DateTime.Now;
            }
            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);

            // possible button state changed
            DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);

            netConnectionReady = false;
            netStreams.Clear();
            if (netConnection != null)
            {
                netConnection.Close();
                netConnection = null;
            }

            // Important to only do this here. In derived classes this function is overriden to add
            // securtity calls
            netConnection = new NetConnection(null); // force event over NetConnection thread (we will managed them in this class ourself)
            netConnection.OnDisconnect += new NC_OnDisconnect(NC_OnDisconnect);
            netConnection.Connect(rtmpServerLink, NC_OnConnect);
        }
Exemplo n.º 3
0
        private void RecalcMediaplayerState()
        {
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;

            //fixup var "mediaplayerState"
            lock (lockVAR)
            {
                MediaplayerState savedMediaplayerState = mediaplayerState;

                if (netConnection != null && netConnection.Connecting && !netConnection.IsConnected)
                {
                    mediaplayerState = MediaplayerState.Connecting;
                }
                else if (netConnection == null || !netConnection.IsConnected)
                {
                    mediaplayerState = MediaplayerState.Disconnected;
                }
                else if (netStreams.Count == 0)
                {
                    mediaplayerState = MediaplayerState.Stop;
                }
                else if (netStreams.Count > 0)
                {
                    switch (netStreams[0].PlayState)
                    {
                        case NetStreamState.None:
                            mediaplayerState = MediaplayerState.Stop;
                            break;
                        case NetStreamState.Connecting:
                            mediaplayerState = MediaplayerState.Connecting;
                            break;
                        case NetStreamState.Playing:
                        case NetStreamState.Seek:
                            mediaplayerState = MediaplayerState.Playing;
                            break;
                        case NetStreamState.Pause:
                            mediaplayerState = MediaplayerState.Pause;
                            break;
                    } //switch
                }
                if (savedMediaplayerState != mediaplayerState)
                {
                    onStateChangeMediaplayer = OnStateChangeMediaplayer;
                }
            }//lock

            // Fire state event if needed
            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);
        }
Exemplo n.º 4
0
        private void BassCallback_EndSync(int handle, int channel, int data, Guid newMediaItemGUID)
        {
            // WARNING we are on the BASS or Mediaplayer THREAD HERE!!!!!!! (not always!!)
            NetStreamHelper nsh = null;
            MediaItem preBufferedMediaItem = null;

            int netStreamsCount = 0;
            lock (lockVAR)
            {
                if (netStreams.Count > 0)
                {
                    nsh = netStreams[0];
                    netStreams.RemoveAt(0); // belangrijk als je het juist mediaitem wil selecteren voor afspelen
                    // nsh will be cleanup up by call to CloseAudioStream later in this function

                    // renumber
                    for (int i = 0; i < netStreams.Count; i++)
                    {
                        netStreams[i].IndexNumberInList = i;
                    } //for
                }
                netStreamsCount = netStreams.Count;
                if (netStreamsCount > 0 && newMediaItemGUID.Equals(Guid.Empty))
                {
                    // needed to change currentMediaItem
                    newMediaItemGUID = netStreams[0].Item.GUID;
                    preBufferedMediaItem = (MediaItem)netStreams[0].Item.Clone();
                }
            } //lock

            // is prebuffered netstream ready top be player?
            if (netStreamsCount > 0)
            {
                DoEvent_MP_OnPreBuffer(OnPreBuffer, this, (MediaItem)preBufferedMediaItem, PreBufferState.PrebufferingEndedAndPlaying);
            }

            MP_OnPlaylist onPlaylistEnd = null;
            Playlist playlist = null;
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            MP_OnMediaItem onMediaItemEndPlay = null;
            MediaItem item = null;
            if (nsh != null)
            {
                CloseAudioStream(nsh);
                lock (lockVAR)
                {
                    if (OnMediaItemEndPlay != null)
                    {
                        onMediaItemEndPlay = OnMediaItemEndPlay;
                        item = (MediaItem)nsh.Item.Clone();
                    }
                    if (newMediaItemGUID.Equals(Guid.Empty) && OnPlaylistEnd != null && netStreams.Count == 0)
                    {
                        onPlaylistEnd = OnPlaylistEnd;
                        playlist = (Playlist)currentPlaylist.Clone();
                    }
                    if (newMediaItemGUID.Equals(Guid.Empty) && netStreams.Count == 0)
                    {
                        onStateChangeMediaplayer = OnStateChangeMediaplayer;
                        mediaplayerState = MediaplayerState.Stop;
                    }
                } //lock

                // Fire event that MediaItem ends playing audio (event will only be fired
                // when onMediaItemEndPlay and item are not null.)
                DoEvent_MP_OnMediaItem(onMediaItemEndPlay, this, item);
                // reset (saved) position because we're at the end
                lastPosition = 0.0;

                // Now fire MediaItem events! (must be done here to for right
                // order of events!
                if (!newMediaItemGUID.Equals(Guid.Empty))
                {
                    currentPlaylist.ChangeCurrentMediaItemGUID(newMediaItemGUID, true);
                }

                // Fire event that Playlist play has ended(event will only be fired
                // when onPlaylistEnd is not null.)
                DoEvent_MP_OnPlaylist(onPlaylistEnd, this, playlist);

                // Fire event we go to stop state
                DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);

                // Startup any new audio channel (only audio playing, buffering has already been done)
                StartPlayingAudioChannel();

                // Is there a next MediaItem to play? (and no netstreams queued) 
                if (netStreamsCount <= 0 && !newMediaItemGUID.Equals(Guid.Empty))
                {
                    // Start next netstream, when event "NS_OnAssignStream_ID" is fired
                    // it will be handled further.
                    lock (lockVAR)
                    {
                        NetStreamHelper nth = NewNetStreamHelper(currentPlaylist.GetOrginalMediaItem(newMediaItemGUID));
                        if (nth != null)
                        {
                            netStreams.Add(nth);
                            nth.NetStream.Connect(); // start request for stream_id to start streamning the music data
                        }
                    } //lock
                }
            }

            // Button are probably changed
            DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);
        }
Exemplo n.º 5
0
        protected void DoEvent_MP_OnStateChangeMediaplayer(MP_OnStateChangeMediaplayer doEvent, object sender, MediaplayerState state)
        {
            if (doEvent != null)
            {
                MP_Params param = new MP_Params();
                param.Params = new object[] { doEvent, sender, state };

                SynchronizationContext sc;
                lock (lockVAR)
                {
                    sc = synchronizationContext;
                } //lock
                if (sc != null)
                {
                    sc.Post(HandleOnEventCallUserCode, param);
                }
                else
                {
                    HandleOnEventCallUserCode(param);
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Fired by NetConnection when Connection is lost
        /// </summary>
        protected virtual void NC_OnDisconnect(object sender)
        {
            MP_OnMediaItem onMediaItemEndPlay = null;
            MediaItem item = null;
            MP_OnPlaylist onPlaylistEnd = null;
            Playlist playlist = null;
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            MP_OnServer onServerDisconnect = null;

            lock (lockVAR)
            {
                // we're we playing?
                if (netStreams.Count > 0 && netStreams[0].BassHandle != 0)
                {
                    // We're playing
                    onMediaItemEndPlay = OnMediaItemEndPlay;
                    item = (MediaItem)netStreams[0].Item.Clone();

                    onPlaylistEnd = OnPlaylistEnd;
                    playlist = (Playlist)currentPlaylist.Clone();
                }

                onStateChangeMediaplayer = OnStateChangeMediaplayer;
                mediaplayerState = MediaplayerState.Disconnected;
                if ((DateTime.MaxValue - dtLastAutoReconnect).TotalDays != 0)
                {
                    dtLastAutoReconnect = DateTime.Now; // make sure we keep trying to connect
                }

                ResetStateMediaplayer();

                onServerDisconnect = OnServerDisconnect;
            }

            DateTime saved_dtLastAutoReconnect = dtLastAutoReconnect;
            try
            {
                MPThread_Disconnect();
            }
            finally
            {
                dtLastAutoReconnect = saved_dtLastAutoReconnect;
            }

            // Make sure we fire some event that playing has stopped
            DoEvent_MP_OnMediaItem(onMediaItemEndPlay, this, item);

            DoEvent_MP_OnPlaylist(onPlaylistEnd, this, playlist);

            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);

            // possible button state changed
            DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);

            DoEvent_MP_OnServer(onServerDisconnect, this);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Event fired by NetConnection
        /// </summary>
        protected void NC_OnConnect(object sender, bool success)
        {
            lastConnectFailed = !success;

            if (success)
            {
                netStreams.Clear();
                netConnectionReady = true;

                MP_OnServer onServerConnect = null;
                MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
                lock (lockVAR)
                {
                    onServerConnect = OnServerConnect;
                    onStateChangeMediaplayer = OnStateChangeMediaplayer;
                    mediaplayerState = MediaplayerState.Stop;
                } //lock

                DoEvent_MP_OnServer(onServerConnect, this);

                // Fire event we are in the Connect state
                DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);
            }
            else
            {
                MPThread_Disconnect();

                MP_OnServer onServerDisconnect = null;
                MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
                lock (lockVAR)
                {
                    onServerDisconnect = OnServerDisconnect;
                    onStateChangeMediaplayer = OnStateChangeMediaplayer;
                    mediaplayerState = MediaplayerState.Disconnected;
                    dtLastAutoReconnect = DateTime.Now; // make sure we keep trying to connect

                    ResetStateMediaplayer();
                } //lock

                DoEvent_MP_OnServer(onServerDisconnect, this);
                // Fire event we are in the "None" state
                DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);
            }

            // possible button state changed
            DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);
        }
Exemplo n.º 8
0
        private void MPThread_Stop()
        {
            MP_OnPlaylist onPlaylistEnd = null;
            Playlist playlist = null;
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            MP_OnMediaItem onMediaItemEndPlay = null;
            MediaItem item = null;
            bool buttonStateChanged = false;

            lock (lockVAR)
            {
                if (netStreams.Count > 0)
                {
                    NetStreamHelper nsh = netStreams[0];
                    if (OnMediaItemEndPlay != null)
                    {
                        onMediaItemEndPlay = OnMediaItemEndPlay;
                        item = (MediaItem)nsh.Item.Clone();
                    }
                    if (OnPlaylistEnd != null)
                    {
                        onPlaylistEnd = OnPlaylistEnd;
                        playlist = (Playlist)currentPlaylist.Clone();
                    }
                }

                if (netConnection != null && netConnection.IsConnected)
                {
                    onStateChangeMediaplayer = OnStateChangeMediaplayer;
                    mediaplayerState = MediaplayerState.Stop;
                }
                buttonStateChanged = true;

                foreach (NetStreamHelper nsh in netStreams)
                {
                    nsh.Close();
                } //foreach
                netStreams.Clear();
                lastPosition = 0.0;
                commandInProgress = false; // reset it after seek command


                onStateChangeMediaplayer = OnStateChangeMediaplayer;
                mediaplayerState = MediaplayerState.Stop;
            } //lock

            // Fire event that MediaItem ends playing audio (event will only be fired
            // when onMediaItemEndPlay and item are not null.)
            DoEvent_MP_OnMediaItem(onMediaItemEndPlay, this, item);

            // Fire event that Playlist play has ended(event will only be fired
            // when onPlaylistEnd is not null.)
            DoEvent_MP_OnPlaylist(onPlaylistEnd, this, playlist);

            // Fire event we go to stop state
            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);

            if (buttonStateChanged)
            {
                // possible button state changed
                DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);
            }
        }
Exemplo n.º 9
0
        private void MPThread_Pause()
        {
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            bool buttonStateChanged = false;

            lock (lockVAR)
            {
                if (netConnection != null && netConnection.IsConnected && netStreams.Count > 0)
                {
                    if (netStreams[0].PlayState == NetStreamState.Playing)
                    {
                        // Saved paused position
                        lastPosition = Position;
                        // pause audio playing using bass
                        Bass.BASS_ChannelPause(netStreams[0].BassHandle);
                        // Send server pause command
                        netStreams[0].NetStream.Pause(true);
                        // set state
                        netStreams[0].PlayState = NetStreamState.Pause;

                        onStateChangeMediaplayer = OnStateChangeMediaplayer;
                        mediaplayerState = MediaplayerState.Pause;
                        buttonStateChanged = true;
                    }
                }
                else
                {
                    commandInProgress = false;
                }
            }

            // Fire event we go to pause state
            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);

            if (buttonStateChanged)
            {
                // possible button state changed
                DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// -1 = start at beginning
        /// </summary>
        /// <param name="startPositionInMS"></param>
        private void MPThread_Play(long startPositionInMS = -1)
        {
            NetStreamHelper nth = null;
            MP_OnStateChangeMediaplayer onStateChangeMediaplayer = null;
            MP_OnPlaylist onPlaylistStart = null;
            Playlist playlist = null;
            bool buttonStateChanged = false;

            lock (lockVAR)
            {
                if (netConnection != null && netConnection.IsConnected)
                {
                    if (netStreams.Count > 0)
                    {
                        if (netStreams[0].NetStream.PauseIsActive)
                        {
                            // unpause audio playing using bass
                            Bass.BASS_ChannelPlay(netStreams[0].BassHandle, false);
                            // restart streaming again
                            netStreams[0].NetStream.Pause(false);

                            netStreams[0].PlayState = NetStreamState.Playing;
                            buttonStateChanged = true;
                            mediaplayerState = MediaplayerState.Playing;
                            onStateChangeMediaplayer = OnStateChangeMediaplayer;
                        }
                    }
                    else
                    {
                        // Start playing
                        netStreams.Clear();

                        // Simulate MediaItem events changed (oldMediaitem is null!)
                        TriggerMediaItemEvents();
                        buttonStateChanged = true;

                        // Start new netstream, when event "NS_OnAssignStream_ID" is fired
                        // it will be handled further.
                        //lock (lockVAR)
                        {
                            nth = NewNetStreamHelper(currentPlaylist.GetOrginalMediaItem(currentPlaylist.CurrentMediaItem.GUID));
                            if (nth != null)
                            {
                                netStreams.Add(nth);

                                onStateChangeMediaplayer = OnStateChangeMediaplayer;
                                mediaplayerState = MediaplayerState.Playing;
                                onPlaylistStart = OnPlaylistStart;
                                playlist = (Playlist)currentPlaylist.Clone();
                            }
                            else
                            {
                                onStateChangeMediaplayer = OnStateChangeMediaplayer;
                                mediaplayerState = MediaplayerState.Stop;
                            }
                        } //lock
                    }
                }
                else
                {
                    commandInProgress = false;
                }
            } //lock

            // Fire event we go to Play state
            DoEvent_MP_OnStateChangeMediaplayer(onStateChangeMediaplayer, this, mediaplayerState);
            
            if (buttonStateChanged)
            {
                // possible button state changed
                DoEvent_MP_OnControleButtonStateChange(OnControleButtonStateChange, this);
            }

            // Fire event that Playlist play has started(event will only be fired
            // when onPlaylistStart is not null.)
            DoEvent_MP_OnPlaylist(onPlaylistStart, this, playlist);
            if (nth != null)
            {
                nth.NetStream.Connect(); // start request for stream_id to start streamning the music data
            }
        }
Exemplo n.º 11
0
        private void DoOnStateChangeMediaplayer(object sender, MediaplayerState state)
        {
            switch (state)
            {
                case MediaplayerState.Disconnected:
                    Console.WriteLine("===========DISCONNECTED STATE===");
                    break;
                case MediaplayerState.Connecting:
                    Console.WriteLine("===========CONNECTING STATE=====");
                    break;

                case MediaplayerState.Stop:
                    Console.WriteLine("===========STOP STATE===========");
                    break;
                case MediaplayerState.Playing:
                    Console.WriteLine("===========PLAYING STATE========");
                    break;
                case MediaplayerState.Pause:
                    Console.WriteLine("===========PAUSE STATE==========");
                    break;
                                    
                default:
                    Console.WriteLine("===========UNKNOWN STATE========");
                    break;
            } //switch
        }