Я пытаюсь воспроизвести канал встроенной веб-камеры в MediaElement
в приложении UWP. Он отлично работает для некоторых пользователей, но для большинства не воспроизводится канал, и я не понимаю, в чем может быть проблема.
Некоторые наблюдения, когда канал веб-камеры не воспроизводится:
- Код выполняется без каких-либо исключений
- Отображается диалоговое окно, запрашивающее у пользователя разрешение на доступ к камере
- Светодиод, указывающий, что веб-камера используется, загорается сразу после его выполнения, но нет ленты.
- Приложения Skype и Камера работают нормально.
- Приложение работало нормально до недели назад. За это время изменилось несколько вещей, которые могли повлиять:
- Установленный Kaspersky
- Набор windows обновлений
- Удаленная профессиональная версия VS2017 и сообщество VS2019 Edition и установлен VS2019 Professional Edition
Некоторая дополнительная информация, которая может потребоваться, чтобы сузить причину.
- Веб-камера включена в манифесте пакета приложения
- Целевая версия приложения: 18362
- Мин. версия приложения: 18362
- Windows Версия ОС: 18362
Любая справка по это было бы очень признательно. Заранее большое спасибо!
Вот фрагмент кода, используемый для воспроизведения потока веб-камеры, где VideoStreamer - MediaElement
.
private async Task PlayLiveVideo()
{
var allGroups = await MediaFrameSourceGroup.FindAllAsync();
var eligibleGroups = allGroups.Select(g => new
{
Group = g,
// For each source kind, find the source which offers that kind of media frame,
// or null if there is no such source.
SourceInfos = new MediaFrameSourceInfo[]
{
g.SourceInfos.FirstOrDefault(info => info.DeviceInformation?.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front
&& info.SourceKind == MediaFrameSourceKind.Color),
g.SourceInfos.FirstOrDefault(info => info.DeviceInformation?.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
&& info.SourceKind == MediaFrameSourceKind.Color)
}
}).Where(g => g.SourceInfos.Any(info => info != null)).ToList();
if (eligibleGroups.Count == 0)
{
System.Diagnostics.Debug.WriteLine("No source group with front and back-facing camera found.");
return;
}
var selectedGroupIndex = 0; // Select the first eligible group
MediaFrameSourceGroup selectedGroup = eligibleGroups[selectedGroupIndex].Group;
MediaFrameSourceInfo frontSourceInfo = selectedGroup.SourceInfos[0];
MediaCapture mediaCapture = new MediaCapture();
MediaCaptureInitializationSettings settings = new MediaCaptureInitializationSettings()
{
SourceGroup = selectedGroup,
SharingMode = MediaCaptureSharingMode.ExclusiveControl,
MemoryPreference = MediaCaptureMemoryPreference.Cpu,
StreamingCaptureMode = StreamingCaptureMode.Video,
};
try
{
await mediaCapture.InitializeAsync(settings);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("MediaCapture initialization failed: " + ex.Message);
return;
}
var frameMediaSource1 = MediaSource.CreateFromMediaFrameSource(mediaCapture.FrameSources[frontSourceInfo.Id]);
VideoStreamer.SetPlaybackSource(frameMediaSource1);
VideoStreamer.Play();
}