gpt4 book ai didi

c++ - 使用 gstreamer 的 appsrc 和 appsink 修改视频

转载 作者:行者123 更新时间:2023-11-30 05:07:31 24 4
gpt4 key购买 nike

我正在使用 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 cannot play the file. The Player might not support the file type or might not support the codec that was used to compress the file.

我得到了使用解码的提示,我找到了一个 decodebin 元素并将其添加到源管道而不修改接收器:

"filesrc location=\"%s\" ! decodebin ! appsink name=testsink", input_filename

在该程序运行时间更长并因错误而崩溃之后:

(CudaGStreamer.exe:8428): GLib-ERROR **: gmem.c:100: failed to allocate 3110507 bytes

我已经在谷歌上搜索了这个问题,但还没有找到解决方案,所以我想知道也许你可以告诉我我做错了什么。

版本:

代码:https://pastebin.com/GTSiaFXd

最佳答案

  1. 当您修改数据而不使用解码器时它不起作用,因为您正在破坏压缩的二进制数据。媒体播放器无法播放流,因为您已损坏它。
  2. 您收到 gst 内存错误的主要原因是您没有对 appsink 中的缓冲区之一执行 unref(),这会导致内存泄漏

关于c++ - 使用 gstreamer 的 appsrc 和 appsink 修改视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47365159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com