воспроизводить аудио с сервера TCP / IP в клиенте UWP на PI3 - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать приложение uwp, которое будет клиентом и будет работать на PI3.Сервер представляет собой приложение C # Winforms, которое работает на моем компьютере с Windows 10, которое я нашел здесь: https://www.codeproject.com/Articles/482735/TCP-Audio-Streamer-and-Player-Voice-Chat-over-IP. Сервер может передавать аудио с микрофонного устройства на все подключенные клиенты.Хотя у проекта есть собственный клиент, я могу запускать и сервер, и клиент на своем локальном компьютере.Теперь я хочу создать подобное клиентское приложение в UWP C #.Используя пример UWP StreamSocketActivity, я могу подключиться к серверу.Но я не знаю, как получить аудиоданные и воспроизвести их на клиенте UWP.Кто-нибудь может мне помочь?Blow - это скриншот запущенного сервера, который имеет одно соединение от клиента uwp: Клиент подключается к серверу

Заранее спасибо!

1 Ответ

0 голосов
/ 20 февраля 2019

Как упоминалось в статье, протокол, используемый для передачи аудиоданных, настраивается.

Примечание !!!Это частный проект.Вы не можете использовать мои серверы или клиенты с другими стандартизированными серверами или клиентами.Я не использую стандарты, такие как RTCP или SDP.

Код можно найти в TcpProtocols.cs .В клиентском приложении UWP вам необходимо преобразовать код для UWP.В этом документе показано, как создать базовый клиент сокета TCP в UWP.Но вам также необходимо постоянно изменять код для получения данных с сервера.Следующий код может быть полезен для вас.

    private async void StartClient()
    {
        try
        {
            // Create the StreamSocket and establish a connection to the echo server.
            using (var streamSocket = new Windows.Networking.Sockets.StreamSocket())
            {
                // The server hostname that we will be establishing a connection to. In this example, the server and client are in the same process.
                var hostName = new Windows.Networking.HostName(TxtHostName.Text);

                await streamSocket.ConnectAsync(hostName, TxtPortNumber.Text);

                while(true)
                {
                    using (var reader = new DataReader(streamSocket.InputStream))
                    {
                        reader.InputStreamOptions = InputStreamOptions.Partial;

                        uint numAudioBytes = await reader.LoadAsync(reader.UnconsumedBufferLength);
                        byte[] audioBytes = new byte[numAudioBytes];
                        reader.ReadBytes(audioBytes);

                        //Parse data to RTP packet
                        audioBytes = Convert_Protocol_LH(audioBytes);

                        var pcmStream = audioBytes.AsBuffer().AsStream().AsRandomAccessStream();
                        MediaElementForAudio.SetSource(pcmStream, "audio/x-wav");
                        MediaElementForAudio.Play();
                    }
                }                    
            }
        }
        catch (Exception ex)
        {
            Windows.Networking.Sockets.SocketErrorStatus webErrorStatus = Windows.Networking.Sockets.SocketError.GetStatus(ex.GetBaseException().HResult);
        }
    }

ОБНОВЛЕНИЕ:

Пакет RTP enter image description here

RTSP дляЖивое аудио рекомендуется и широко используется. Протокол потоковой передачи в реальном времени (RTSP) - это протокол управления сетью, разработанный для использования в развлекательных и коммуникационных системах для управления серверами потокового мультимедиа.Протокол используется для установления и управления медиа-сессиями между конечными точками.Есть некоторые преимущества RTSP.В этом решении вам нужно создать сервер RTSP, а затем использовать библиотеку VLC.MediaElement или другую библиотеку, которая поддерживает Windows IoT Core, в вашем приложении UWP.Но я не уверен, что эта библиотека поддерживает RTP.Кроме того, в этом документе показаны поддерживаемые кодеки в Windows IoT Core.

...