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 编码流水线 CAN#39;t 设置视频帧速率和比特率

Guru**** 2581345 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626562/linux-am5728-gstreamer-encode-pipeline-can-t-set-video-framerate-and-bitrate

器件型号:AM5728

工具/软件:Linux

您好!

我使用此命令从以下网站捕获 MP4文件并将其编码为:。  processors.wiki.ti.com/.../Processor_Training:_Multimedia

gst-launch-1.0 -e v4l2src device=/dev/video1 num-buffers=1000 io-mode=4! '视频/x-raw、  
format=(string) YUY2、width=(int) 1280、height=(int) 720、帧速率=(fraction) 30/1'! VPE num-input-buffers=8!  
排队! ducatimpeg4enc bitrate = 4000! 排队! 太棒了! 真棒! 文件链接位置= y.mp4

但 MP4文件的属性显示  其帧速率为23。 文件的比特率为 4058 kbps。

但是、当我使用此命令时:

gst-launch-1.0 videotestsrc num-buffers=500! 'video/x-raw、format=(string) YUY2、width=(int) 1280、height=(int) 720、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 排队! ducatimpeg4enc bitrate = 4000! 排队! 太棒了! 真棒! 文件链接位置= x.mp4

它运行良好、  没有任何帧速率和 比特率问题:

我的摄像头可以提供30fps 的1280x720、我的 PSDK 版本为4.0。

那么、您能告诉我问题的原因、并给我一些建议来解决这个问题。

谢谢(&C)!

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

    我怀疑这不是编码器问题。
    但是、在 GST h264中存在一个内存泄漏问题、该问题已经得到修复、请参阅此主题中所述的此主题和 CP GST 库并进行尝试。
    e2e.ti.com/.../620539

    我建议您查看此 wiki 页面(调试章节):
    processors.wiki.ti.com/.../Linux_Core_VIP_User's_Guide

    由于使用 videotestsrc 的管道正常工作、请检查 v4l2src 是否正在丢弃帧。 我还建议您尝试使用 IO-mode=2或 auto。

    希望这对您有所帮助。

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

    您好!

    我尝试了以下命令:gst-launch-1.0 -e v4l2src device=/dev/video1 num-buffers=1000 io-mode=4! '视频/x-raw、  
    format=(string) YUY2、width=(int) 1280、height=(int) 720、帧速率=(fraction) 5/1'! VPE num-input-buffers=8!  
    排队! ducatimpeg4enc bitrate = 4000! 排队! 太棒了! 真棒! 文件链接位置= y.mp4

    但 MP4文件的属性显示  其帧速率也是23。 文件的比特率是3994 kbps 而不是4000。

    我查看 您提供给我的网站。

    所以 可以帮助 我,并给我另一些建议。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    捕获驱动程序能够以摄像机能够流式传输视频的速率进行捕获。 这可以使用 Yavta 工具进行验证-
    yavta -C60 -fYUYV -F/dev/null -s1280x720 /dev/video1.

    您观察到的比特率在您指定的 Ballpark 范围内似乎很好。 问题仅在于捕获速率。 v4l2src 插件似乎未能以正确的速率捕获视频流、或者未正确地进行时间戳记。 v4l2src 插件是开源的、不由 TI 维护。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题似乎在于 v4l2src 插件分配的缓冲区数量。 默认情况下、它分配4个缓冲区。 我们将其增加到8、并开始捕获实时数据。

    请在 GST 1.6顶部找到随附的 v4l2src 补丁。 您可以参考此补丁并在您使用的 GST 版本上应用。  

    e2e.ti.com/.../0001_2D00_v4l2src_2D00_Increase_2D00_minimum_2D00_num_2D00_buffers_2D00_by_2D00_4.patch

    您可以在使用 Yocto Build 应用修补程序后重新构建插件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    很抱歉、我真的不明白如何使用此补丁来重建插件、您能告诉我详细信息吗?
    谢谢,致以最诚挚的问候!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    正如 Manisha 所说、您应该遵循以下用户指南:
    processors.wiki.ti.com/.../Processor_SDK_Building_The_SDK


    v4l2src 是 gstreamer Good 插件的一部分。
    因此、您可以使用该命令 machine=am57xx-evm bitbake gstreamer1.0-plugins-g好、而不是 machine= bitbake Arago-core-tisdk-image (bitbake Arago-core-tisdk-image)、在指南中进行了介绍。
    要重建插件、请查看"强制重新编译"一章。

    希望这对您有所帮助。

    BR
    玛格丽塔