我正在使用 GStreamer 构建我的第一个应用程序,我的任务是从互联网获取流,使用 CUDA 修改它(更改像素)以并行计算帧,并输出修改后的流。
为了简单起见,现在我使用 MP4 视频在磁盘上读写,不使用 CUDA。
我在这个网站上找到了一个例子:
https://fossies.org/linux/gst-plugins-base/tests/examples/app/appsink-src.c https://fossies.org/linux/gst-plugins-base/tests/examples/app/appsink-src.c
布置结构。源和接收器管道作为 gst_parse_launch() 的参数:
"filesrc location=\"%s\" ! appsink name=testsink", input_filename
"appsrc name=testsource ! filesink location=\"%s\"", output_filename
当没有对框架进行任何更改时,该程序可以运行。但是当我尝试设置 GstMapInfo.data 中的值时,我无法再打开视频:
Windows Media Player 无法播放该文件。播放器可能不支持该文件类型,或者可能不支持用于压缩文件的编解码器。
我得到了使用解码的提示,并且我找到了一个decodebin元素并将其添加到源管道而不修改接收器:
"filesrc location=\"%s\" ! decodebin ! appsink name=testsink", input_filename
之后该程序运行时间更长并因错误而崩溃:
(CudaGStreamer.exe:8428): GLib-ERROR **: gmem.c:100: 无法分配 3110507 字节
我在谷歌上搜索了这个问题,但还没有找到解决方案,所以我想知道也许你可以告诉我我做错了什么。
版本:
-
Windows 8.1 x64
-
视觉工作室 2015
-
gstreamer-1.0-devel-x86-1.12.3.msi
-
gstreamer-1.0-x86-1.12.3.msi
两者均加载自https://gstreamer.freedesktop.org https://gstreamer.freedesktop.org
-
GTK+ 3.6.4(已修补)
-
GLib 2.34.3
GTK+ 包加载自http://www.tarnyko.net/repo/gtk3_build_system/gtk+-bundle_3.6.4-20130513_win32.zip http://www.tarnyko.net/repo/gtk3_build_system/gtk+-bundle_3.6.4-20130513_win32.zip
Code: https://pastebin.com/GTSiaFXd https://pastebin.com/GTSiaFXd