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 H.264编码器问题

Guru**** 2933120 points

Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656704/linux-am5728-gstreamer-h-264-encoder-issues

器件型号:AM5728

工具/软件:Linux

您好!

我想使用 SDK 4.01通过 AM5728 EVM 捕获和编码视频

以下是我的代码:

e2e.ti.com/.../4442.video_5F00_picture.c

它总是遇到问题:

**(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

**(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

**(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

**(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

**(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

您能为我的代码提供一些建议吗?

我在这个网站上问了这个问题:

但是,在征求了你以前的建议之后,我没有解决这个问题。

因此、我可以就该问题提供一些建议。

谢谢(&C)!

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

    您好!

    [引用 user="hsg"]

    它总是遇到问题:

    **(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(VIDEO:图片:1261):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    [/报价]


    我检查您的应用程序、似乎您正在运行具有两个编码分支的捕获流水线、对吧?

    我运行了类似的流水线:

    root@am57xx-EVM:~# gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8 ! 排队! ducatih264enc! h264parse! 救世主! 文件链接位置=1.avi t!  VPE num-input-buffers=8! 排队! ducatih264enc! h264parse! fakesink
    正在将管道设置为暂停...
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    μ^Chandling 中断。
    中断:正在停止管道...
    执行在0:17:31.032645098之后结束
    正在将管道设置为暂停...
    正在将管道设置为就绪...
    正在将管道设置为 NULL ...
    正在释放管道...
    root@am57xx-EVM:~#

    17分钟内、我没有观察到此错误。

    我应该等待多长时间?

    我还将检查您的代码。


    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    感谢您的快速回复。
    我尝试了您的流水线、它没有任何问题。
    嗯,17分钟就足够了。
    我测试了该流水线、该流水线与我的应用程序中的流水线非常相似:
    其输出为:
    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! TEE NAME=t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 10000! h264parse! 救世主! 文件链接位置=1.avi t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink
    正在将管道设置为暂停...
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1536):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    ./../../../gstreamer-1.8.3/libs/gst/base/gstbasesrc.c (2948):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流任务暂停、原因错误(-5)
    0:00:41.331333937后结束执行

    但这种现象有时会出现。

    可能是 T 要素影响了管道。您的看法是什么?
    非常感谢您对我的应用程序错误的帮助。

    谢谢(&C)!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    当我在应用程序中将"VPE"插件替换为"video"时、我忘记告诉您。它没有此问题、但输出视频的播放速度比原来更快。 因此、我必须使用 VPE 插件来实现我的功能。
    BR
    HSG
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="hsg"]GS-launch-1.0 v4l2src device=/dev/video1 IO-mode=4! TEE NAME=t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 10000! h264parse! 救世主! 文件链接位置=1.avi t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink[/quot]

    三通元件不能位于电容器滤波器之前。 但是我尝试了34秒后失败。

    管道应为:

    root@am57xx-EVM:~# gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8 ! 排队! ducatih264enc! h264parse! 救世主! 文件链接位置=1.avi t!  VPE num-input-buffers=8! 排队! ducatih264enc! h264parse! fakesink
    正在将管道设置为暂停...
    [5097.568994] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    μ^Chandling 中断。
    中断:正在停止管道...
    0:52:09.810355109后结束执行
    正在将管道设置为暂停...
    正在将管道设置为就绪...
    正在将管道设置为 NULL ...
    正在释放管道...
    root@am57xx-EVM:~#

    我运行了将近一个小时。

    BR
    玛格丽塔

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

    您好,

    我已催过与我的应用程序更相似的管道。5分钟后失败。

    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! TEE NAME=t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 10000! h264parse! 救世主! 文件链接位置=1.avi t! 排队! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink

    我已经在我的应用程序中更改了流水线。这是我基于类似流水线的应用程序。但是,我遇到了同样的问题。我应该更改 CMA 池的大小。我已经将其添加到 uEnv.txt 中:"console=ttyO2,115200n8 root=PARTCMA=000e27fb-02 rootfrw=128Mib=rootf4=rootextype-wait=rootf4=rootf4=rootf4b=rootfuid=root4prefu2rb=root4=rootfu2=root4b=rootfu2rb=root4prefu

    e2e.ti.com/.../video_5F00_picture1.c

    你有什么看法?

    BR

    HSG

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

    正如我在上一个后置三通元件中所说的、不能位于电容器滤波器之前。
    请在此处替换:
    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! …
    请参考我之前的帖子中的流水线、并根据此流水线更改您的应用。
    您可以看到、在我停止执行之前、此流水线工作了将近一个小时。

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

    您好!

    抱歉、我发布了错误的流水线。

    这是真实流水线的测试结果(失败大约5分钟):

    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 10000! h264parse! 救世主! 文件链接位置=1.avi t! 排队! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink
    正在将管道设置为暂停...
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1355):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    ./../../../gstreamer-1.8.3/libs/gst/base/gstbasesrc.c (2948):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流任务暂停、原因错误(-5)

    我的应用程序根据流水线进行了更改(大约5分钟后也失败)

    很抱歉我的最后一条消息。

    BR

    HSG

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

    您的流水线和我测试过的流水线之间的唯一区别是比特率。
    您是否可以在没有比特率属性的情况下尝试使用?

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

    您说得对、当比特率为10000及以上时、可能会重现此问题。
    现在请使用较低值。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    感谢您的测试和回复。
    我使用 gstreamer 工具获取 h264编码器的属性:
    GST-Inspect -1.0 ducatih264编码
    其输出为:
    数据速率 :比特率,单位为 kbit/sec
    标志:可读、可写
    整数。 范围:-1 - 102400默认值:2048
    但是、
    我使用了管道:
    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 4000! h264parse! 救世主! 文件链接位置=1.avi t! 排队! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink
    大约30分钟后失败
    此流水线:
    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8! 排队! ducatih264enc bitrate = 4000 level=41 profile=100! h264parse! 救世主! 文件链接位置=1.avi t! 排队! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink
    它持续了约40分钟
    通常、它的运行时间不是稳定的。
    此管道可以持续一个多小时:
    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! TEE NAME=t! VPE num-input-buffers=8! 排队! ducatih264enc! h264parse! 救世主! 文件链接位置=1.avi t! 排队! VPE num-input-buffers=8! 排队! 很棒的酒店! fakesink
    其比特率为默认值(2048kbps)。
    但比特率太低、无法清晰地拍摄视频、尤其是在风景复杂的情况下。
    那么、是否有任何方法可以增加比特率、但不能使流水线结束。
    谢谢(&C)!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我测试了低比特率(2048kbps)、管道工作正常。
    但我们需要更高的比特率才能满足视频质量。
    您能帮我们解决这个问题吗?
    谢谢(&C)!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我建议您检查 bitrate = 6000、例如、您应该设置 LEVEL=LEVEL-5、并使用 TEE 元素在您的一侧进行尝试。
    请记住、TEE 元件不是 v4l2src 的 TI 元件。
    在流水线中添加更多队列。
    我们将对此进行研究、当我们有东西时、我会再给您回复。

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

    Hsg 您好:

      从哪里可以获得 ducatijpegenc 插件,我发现 SDK 中没有此元素,谢谢。

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

    请打开一个新主题、其中包含您正在使用的问题和 PSDK 版本。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否发现了问题?如果是、您能否给我一些建议?
    谢谢(&C)!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们仍在研究这个问题。


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


    您旁边是否有任何流程?


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

    让我检查一下。

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

    您旁边是否有任何流程?
    我很着急,我不知道如何解决这个问题。
    您能给我一些其他可靠的视频文件编码方法吗?

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

    您好!

    [引用 user="hsg"],您能给我一些其他可靠地编码视频文件的方法吗?

    您是指 gstreamer、而不是 gstreamer?

    您可以尝试使用具有视频转换元素的流水线。 您可以添加视频装饰元素以调整 fps。

    以下是示例:

    gs-launch-1.0 v4l2src device=/dev/video1 typefind=true IO-mode=4! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'!   视频转换 ! 视频装饰! 视频/x-raw、帧速率=2/2! 排队!  TEE NAME=t! 多队列  ! 排队! ducatih264enc bitrate = 10000 level=LEVEL-5 Inter-interval=1! h264parse! 排队! 救世主! 文件链接位置=1.avi t! 排队! ducatih264enc!  h264parse! 排队! 真棒! 文件链接位置= 2.mov --gst-debug=1

    BR
    玛格丽塔

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

    是的、我的意思是、是否有任何其他可靠的管道或其他方式来对视频进行编码。
    我将使用 ffmpeg、但我将首先尝试该流水线。
    感谢您的新渠道!

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

    我认为这不是编码器问题。 但是、您可以尝试此命令 GST-CHECK | grep "enc "以检查还提供了哪些 GST 软件编码器。

    BR
    玛格丽塔