Beispiel #1
0
 public void ProcessAudio(RemoteSessionAudio audio)
 {
     if (Buffer != null)
     {
         Buffer.AddItem(audio.Idx);
     }
     else
     {
         Send(GetAudioBytes(audio.Data, audio.Format, audio.Bitrate));
     }
 }
 public void ProcessAudio(RemoteSessionAudio audio)
 {
     if (Buffer != null)
     {
         Buffer.AddItem(audio.Idx);
     }
     else
     {
         using (var audioStream = new MemoryStream())
         {
             var bytes = GetAudioBytes(audio.Data, audio.Format, audio.Bitrate);
             audioStream.Write(bytes, 0, bytes.Length);
             Send(audioStream.ToArray());
         }
     }
 }
Beispiel #3
0
        // new audio
        private void ProcessAudio(byte[] data)
        {
            if (RemoteSession.AudioFormat.HasValue &&
                RemoteSession.AudioFormat.Value == AudioFormat.NONE)
            {
                return;
            }

            try
            {
                var audio = new RemoteSessionAudio
                {
                    Idx     = ++_audioIdx,
                    Format  = RemoteSession.AudioFormat.HasValue ? RemoteSession.AudioFormat.Value : AudioFormat.MP3,
                    Bitrate = RemoteSession.AudioBitrate.HasValue ? RemoteSession.AudioBitrate.Value : 128,
                    Data    = data
                };

                _cache.Insert(
                    "remoteSessionAudio_" + RemoteSession.Id + "_" + audio.Idx,
                    audio,
                    null,
                    DateTime.Now.AddMilliseconds(_audioCacheDuration),
                    Cache.NoSlidingExpiration);

                Trace.TraceInformation("Received audio {0}, remote session {1}", audio.Idx, RemoteSession.Id);

                // HTML5 client(s)
                if (AudioWebSockets.Count > 0)
                {
                    Trace.TraceInformation("Sending audio {0} on websocket(s), remote session {1}", audio.Idx, RemoteSession.Id);

                    foreach (var webSocket in AudioWebSockets)
                    {
                        webSocket.ProcessAudio(audio);
                    }
                }
            }
            catch (Exception exc)
            {
                Trace.TraceError("Failed to process audio, remote session {0} ({1})", RemoteSession.Id, exc);
            }
        }
Beispiel #4
0
        // retrieve a cached audio
        public RemoteSessionAudio GetCachedAudio(int audioIdx)
        {
            RemoteSessionAudio audio = null;

            try
            {
                var audioObj = _cache["remoteSessionAudio_" + RemoteSession.Id + "_" + audioIdx];
                if (audioObj != null)
                {
                    audio = (RemoteSessionAudio)audioObj;
                    Trace.TraceInformation("Retrieved audio {0} from cache, remote session {1}", audioIdx, RemoteSession.Id);
                }
            }
            catch (Exception exc)
            {
                Trace.TraceError("Failed to retrieve audio {0} from cache, remote session {1} ({2})", audioIdx, RemoteSession.Id, exc);
            }

            return(audio);
        }
Beispiel #5
0
        // new audio
        private void ProcessAudio(byte[] data)
        {
            try
            {
                var audio = new RemoteSessionAudio
                {
                    Idx     = _audioIdx == int.MaxValue ? 1 : ++_audioIdx,
                    Format  = RemoteSession.AudioFormat.HasValue ? RemoteSession.AudioFormat.Value : AudioFormat.MP3,
                    Bitrate = RemoteSession.AudioBitrate.HasValue ? RemoteSession.AudioBitrate.Value : 128,
                    Data    = data
                };

                _cache.Insert(
                    "remoteSessionAudio_" + RemoteSession.Id + "_" + audio.Idx,
                    audio,
                    null,
                    DateTime.Now.AddMilliseconds(_audioCacheDuration),
                    Cache.NoSlidingExpiration);

                Trace.TraceInformation("Received audio {0}, remote session {1}", audio.Idx, RemoteSession.Id);

                // send audio to client(s)
                foreach (var client in Clients.Values)
                {
                    // audio websocket
                    if (client.AudioWebSocket != null)
                    {
                        Trace.TraceInformation("Sending audio {0} on audio websocket, client {1}, remote session {2}", audio.Idx, client.Id, RemoteSession.Id);
                        client.AudioWebSocket.ProcessAudio(audio);
                    }
                }
            }
            catch (Exception exc)
            {
                Trace.TraceError("Failed to process audio, remote session {0} ({1})", RemoteSession.Id, exc);
            }
        }