private void SetAudioChannelInfo(AudioStreamSettings settings)
        {
            AudioChannelInfo audioInfo = new AudioChannelInfo
            {
                Id           = settings.SessionId,
                AudioEncoder = settings.EncodingParams.Encoder,
                SampleRate   = settings.EncodingParams.SampleRate,
                Channels     = settings.EncodingParams.Channels,
            };


            var address        = settings.NetworkParams.RemoteAddr;
            var port           = settings.NetworkParams.RemotePort;
            var _transportMode = settings.NetworkParams.TransportMode;

            if (_transportMode == TransportMode.Tcp)
            {
                address = settings.NetworkParams.LocalAddr;
                port    = settings.NetworkParams.LocalPort;
            }

            ScreencastChannelInfo audioChannelInfo = new ScreencastChannelInfo
            {
                Address     = address,
                Port        = port,
                IsMulticast = isMulticastMode,
                Transport   = _transportMode,
                MediaInfo   = audioInfo,
                SSRC        = settings.NetworkParams.SSRC,
            };

            ScreencastChannelsInfos.Add(audioChannelInfo);
        }
        private void SetupAudio(ScreencastChannelInfo audioChannelInfo)
        {
            tracer.Verb("ScreenCastControl::SetupAudio(...)");

            //logger.Debug("SetupAudio(...)");

            var audioInfo = audioChannelInfo.MediaInfo as AudioChannelInfo;

            if (audioInfo == null)
            {
                return;
            }

            var audioAddr = audioChannelInfo.Address;

            if (audioChannelInfo.Transport == TransportMode.Tcp)
            {
                audioAddr = ServerAddr;
            }

            var audioPort = audioChannelInfo.Port;

            AudioReceiver = new AudioReceiver();
            var networkPars = new NetworkSettings
            {
                LocalAddr     = audioAddr,
                LocalPort     = audioPort,
                TransportMode = audioChannelInfo.Transport,
                SSRC          = audioChannelInfo.SSRC,
            };

            var audioDeviceId = "";

            try
            {
                var devices = NAudio.Wave.DirectSoundOut.Devices;
                var device  = devices.FirstOrDefault();
                audioDeviceId = device?.Guid.ToString() ?? "";
            }
            catch (Exception ex)
            {
                tracer.Error(ex);
                //logger.Error(ex);
            }

            var audioPars = new AudioEncoderSettings
            {
                SampleRate = audioInfo.SampleRate,
                Channels   = audioInfo.Channels,
                Encoding   = "ulaw",
                DeviceId   = audioDeviceId,
            };

            AudioReceiver.Setup(audioPars, networkPars);
        }
Example #3
0
        private void SetupVideo(ScreencastChannelInfo videoChannelInfo)
        {
            logger.Verb("ScreenCastControl::SetupVideo(...)");


            //logger.Debug("SetupVideo(...)");

            var videoInfo = videoChannelInfo.MediaInfo as VideoChannelInfo;

            if (videoInfo == null)
            {
                return;
            }


            var videoAddr = videoChannelInfo.Address;

            if (videoChannelInfo.Transport == TransportMode.Tcp)
            {
                videoAddr = ServerAddr;
            }

            var videoPort       = videoChannelInfo.Port;
            var encoderSettings = new VideoEncoderSettings
            {
                //Resolution = videoInfo.Resolution,
                Width     = videoInfo.Resolution.Width,
                Height    = videoInfo.Resolution.Height,
                FrameRate = new MediaRatio(videoInfo.Fps, 1),
            };

            var networkSettings = new NetworkSettings
            {
                LocalAddr     = videoAddr,
                LocalPort     = videoPort,
                TransportMode = videoChannelInfo.Transport,
                SSRC          = videoChannelInfo.SSRC,
            };

            VideoReceiver = new VideoReceiverEx();

            VideoReceiver.DataReceived += VideoReceiver_DataReceived;

            VideoReceiver.Setup(networkSettings);

            videoRendererSink           = new D3D9RendererSink();
            encoderSettings.LowLatency  = true;
            encoderSettings.UseHardware = true;


            videoRendererSink.Setup(encoderSettings, VideoHandle);
        }
        private void SetVideoChannelInfo(VideoStreamSettings settings)
        {
            var videoEncoderPars = settings.EncodingParams;

            VideoChannelInfo videoInfo = new VideoChannelInfo
            {
                Id           = settings.SessionId,
                VideoEncoder = videoEncoderPars.Encoder,
                Resolution   = videoEncoderPars.Resolution,
                Bitrate      = videoEncoderPars.Bitrate,

                Fps = videoEncoderPars.FrameRate,
            };

            var address        = settings.NetworkParams.RemoteAddr;
            var port           = settings.NetworkParams.RemotePort;
            var _transportMode = settings.NetworkParams.TransportMode;

            if (_transportMode == TransportMode.Tcp)
            {
                address = settings.NetworkParams.LocalAddr;
                port    = settings.NetworkParams.LocalPort;
            }

            ScreencastChannelInfo videoChannelInfo = new ScreencastChannelInfo
            {
                Address     = address, //videoSettings.Address,
                Port        = port,    // videoSettings.Port,
                Transport   = _transportMode,
                IsMulticast = isMulticastMode,
                MediaInfo   = videoInfo,
                SSRC        = settings.NetworkParams.SSRC,
            };

            ScreencastChannelsInfos.Add(videoChannelInfo);
        }
Example #5
0
        public ScreencastChannelInfo[] GetScreencastInfo()
        {
            var channels = new List <ScreencastChannelInfo>();

            if (videoStreamer != null)
            {
                //if(videoStreamer.State== StreamerState.Streaming)
                {
                    var networkSettings = videoStreamer.NetworkSettings;
                    var encoderSettings = videoStreamer.EncoderSettings;


                    VideoChannelInfo videoInfo = new VideoChannelInfo
                    {
                        Id           = videoStreamer.Id,
                        VideoEncoder = encoderSettings.EncoderFormat,
                        Resolution   = encoderSettings.Resolution,
                        Bitrate      = encoderSettings.Bitrate,

                        Fps = (int)encoderSettings.FramePerSec, //encoderSettings.FrameRate.Num,
                    };

                    var address        = networkSettings.RemoteAddr;
                    var port           = networkSettings.RemotePort;
                    var _transportMode = networkSettings.TransportMode;
                    if (_transportMode == TransportMode.Tcp)
                    {
                        address = networkSettings.LocalAddr;
                        port    = networkSettings.LocalPort;
                    }

                    ScreencastChannelInfo videoChannelInfo = new ScreencastChannelInfo
                    {
                        Address     = address, //videoSettings.Address,
                        Port        = port,    // videoSettings.Port,
                        Transport   = _transportMode,
                        IsMulticast = Session.IsMulticast,
                        MediaInfo   = videoInfo,
                        SSRC        = networkSettings.SSRC,

                        ClientsCount = videoStreamer.ClientsCount,
                    };

                    channels.Add(videoChannelInfo);
                }
            }

            if (audioStreamer != null)
            {
                //if (audioStreamer.IsStreaming)
                {
                    var networkSettings = audioStreamer.NetworkSettings;
                    var encoderSettings = audioStreamer.EncoderSettings;

                    AudioChannelInfo audioInfo = new AudioChannelInfo
                    {
                        Id           = audioStreamer.Id,
                        AudioEncoder = encoderSettings.Encoder,
                        SampleRate   = encoderSettings.SampleRate,
                        Channels     = encoderSettings.Channels,
                    };


                    var address = networkSettings.RemoteAddr;
                    var port    = networkSettings.RemotePort;

                    var _transportMode = networkSettings.TransportMode;
                    if (_transportMode == TransportMode.Tcp)
                    {
                        address = networkSettings.LocalAddr;
                        port    = networkSettings.LocalPort;
                    }

                    ScreencastChannelInfo audioChannelInfo = new ScreencastChannelInfo
                    {
                        Address      = address,
                        Port         = port,
                        IsMulticast  = Session.IsMulticast,
                        Transport    = _transportMode,
                        MediaInfo    = audioInfo,
                        SSRC         = networkSettings.SSRC,
                        ClientsCount = audioStreamer.ClientsCount
                    };

                    channels.Add(audioChannelInfo);
                }
            }

            return(channels.ToArray());

            //var vci = ScreencastChannelsInfos.FirstOrDefault(i => i.MediaInfo is VideoChannelInfo);
            //if (vci != null)
            //{
            //    vci.ClientsCount = videoStreamer?.ClientsCount ?? 0;
            //}

            //var aci = ScreencastChannelsInfos.FirstOrDefault(i => i.MediaInfo is AudioChannelInfo);
            //if (aci != null)
            //{
            //    aci.ClientsCount = audioStreamer?.ClientsCount ?? 0;
            //}

            //return ScreencastChannelsInfos?.ToArray();
        }
        private void SetupVideo(ScreencastChannelInfo videoChannelInfo)
        {
            tracer.Verb("ScreenCastControl::SetupVideo(...)");


            //logger.Debug("SetupVideo(...)");

            var videoInfo = videoChannelInfo.MediaInfo as VideoChannelInfo;

            if (videoInfo == null)
            {
                return;
            }


            var videoAddr = videoChannelInfo.Address;

            if (videoChannelInfo.Transport == TransportMode.Tcp)
            {
                videoAddr = ServerAddr;
            }

            var videoPort = videoChannelInfo.Port;
            var inputPars = new VideoEncoderSettings
            {
                //Resolution = videoInfo.Resolution,
                Width     = videoInfo.Resolution.Width,
                Height    = videoInfo.Resolution.Height,
                FrameRate = new MediaRatio(videoInfo.Fps, 1),
            };

            var outputPars = new VideoEncoderSettings
            {
                //Resolution = videoInfo.Resolution,
                Width  = videoInfo.Resolution.Width,
                Height = videoInfo.Resolution.Height,
                //AspectRatio = new MediaRatio(1, 1),
                //Resolution = new System.Drawing.Size(1920, 1080);

                FrameRate = new MediaRatio(videoInfo.Fps, 1),
            };

            var networkPars = new NetworkSettings
            {
                LocalAddr     = videoAddr,
                LocalPort     = videoPort,
                TransportMode = videoChannelInfo.Transport,
                SSRC          = videoChannelInfo.SSRC,
            };

            VideoReceiver = new VideoReceiver();

            VideoReceiver.UpdateBuffer += VideoReceiver_UpdateBuffer;

            VideoReceiver.Setup(inputPars, outputPars, networkPars);

            d3dProvider = new D3D11RendererProvider();
            d3dProvider.Init(VideoReceiver.sharedTexture);


            //d3dRenderer.Setup(VideoReceiver.sharedTexture);
        }