This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:GStreamer MJPEG 解码问题

Guru**** 2619505 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/655943/linux-am5728-gstreamer-mjpeg-decode-issue

器件型号:AM5728
主题中讨论的其他器件:冲击

工具/软件:Linux

大家好、我遇到了分辨率为800x600或320x200的流媒体 MJPEG 视频问题、其中 gstreamer 崩溃的原因如下:

(GST-LAUNCH-1.0:1602):Gstreamer-critical **:GST_buffer_peek_memory:断言"GST_is_buffer (buffer)"失败

**(GST-LAUNCH-1.0:1602):严重**:GST_FD_MEMORY_GET_FD:断言'em!= NULL'失败
捕获到 SIGSEGV
旋转。 请运行'gdb GST-launch-1.0 1602'以继续调试、按 Ctrl-C 退出、或按 Ctrl-\转储内核。

发生碰撞的概率约为一半。

我使用二进制 SDK 在 software-dl.ti.com/.../am57xx-evm-linux-sdk-bin-04.02.00.09.tar.xz 上进行测试

GStreamer 管道如下:

ADR=1美元
Cx=800
CY=600
X=$Cx
Y=$CY
gst-launch-1.0 souphttpsrc 位置="http://$ADR/axis-cgi/mjpg/video.cgi?resolution=${CX}x${CY}&compression=30&fps=24"! 多部分多路复用! 排队! jpegparse! 极好的体验! VPE! 'video/x-raw、width='$X'、height='$Y! 陆上接收机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉耽误你的时间、但我在我这边做了一些测试。
    我还能够通过该流水线重现错误:
    root@am57xx-EVM:~# gst-launch-1.0 videotestsrc! VIDEO/x-RAW、FORMAT=NV12、width=1280、height=720、framerate=30/1! 很棒的酒店! jpegparse! 极好的体验! VPE! VIDEO/x-RAW、FORMAT=NV12、width=320、height=200! landsink 同步= false -e
    正在将管道设置为暂停...
    [571.646722] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版
    管道是 PREROLLING ...
    管道是 PREROLLED...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock

    (GST-LAUNCH-1.0:1373):Gstreamer-critical **:GST_buffer_peek_memory:断言"GST_is_buffer (buffer)"失败

    **(GST-LAUNCH-1.0:1373):严重**:GST_FD_MEMORY_GET_FD:断言'em!= NULL'失败
    捕获到 SIGSEGV
    #0 bb6ac2a40 in poll () at ./sysdeps/unix/syscall-template.S:84
    ??中的#1 bb6c05b84 ()来自/usr/lib/libglib-2.0.so.0
    旋转。 请运行'gdb GST-launche-1.0 1373 '以继续调试、按 Ctrl-C 退出、或按 Ctrl-\转储内核。
    μ^Chandling 中断。
    中断:正在停止管道...
    EOS on shutdown enabled --强制 EOS 在管线上

    我更频繁地(几乎每次)观察到此误差。 我尝试在我的案例中使用视频录制来重新取悦 VPE。 未观察到错误。

    但是、我在我的一侧尝试了该流水线:
    gst-launch-1.0 -v videotestsrc! VIDEO/x-RAW、FORMAT=NV12、width=1280、height=720、framerate=30/1! 很棒的酒店! jpegparse! 极好的体验! 排队! VPE! VIDEO/x-RAW、FORMAT=NV12、width=320、height=200! landsink sync-false -e -v
    我运行了大约20次、但我无法复制。
    此外、还在流水线中添加了-e 选项、以确保在使用 Ctrl+c 时发送 EOS。

    希望这对您有所帮助。

    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最后一个流水线不是解决方案、因为如果不了解潜在原因、它可能会将崩溃的可能性降低到1/1000。

    这种情况比崩溃一半的情况要糟糕得多、因为它可以在不遇到此问题的情况下通过开发和测试阶段。 它将会投入生产。
    如果开发人员使用 GST 发布、但未检测到这种情况、则会造成灾难。 它可能是闭路电视、大部分仍在房间内、操作员不会注意到摄像头不工作、因为它在碰撞时显示图像。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    你是对的!
    我使用 h264代码和 MPEG4运行流水线、但未观察到问题(没有队列)。
    如果未按如下方式设置 VPE 之后的电容滤波器、则不会出现此问题:
    GST-LAUNCH-1.0视频测试 src! VIDEO/x-RAW、FORMAT=NV12、width=320、height=200、framerate=30/1! 很棒的酒店! jpegparse! 极好的地方! landwaysink 同步=错误
    如果使用 kmsink、它似乎不可重现。
    您能否尝试两个建议、它们是否都能与您一起工作? 它们是否也适合您的用例。
    我们仍在调查此问题。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    投资是否有任何成果,还是还很早?

    遗憾的是、我们还需要重新扫描视频、同时使用多个视频、因为客户需要特定的屏幕布局。

    看起来只是在之前的帖子中使用流水线、但当我在结尾添加缩放电容器滤波器时、我可能会在大约1/10的情况下重现相同的问题。

    如果有方法从 VPE 获取输出并进行加料重新分料、它也会起作用。 视频分频不是很可行、因为它需要太多 CPU。

    我们的理想解决方案是可以在 kmsSINK /全屏陆地应用中显示的硬件加速镀层。

    可以编译 gstreamer gl 插件。 当前未编译、因为 autoconf 找不到库(例如找不到 wayland-EGL 库)。 但我可能会发现、编译后、它也会很慢、因为它需要将缓冲区复制到纹理而不使用 DRI。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我也不会观察此流水线的误差:
    GS-launch-1.0 -e videotestsrc \
    !! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480、framerate=(fraction) 30/1'
    !! 排队! 很棒的酒店! 排队! jpegparse! 排队! ducatijpegdecvpe \
    !! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'! 队列\
    !! landwaysink 同步=错误

    管道似乎也与 kmsink 一起工作。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这看起来是可行的、但它并不是我们的问题、因为它不涉及扩展。 如果在第一个和第二个滤波器中使用不同的分辨率、我仍然会遇到错误、例如:

    首先、仍然具有 width=(int) 640、height=(int) 480 、但只需将第二个更改为 width=(int) 800、height=(int) 600
    或者、如果我使第一个滤波器保持不变、但将输出1更改为诸如 width=(int) 111、height=(int) 232之类的非标准值
    然后我得到完全黑的窗口。

    此外、我还尝试了添加第二个 VPE 进行缩放是否会有所帮助。 来测试 VPE
    视频测试 src! CAPS1! VPE! CAPS2! 然后、它会正确调整大小。  

    但是、在下面的流水线中、我会得到大约十分之一的尝试与之前相同的 segfault。
    您需要更换 ! landwaysink sync-false 与:

    !! VPE!  'video/x-raw、format=(string) NV12、width=(int) 1040、height=(int) 333'! 陆上接收机

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我运行了大约20次此流水线:

    gst-launch-1.0 -e videotestsrc! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480、framerate=(fraction) 30/1'! 排队! 很棒的酒店! 排队! jpegparse! 排队! 极好的地方! 'video/x-raw、format=(string) NV12、width=(int) 480、height=(int) 320'! 排队! 陆上接收机

    似乎工作正常、我没有在我的一侧观察到 seg.fault。

    我执行此流水线还:

    root@am57xx-EVM:~# gst-launch-1.0 -e videotestsrc! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480、framerate=(fraction) 30/1'! 排队! 很棒的酒店! 排队! jpegparse! 排队! 极好的地方! 'video/x-raw、format=(string) NV12、width=(int) 111、height=(int) 232'! 排队! 陆上接收机

    /GstPipeline0/GstWaylandSink:waylandsink.GstPad:SINK:SINK:SINK:CAPS ="VIDEO/x-RAW\、\ FORMAT\=(STRING\) NV12\、\ width\=(int\) 111\、\ height\=(int\) 232\、\(framerate\) 30\(frame\)分数)

    我不会看到"黑"屏幕、如您所见。

    另请检查此补丁:

    http://git.ti.com/glsdk/gstreamer1-0-plugins-bad/commit/3a5a7f778b3c3259faab04748e7b10f0fd696aab

    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不确定原因、也许您使用的是较早的 SDK 版本、而这是后来添加的?

    至于管道、我主要通过同时启动管道来获取错误、将其保存到文件中、然后再使用

    ` I in `seq 1 5 μ A;请执行
     显示&
    完成

    当我使用时、已应用了最新的 SDK 补丁(我将源代码/二进制文件作为二进制文件进行了测试、消除了我们一侧编译错误的可能性)。 我恢复了它、对 MJPEG 没有影响。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我正在使用最新的 PSDK (4.02)。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我迟到了、正在处理不同的项目。 经过几次测试后、我发现有些分辨率可以工作、有些分辨率会黑屏、有些屏幕会扭曲、有些管道不会启动。 您的是一个正常工作的人。
    我在640x480->140x180处看到黑屏
    640x480->488x328卡在无限循环中尝试分配内存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我将进行检查并告知您结果。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请打开解决问题的新主题、将其与 SEG 分开。 故障问题。

    BR
    玛格丽塔