private void mk_play_data(IntPtr userdata, int track_type, int codec_id, IntPtr data, int len, uint dts, uint pts) { unsafe { var a = new Span <byte>(data.ToPointer(), len).ToArray(); } var mediaInfo = new MediaPlayInfo { Codec = (EM_Codec)codec_id, Data = data, Dts = dts, IsVideo = track_type == 0, Length = len, Pts = pts }; if (this.OnDataAsync != null) { mediaInfo.FillData(true); _ = Task.Run(() => OnDataAsync.Invoke(mediaInfo)); } else if (this.OnData != null) { OnData.Invoke(mediaInfo); } }
private async Task ReceiveAsync() { try { var buffer = new byte[_lavaConfig.BufferSize]; var finalBuffer = default(byte[]); var offset = 0; do { var receiveResult = await _webSocket.ReceiveAsync(buffer, _cancellationToken.Token); if (!receiveResult.EndOfMessage) { finalBuffer = new byte[_lavaConfig.BufferSize * 2]; buffer.CopyTo(finalBuffer, offset); offset += receiveResult.Count; buffer = new byte[_lavaConfig.BufferSize]; continue; } switch (receiveResult.MessageType) { case WebSocketMessageType.Text: await OnDataAsync.Invoke(RemoveTrailingNulls(finalBuffer ?? buffer)); finalBuffer = default; buffer = new byte[_lavaConfig.BufferSize]; offset = 0; break; case WebSocketMessageType.Close: await DisconnectAsync(); break; } } while (_webSocket.State == WebSocketState.Open && !_cancellationToken.IsCancellationRequested); } catch (Exception exception) { if (exception is TaskCanceledException || exception is OperationCanceledException || exception is ObjectDisposedException) { return; } await OnErrorAsync.Invoke(exception); await RetryConnectionAsync(); } }
private async Task ReceiveAsync() { try { var buffer = new byte[1024]; var finalBuffer = default(byte[]); var offset = 0; do { var receiveResult = await _webSocket.ReceiveAsync(buffer, _connectionTokenSource.Token); if (!receiveResult.EndOfMessage) { finalBuffer = new byte[2048]; buffer.CopyTo(finalBuffer, offset); offset += receiveResult.Count; buffer = new byte[1024]; continue; } switch (receiveResult.MessageType) { case WebSocketMessageType.Text: await OnDataAsync.Invoke(new DataEventArgs(finalBuffer)); break; case WebSocketMessageType.Close: await DisconnectAsync(); break; } } while (_webSocket.State == WebSocketState.Open && !_connectionTokenSource.IsCancellationRequested); } catch (Exception exception) { if (exception is TaskCanceledException or OperationCanceledException or ObjectDisposedException) { return; } await OnErrorAsync(new ErrorEventArgs(exception)); } }