我正在用GStreamer构建我的第一个应用程序,我的任务是从互联网上获取一个流,使用CUDA对其进行修改(更改像素)以并行计算帧,并输出修改后的流。
为简单起见,目前我使用MP4视频在磁盘上读写,不使用CUDA。
我在这个网站上找到了一个例子:
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无法播放该文件。播放机可能不支持该文件类型,或者可能不支持用于压缩文件的编解码器。
给了我一个使用解码的提示,我找到了一个decdebin元素,并将其添加到源管道中,而不修改接收器:
"filesrc location="%s" ! decodebin ! appsink name=testsink",input_filename
之后,程序运行时间更长,崩溃并出现错误:
(CudaGStreamer.exe:8428):Glib-Error**:gMem.c:100:分配3110507字节失败
我已经在谷歌上搜索了这个问题,但还没有找到解决方案,所以我想也许你能告诉我我做错了什么。
版本:
Windows 8.1 x64
Visual Studio 2015
gStreamer-1.0-devel-x86-1.12.3.msi
gStreamer-1.0-x86-1.12.3.msi
加载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