Я пытаюсь захватить видео с веб-камеры, используя SharpDX.MediaFoundation (4.2.0).Я могу отобразить тип носителя по умолчанию, но я хочу иметь возможность выбирать между различными доступными форматами устройства.
Я могу перечислять источники устройства, но не могу получить информацию отипы мультимедиа.
var attributes = new MediaAttributes(1);
attributes.Set(CaptureDeviceAttributeKeys.SourceType.Guid, CaptureDeviceAttributeKeys.SourceTypeVideoCapture.Guid);
var mediaSource = MediaFactory.EnumDeviceSources(attributes)[0].ActivateObject<MediaSource>();
mediaSource.CreatePresentationDescriptor(out var presentationDescriptor);
for (int d = 0; d < presentationDescriptor.StreamDescriptorCount; d++)
{
presentationDescriptor.GetStreamDescriptorByIndex(d, out var isSelected, out var streamDescriptor);
for (int i = 0; i < streamDescriptor.MediaTypeHandler.MediaTypeCount; i++)
{
var type = streamDescriptor.MediaTypeHandler.GetMediaTypeByIndex(i);
if (type.MajorType == MediaTypeGuids.Video)
{
var v = type.QueryInterface<VideoMediaType>();
// contains always empty values
var x = v.VideoFormat;
}
}
}
QueryInterface не работал.поэтому я попытался
new VideoMediaType(type.NativePointer)
Но результат тот же.
Кроме того, я пытался сделать то же самое с SourceReader
var reader = new SourceReader(mediaSource);
var mediaTypeIndex = 0;
using (var mt = reader.GetNativeMediaType(0, mediaTypeIndex))
{
if (mt.MajorType == MediaTypeGuids.Video)
{
//var vmt = new VideoMediaType(mt.NativePointer);
var v = mt.QueryInterface<VideoMediaType>();
var x = v.VideoFormat;
}
}
Тот же результат.Любые советы?