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/DRA746:播放器无法正常播放视频

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663088/linux-dra746-video-playback-is-not-working-properly-with-playbin

器件型号:DRA746

工具/软件:Linux

大家好、

 

我们遇到了视频播放问题。 要演示此问题、请在此处找到所附的测试应用源和二进制文件。 要运行测试应用程序、您可以使用以下命令。 请将此视为紧急请求。

 

#export XDG_RUNTIME_DIR=/var/run/root/1000 (这可能会因您而异)

#./testApp 文件:///home/root/B01_Baseline1.0_1280_720.MP4 20 5.

 

在上面的命令中、您可以使用不同的视频。 第2个参数(即20)是视频播放的时间,第3个参数是要重复的次数(即5表示将播放6次)。

 

问题是应用程序仅显示视频前两次、之后显示的视频似乎正在运行、但没有视频。 应用程序使用以下管道。 我在这里附加了两个日志、一个带有 GST_DEBUG、另一个带有 GST_DEBUG 和 WAYLAND_DEBUG 日志、当运行上述命令时。

 

GST-LAUNCH-1.0 playbin UI=文件:///home/root/B01_Baseline1.0_1280_720.MP4视频接收器= waylandsink

 

我们的软件基于3.02.00.03处理器 SDK Linux Automotive。 我们使用的是下面的座机接收器。

 

SRC_URI ="git://git.ti.com/glsdk/gstreamer1-0-plugins-bad.git;协议= git;分支=${branch}\"

SRCREV_OMAP-a15 ="eb41f1c8fde05f87587c83d157835e3b2d19a298"

 

还应遵循应用的修补程序。

 

文件://0001-kmssink-remove-dce-dependencies.patch \

文件://0002-kmssink-add-YUV-support.patch \

文件://0001-gstwaylandsink-add-input-format-I420-support.patch \

 

 谢谢、此致、

Vikash

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

    e2e.ti.com/.../TestApp.7ze2e.ti.com/.../teraterm_5F00_desktop_5F00_gst.loge2e.ti.com/.../teraterm_5F00_desktop_5F00_gst_5F00_wl.log

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

    我已将您的问题转交给一位专家征求意见。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Vikash、
    我无法运行您的 testApp。 我在执行应用程序时看到一些错误。

    我尝试使用 PSDKLA3.04和 gsttestplayer 来重现此问题。 我无法重现此问题。
    gsttestplayer 不使用 playbin,但会根据流类型创建流水线显式元素。

    请参阅
    processors.wiki.ti.com/index.php

    1)使用以下命令创建 config.txt
    启动0 /home/root/B01_Baseline1.0_1280_720_h264.MP4
    睡眠20.
    停止0
    回卷1


    2)将 B01_Baseline1.0_1280_720.MP4重命名为 B01_Baseline1.0_1280_720_h264.MP4、以便 gsttestplayer 从其名称中识别流的格式。
    3)执行 gsttestplayer -s landsink -r 720x480 -c config.txt

    在循环中使用 playbin 运行 gstreamer 流水线也不会在以下命令中重现此问题。
    而事实是如此
    操作
    GST-LAUNCH-1.0 playbin UI=文件:///usr/share/ti/video/HistoryOfTIAV-480p.mp4视频接收器= waylandsink
    睡眠1
    完成

    我一直在同时运行这两个器件、看到每个流水线都成功启动、并在显示屏上显示视频。

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

    您在附带的 testApp 中观察到什么错误? 如果需要、您可以编译应用程序、因为我也共享了源代码。

    我认为与我共享的应用程序进行检查很重要。 原因它会以编程方式创建管道,并重复将管道状态设置为 Playing 和 NULL,应用程序不使用“GS-launch-1.0”,也不使用我们用于实现 USB 视频播放功能的类似方法。

    同一应用程序在其他平台上工作正常。

    如果您需要更多信息、请告诉我。

    它也适用于我。 即"在循环中运行包含 playbin 的 gstreamer 流水线"。 Eeven 跟踪流水线也适用于我。

    gst-launch-1.0文件 rc location=/home/root/B01_Baseline1.0_1280_720.MP4! qtdemux! h264parse! ducatih264dec! 陆上接收机


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

    您是否能够重现此问题?

    此致、
    Vikash
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Vikash、
    我尝试了您的 testApp 可执行文件、我看到视频只显示一次。 我正在尝试了解您的代码。 如果有任何进展、将向您更新。

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

    root@dra7xx-EVM:~#./testApp 文件:///home/root/bebe_h264.mp4 10 4.
    *********** 测试*****
    用法:./testApp 文件名(秒)

    (testApp:1534):glib-GObject-warning **:g_object_set_valist:对象类"GstWaylandSink"没有名为'surface-id'的属性

    小问题*** 开始播放视频********
    将状态设置为播放异步
    GMainThread 已启动
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态就绪-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->正在播放

    小问题*** 开始停止视频********
    GSTPlayer::stop()获得播放状态:[正在播放]挂起:[void_pending]
    CgstBasePlayer::gstBusCallback()收到状态更改的消息:元素“URI 流水线”状态正在播放-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->就绪
    小问题*** 结束停止视频******

    小问题*** 开始播放视频********
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    将状态设置为播放异步
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态就绪-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->正在播放

    小问题*** 开始停止视频********
    GSTPlayer::stop()获得播放状态:[正在播放]挂起:[void_pending]
    CgstBasePlayer::gstBusCallback()收到状态更改的消息:元素“URI 流水线”状态正在播放-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->就绪
    小问题*** 结束停止视频******

    小问题*** 开始播放视频********
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    将状态设置为播放异步
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态就绪-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->正在播放

    小问题*** 开始停止视频********
    GSTPlayer::stop()获得播放状态:[正在播放]挂起:[void_pending]
    CgstBasePlayer::gstBusCallback()收到状态更改的消息:元素“URI 流水线”状态正在播放-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->就绪
    小问题*** 结束停止视频******

    小问题*** 开始播放视频********
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    将状态设置为播放异步
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态就绪-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->正在播放

    小问题*** 开始停止视频********
    GSTPlayer::stop()获得播放状态:[正在播放]挂起:[void_pending]
    CgstBasePlayer::gstBusCallback()收到状态更改的消息:元素“URI 流水线”状态正在播放-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->就绪
    小问题*** 结束停止视频******

    小问题*** 开始播放视频********
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    将状态设置为播放异步
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态就绪-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->正在播放

    小问题*** 开始停止视频********
    GSTPlayer::stop()获得播放状态:[正在播放]挂起:[void_pending]
    CgstBasePlayer::gstBusCallback()收到状态更改的消息:元素“URI 流水线”状态正在播放-->已暂停
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态已暂停-->就绪
    小问题*** 结束停止视频******

    小问题*** 开始播放视频********
    CgstBasePlayer::gstBusCallback()获取状态更改的消息:元素“URI 流水线”状态为 NULL -->就绪
    将状态设置为播放异步

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

    是的、视频有时会显示一次、有时会显示两次。 如果您需要更多信息、请告诉我。

    此致、
    Vikash
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Vikash、
    您是否尝试过此 gsttestplayer? 请告诉我您的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ramprasad、

    我确信 gsttestplayer 可以正常工作、因为您已经过测试、gsttestplayer 不使用 playbin、而是根据流类型创建流水线显式元素。 此外、正如我提到过的、具有显式元素的其他方法也适用于我。

    由于我们客户的 USB 视频播放功能要求、我们需要按照我在 testApp 中演示的方式播放视频。 请您在收到输入后立即进行更新。

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

    请您优先考虑此问题、因为它对我们的功能版本来说是阻止的。 请您就我们何时可以对此进行修复提供一些想法吗?

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

    您好 Vikash、

    而真正循环对显式流水线和 playbin 都有效。

    您的应用程序在哪个平台上工作? Gtreamer 版本是什么?

    谢谢

    RAM

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

    您好 RAM、

    应用程序正在使用 NXP 的 i.MX6 (具有 lingagesink、gstreamer-1.8.1)和英特尔的 apollolake (具有 mfxsink、gstreamer-1.8.3)。

    此致、
    Vikash

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Vikash、
    我已经确定了从第二次开始不显示视频的原因。 因为它对您来说是一个阻止程序、我建议在此处进行修复。 请进行此更改并从 GS-Bad 创建您的 libgstwaylandsink.so

    ---- A/ext/wayland/gstwaylandsink.c
    ++ b/ext/wayland/gstwaylandsink.c
    @@-341、6 +341、7 @@ GST_wayland_sink_change_state (GstElement * Element、GstStateChange transition)
    开关(转换){
    案例 GST_State_change_paused_TO_READY:
    GST_buffer_replace(&sink->last_buffer、NULL);
    + g_atural_int_set (&sink->refraint_pending、false);
    if (sink->window){
    if (gst_wl_window_in_toplevel (sink->window)){
    g_clear_object (&sink->window);

    我已经使用第4个参数设置为超过50的参数测试了您的应用。 我现在一直看视频。 请测试此问题并确认问题是否已解决。
    我们将在发布后更新中正式共享该补丁。

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

    感谢您的快速支持。 我将测试建议的修复程序、并更新您。

    此致、
    Vikash
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 RAM。 问题在测试应用程序中似乎已得到解决。

    此致、
    Vikash
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Vikash 确认这一点。 请将此主题标记为已验证