Элемент управления или метод для отображения видеопотока WebRTC в WPFC#

Место общения программистов C#
Ответить
Anonymous
 Элемент управления или метод для отображения видеопотока WebRTC в WPF

Сообщение Anonymous »

Я работаю над приложением C# WPF с использованием .NET 8 и пытаюсь эффективно отображать видеопоток WebRTC. В настоящее время я использую VideoView из LibVLC, но поток не отображается должным образом. Я ищу наиболее эффективный способ рендеринга видео WebRTC в WPF. Я читал о различных подходах, таких как MediaElement, WriteableBitmap и VideoView, но не уверен, какой из них лучше всего подходит для плавного воспроизведения и минимальной задержки с помощью WebRTC в WPF.
Вот код, который я сейчас использую. В этом примере устанавливается соединение WebRTC, принимаются видеокадры и делается попытка отобразить их в VideoView:

Код: Выделить всё

public async Task Main(VideoView videoView, int cameraIndex, CancellationToken token, string cameraUrl)
{
Debug.WriteLine("Starting WebRTC connection setup.");

_libVLC = new LibVLC();
_mediaPlayer = new MediaPlayer(_libVLC);
_videoView = videoView;

// Assign MediaPlayer when _videoView is fully loaded
_videoView.Loaded += (sender, e) =>
{
_videoView.MediaPlayer = _mediaPlayer;
Debug.WriteLine("MediaPlayer set on VideoView.");
};

await StartSocket(cameraIndex, token);
await SendInitialRequest(cameraIndex, cameraUrl, token);
await InitializePeerConnection(cameraIndex, token);
_ = Task.Run(() => ReceiveWebSocketMessages(cameraIndex, token));

Debug.WriteLine("WebRTC connection setup complete.");
}

private async Task InitializePeerConnection(int cameraIndex, CancellationToken token)
{
var config = new PeerConnectionConfiguration
{
IceServers = new List
{
new IceServer
{
Urls = new List { "turn:localhost:3478" },
TurnUserName = "testuser",
TurnPassword = "testpassword"
}
}
};

pc = new PeerConnection();
await pc.InitializeAsync(config);
Debug.WriteLine("PeerConnection initialized.");

// Configure the transceiver for receiving video
var videoTransceiver = pc.AddTransceiver(MediaKind.Video);
videoTransceiver.DesiredDirection = Transceiver.Direction.ReceiveOnly;

// Event for handling the remote video track
pc.VideoTrackAdded += async (RemoteVideoTrack track) =>
{
Debug.WriteLine("Remote video track added.");

// Here, frame processing logic can be added if we want debug info.
track.I420AVideoFrameReady += frame =>
{
Debug.WriteLine($"Frame received - Width: {frame.width}, Height: {frame.height}");
};

// Play once MediaPlayer and VideoView are initialized
if (!_mediaPlayer.IsPlaying)
{
_mediaPlayer.Play();
Debug.WriteLine("MediaPlayer started.");
}
};
}
Проблема:
Кадры принимаются из потока WebRTC (что подтверждено журналированием), но не отображаются в VideoView.< /p>
Вопросы:
  • Является ли VideoView лучшим выбором для отображения видео WebRTC в WPF или мне следует использовать другой элемент управления? , например MediaElement или WriteableBitmap?
  • Существует ли более эффективный метод прямого отображения потоков WebRTC в WPF, который минимизирует задержку?
  • Если VideoView подходит , как я могу гарантировать, что он правильно обновляется с входящими кадрами WebRTC?
Любые рекомендации, советы или оптимизации по отображению видеопотоков WebRTC в WPF приветствуются! Заранее благодарим вас за помощь.
Что я пробовал:
  • Сначала я использовал VideoView из библиотеки LibVLC, чтобы визуализировать видеопоток WebRTC, как показано в приведенном выше коде. MediaPlayer установлен и воспроизводится, и я подтвердил, что кадры WebRTC принимаются в событии VideoTrackAdded. Однако сам элемент управления VideoView не обновляет и не отображает поток.
  • Я также пытался вызвать _mediaPlayer.Play() в разных местах, чтобы убедиться, что он запущен, и добавил операторы отладки в убедитесь, что кадры принимаются должным образом.


Подробнее здесь: https://stackoverflow.com/questions/791 ... eam-in-wpf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»