Код: Выделить всё
string pipelineDescription = $"rtspsrc location={rtspUrl} ! decodebin ! videoconvert ! video/x-raw,format=RGB ! appsink name=mysink";
Трубовид успешно инициализируется, и когда я перечисляю элементы, используя listpipelineelements , я вижу, что MySink существует. Однако, когда я пытаюсь извлечь элемент Mysink с помощью getChildbyName («mysink») или вручную итерацию по элементам трубопровода с помощью epteratelements , элемент mysink распознается как общий элемент, а не appsink . Это приводит к следующей ошибке во время литья типа:
Код: Выделить всё
System.InvalidCastException: Unable to cast object of type 'Gst.Element' to type 'Gst.App.AppSink'
Я использовал следующий метод для перечисления элементов трубопровода:
Код: Выделить всё
private void ListPipelineElements(Pipeline pipeline)
{
System.Diagnostics.Debug.WriteLine("Pipeline elements:");
foreach (var obj in pipeline.IterateElements())
{
if (obj is Element element)
{
System.Diagnostics.Debug.WriteLine($" - Element Name: {element.Name}, Type: {element.GetType().Name}");
}
else
{
System.Diagnostics.Debug.WriteLine("Unknown element type found.");
}
}
}
< /code>
[b] output: < /strong>
Успешно инициализированная трубопровод. Element < /li>
[*] Имя элемента: decodebin0, type: bin < /li>
Имя элемента: rtspsrc0, тип: bin
Проверенный элемент: capsfilter0
Проверенный элемент: mysink
element 'mysink' не является приложением, тип: element
clected0 letlement: vide oconte -lement0: vide oconted0 letlement: vide oconted0 letlement: vide oconted0 lement: wide /vide oconted0 lement: wide /vide oconted0 letle: vide /lecture. decodebin0
Checked element: rtspsrc0
Could not find 'mysink' as an AppSink in the pipeline.
Attempts:[/b]
[list]
[*]Retrieving Element from Pipeline:
[/list]
[list]
[*]Used [b]GetChildByName("mysink")[/b], but it was detected as a generic [b]Element[/b].
[/list]
[list]
[*]Listing Pipeline Elements:
[/list]
[list]
[*]Used [b] itatereelements () [/b] для вручную перечислять элементы трубопровода и подтвердить, что [b] mysink [/b] присутствовал, но обнаруживается как [b] element [/b].
[/list]
[list]
[*] Тип:
[/list]
var appSink = (AppSink)sinkElement;< /code>
привел к:
system.invalidcastexception
< /ul>
[list]
[*] Конвейер: < /li>
< /ul>
var appSink = new AppSink("mysink");
_pipeline.Add(appSink);
< /code>
Хотя это позволило определить элемент, динамическое соединение в трубопроводе не удалось.string pipelineDescription = "videotestsrc ! videoconvert ! video/x-raw,format=RGB ! appsink name=mysink";
[*]Rendering Video to WPF Image:
[/list]
- Attempted to update the Image control with Данные кадров GSTREAMER: < /li>
< /ul>Однако управление не обновлялось. /> Фадмы процессов с использованием appsink и обновление wpf image контроля.Код: Выделить всё
private void UpdateBGImage(int width, int height, IntPtr data) { int size = width * height * 4; int stride = ((width * 32 + 31) & ~31) / 8; this.Dispatcher.Invoke(() => { BitmapSource source = BitmapSource.Create(width, height, 96, 96, PixelFormats.Bgra32, null, data, size, stride); BGImage.Source = source; this.InvalidateVisual(); }); }
-
< /ul>- Рабочий пример с формами Windows:
Следующий трубопровод, обработанный в проекте Windows Forms:However, I need this to work in WPF with .NET 7.Код: Выделить всё
rtspsrc location=rtsp://127.0.0.1:8554/mystream latency=300 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
How can I retrieve the AppSink element from a GStreamer pipeline in C#? Если да, то какова рекомендуемое связывание GSTREAMER для .NET 7?>
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-appsin - Рабочий пример с формами Windows: