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()); } } }
// 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); } }
// 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); }
// 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); } }