问题标签 [gstreamer-sharp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - GStreamer# 等效于视频叠加功能
我有一个用于渲染视频流的 C#/Mono 应用程序,直到最近,我一直在使用自己内部开发的 InterOp 绑定。
我现在正从那种方法转向使用 GStreamer# 的方法,因为这可能会减少维护工作量,至少对我来说是这样 :-)
由于我需要将独立的视频流绑定到特定的DrawableArea小部件,因此我的方法捕获了 GStreamer 消息,然后使用函数gst_is_video_overlay_prepare_window_handle_message(msg)(a)检查它们。
如果返回 true,然后我会调用 来响应,之前使用 获取的小部件的句柄在gst_video_overlay_set_window_handle(xid)哪里。xidgdk_x11_window_get_xid()
我的问题是:通过 GStreamer# 代码搜索,我找不到执行绑定的等效函数,所以我想知道这是如何完成的。
有人有什么建议或信息可以提供吗?
这两个函数的源代码在里面,gst-plugins-base-1.4.4/gst-libs/gst/video/videooverlay.c所以,在紧要关头,我可以虚拟化我自己的函数来完成这项工作(或者只是坚持我们的绑定),但在我看来,这将被包含在GStreamer# 因为渲染到特定的小部件似乎是一个非常方便的工具。
(a)那些 GStreamer 摇摆不定。他们必须用所有不必要的打字来替换他们的键盘:-)
gstreamer - 后处理 GStreamer playbin 管道
GStreamer 中的playbin管道是一件很棒的事情,因为我不需要对处理流所需的各个元素有任何真正的了解。
但是,如果我想将视频旋转 90 度(或翻转它,或其他任何东西),看来我必须手动编码管道。目前,我正在这样做:
但是,因为我将视频绑定到特定的 Gtk 小部件,所以我捕获了询问小部件 ID 的消息并将其提供回 GStreamer,以便它可以正确绑定。
不幸的是,根据gst-inspect-1.0,上面管道中的这些元素似乎都没有真正提供GstVideoOverlay接口,因此,当我查询可以接收小部件标识符的元素时,我null很快就会出现空指针错误。或者,如果在返回时我什么都不做,则null不会发生绑定,GStreamer 会打开一个单独的窗口来流式传输视频。
事实证明,它playbin本身提供了所需的接口。
我还尝试用 替换autovideosink,ximagesink然后用替换xvimagesink,两者都声称支持接口,但在这两种情况下,都没有找到支持接口的元素。
所以我的问题基本上是这样的:
1/我可以在上面的管道中插入一些提供接口的东西吗?
2/如果做不到这一点,有没有办法playbin正确分析流,然后捕获其输出并将其传递给更多过滤器?我正在考虑的事情是:
换句话说,我可以使用类似的video-sink属性playbin来阻止它创建自己的接收器,而是将其数据传递给videoflip?
我更喜欢可以实现的东西,Gst.Parse.Launch()因为如果可以避免的话,我真的不想手动创建每个管道元素。
c# - 某些 GStreamer 管道不被视为垃圾箱?
我可以从命令行运行一个非常简单的启动管道,因此:
并且,从 开始gst-inspect-1.0,ximagesink似乎支持该GstVideoOverlay界面,以便我可以将其绑定到特定的 Gtk 小部件。
但是,当尝试从我碰巧在网上发现的一些代码中执行此操作时,似乎管道不被视为垃圾箱(因此,没有为其提供小部件 ID)。
执行此操作的代码如下,首先创建管道并将其设置为捕获总线消息:
然后实际处理总线消息:
现在,由于某种原因,src is Gst.Bin是错误的,这意味着windowXId(我之前设置的小部件 ID)永远不会与 GStreamer 通信。
但是,如果我提供playbin管道(playbin uri=XYZZY videosink='videoconvert ! videoflip method=none ! videoconvert ! autovideosink'如果您有兴趣),它可以正常工作。
据我从文档中可以看出Gst.Parse.Launch(),它应该给我一个管道,它是一个 bin 的特例,按照这里(在修复了残暴的语法之后):
NULL成功或失败时返回一个新元素。如果管道描述指定了多个顶级元素,则将所有元素放入 aGstPipeline中,然后返回。
我很确定,videotestsrc并且ximagesink是两个独立的顶级元素,但是,当我添加以下代码时,在检查之后src是null:
我懂了:
对于有问题的videotestsrc管道,以下是好的管道playbin:
因此,尽管文档说明了什么,但一切都指向给出元素而不是垃圾箱的问题。
我在这里想念什么?会导致不同行为的两条管道之间有什么区别?
c# - 在 WinForms 中显示 gstreamer-sharp 视频流
我正在寻找在 WinForms 应用程序中显示 gstreamer-sharp 提要的示例/帮助。
我正在使用 VS 2012 并为此版本的 VS 构建了“胶水”项目。我还安装了 glib-sharp、gstreamer-sharp 并被我的项目引用。我将 gstreamer bin 目录设置为我的项目的工作目录。
如果在按钮单击处理程序中有以下代码,我会得到 GStreamer D3D 视频接收器测试窗口,它会在我的表单顶部弹出。
我想在我正在考虑的 Panel 或 PictureBox 上的应用程序中显示流。
谢谢!
c# - 如何将应用程序/x-rtp 绑定与 gstreamer-sharp 结合使用?
我想知道如何/是否可以使用 gstreamer-sharp/C# for Windows 使用以下 gstreamer 绑定?
udpsrc 端口=1234 !应用程序/x-rtp,有效载荷=127!rtph264depay!avdec_h264 !视频转换!自动视频接收器
我不确定如何执行“application/x-rtp,payload=127”部分,我认为这就是我所缺少的,但我对此不是 100% 确定。我尝试使用的视频接收器是 dshowvideosink。
到目前为止,这是我的代码的相关部分。变量 videoDisplay 只是我表单上的一个 WinForms 面板控件。
c# - 从 Gst.Parse.Launch 处理 WinForms 中的 gstreamer 弹出窗口
嗨,有人知道是否可以让 gstreamer-sharp 将管道绑定字符串解析为 Gst.Pipeline 对象?
如果执行以下代码行,它将在内部 Gstreamer 窗口中弹出流。
我想知道是否有办法从 Parse 类中获取 Gst.Pipeline 对象,以便我可以处理 gstreamer 窗口的创建并将输出重定向到表单上的面板?
谢谢
winforms - gstreamer-sharp C# 应用程序部署
谁能告诉我部署使用 gstreamer-sharp 的 C# WinForms 应用程序的正确方法?我可以让它工作的唯一方法是将 gstreamer bin 目录设置为我的应用程序的工作目录。
我已经看到一些示例尝试临时将应用程序的路径设置为各种 gstreamer 目录,但这对我仍然不起作用,并且我得到了缺少 DLL 的错误。
我是否应该在我的应用程序的 bin driectory 中部署所有 gstreamer DLL?我希望他们运行安装程序,然后我的应用程序可以引用它。
对此的任何帮助将不胜感激。
xamarin.forms - Xamarin NuGet 还原失败。如何更改要恢复的包
所以我一直在尝试添加对一些 .dll 文件的本地引用。有一次,出于好奇,我将 Build 更改为支持 .Net 标准平台。然后,这不包括 Xamarin.Forms 作为我需要的参考。于是我又退了回去。但是,现在当它尝试将 Xamarin.Forms 还原为参考时,它会尝试查找我包含的参考并失败。由于此失败,它不仅没有包含我的自定义引用,而且还没有包含 Xamarin.Forms。
c# - GStreamer-sharp 在使用 SeekFlags.Flush 搜索时冻结
作为一种实践,我正在尝试将 GStreamer 示例从 c 转换为 c#,并且我坚持使用基本教程 4(https://gstreamer.freedesktop.org/documentation/tutorials/basic/time-management.html)。在示例中,搜索执行如下
我翻译成C#:
但是,在寻找之后,只播放了一帧,然后播放就卡住了。
这里有一个 C# 教程:(https://github.com/GStreamer/gstreamer-sharp/blob/master/samples/BasicTutorial4.cs)。但是,在本教程中,搜索是在没有SeekFlags.Flush(第 73 行)的情况下执行的。示例中的搜索有效,但执行时会延迟几秒钟。
那么,是SeekFlags.FlushC# GStreamer 绑定中的工作还是我在这里遗漏了什么?
我已经安装了最新的 GStreamer 和 GstSharp(版本 1.14.0)。
谢谢,汤姆
c# - GStreamer-Sharp - msg.type 抛出异常
我正在尝试让 GStreamer-Sharp 在 Windows 上工作。
我设法让 videotestsrc 通过 videoauto sink 播放,并认为我已经破解了。所以我突然开始建立一些总线消息处理......
msg.Type = 'msg.Type' 引发了“System.TypeInitializationException”类型的异常
我在这里束手无策......我尝试了 GStreamer 和 X64/X32 的不同二进制文件......我真的很想用 C# 而不是 C 或 Python 来构建它。有人见过这个吗?
谢谢,
马特