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.

[参考译文] TDA4VE-Q1:J721S2 SDK 9.02

Guru**** 2470720 points
Other Parts Discussed in Thread: AM68

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1444266/tda4ve-q1-j721s2-sdk-9-02

器件型号:TDA4VE-Q1
主题中讨论的其他器件:AM68

工具与软件:

我们正在尝试创建两个流水线、每个流水线都使用 v4l2h264enc 元素的实例。 为此、我们希望输出完全由 IDR 帧组成。 但是、无论额外控制属性设置为什么/如何、我们一开始只会获得1个 IDR 帧、其余都是 P 帧。 对于额外控制、我们设置为video_gop_size= 1和h264_i_frame_period= 1。 属性在首先创建和运行的管道中设置。 我们还尝试为两个管道设置属性、但没有更改。 对于设置管道和属性的方法、我们尝试了2种方法。

我们用于gst_element_factory_make构建管道并链接每个元素的第一种方式。 要在此处设置编码器的 Extra-control 属性、我们创建了一个用正确的键/值对填充的 GstStructure。 然后使用设置 GstStructureg_object_set。 这似乎根本不会影响输出流。

我们使用multi_cam_codec演示应用示例的第二种方式。 整个管道以字符串的形式编写、并使用启动gst_parse_launch。 同样、无论我们更改了属性、输出流都没有改变。

在应用中、我们通过在发送"新样本"信号时提取样本来将流保存到文件中。 然后使用检索缓冲区gst_sample_get_buffer。 然后使用映射缓冲区gst_buffer_map。 然后、使用映射缓冲区的大小成员将映射的缓冲区数据成员写入文件。 我们发现使用 V4L2 API 执行编码确实会使每个帧成为 IDR 帧、但 GStreamer 无法实现。 为了简单起见、我们想使用 GStreamer、如果能够帮助解决这个问题、我们会很感激。 我们将继续使用 SDK 9.2并避免升级到 SDK 10.0。

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

    Joe、您好!  

    对反应延迟深表歉意。  

    无需升级到10.0 SDK、9.02 SDK 支持此功能。 请参阅以下流水线:  

    gst-launch-1.0 is-live=true num-buffers=1000! video/x-raw、format=NV12、width=1920、height=1080、帧速率=30/1! v4l2h264enc extra-controls="enc、video_gop_size=1、prepend_sps_and_pps_to_idr=1 "! filesink location=idr.264

    如果运行 ffprobe -show_FRAMES -i idr.h264、可以看到每个帧都是 IDR 帧。  

    对于用于设置属性的方法、具有正确字符串的 gst_parse_launch 应该起作用。 尝试更新字符串以使用我在上面共享的属性、输出数据应包含所有 IDR 帧。

    此致!

    Brandon

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

    我们已经使用 GST_PARSS_LAUNCH 和 GST_ELEMENT_FACTORY 尝试了这些流水线设置、但生成的流在开头仍仅包含单个 I 帧。

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

    您好、Joe。  

    在转移到  gst_parse_launch 之前、您是否可以首先尝试我在命令行中共享的流水线?

    还请附加包含 gst_parse_launch 调用的.c 文件。

    谢谢!

    Brandon

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

    我们尝试了在进行一些修改后启动流水线、以使其适用于我们的输入、输入是单个文件中的 YUV 帧的集合。 我们尝试了以下两种管道:

    gst-launch-1.0 multifilesrc location=%010d.yuv ! video/x-raw,format=NV12,width=1920,height=1080, framerate=30/1, interlace-mode=progressive, colorimetry=bt601 ! v4l2h264enc extra-controls="enc,video_gop_size=1,prepend_sps_and_pps_to_idr=1" ! filesink location=idr.264

    gst-launch-1.0 multifilesrc location=%010d.yuv ! video/x-raw,format=NV12,width=1920,height=1080, framerate=30/1, interlace-mode=progressive, colorimetry=bt601 ! v4l2h264enc extra-controls="enc,video_gop_size=1,prepend_sps_and_pps_to_idr=1,h264_i_frame_period=1" ! filesink location=idr.264

    两个流水线都不会产生完全由关键帧组成的流。 由于它在命令行界面上仅使用 gst-launch-1.0无法正常工作、因此我们暂时不想发送 C 文件。  我们认为、这些命令行操作的故障应该足以让您在末端进行测试、然后再继续进行测试。  但如果没有、请告诉我们。

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

    您好、Brandon;

    我想知道您是否有关于我们问题的更多信息?

    谢谢!
    Joe

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

    您好、Joe。  

    很抱歉响应延迟。 假期结束后我刚刚回到工作岗位。  

    您是否能够在您的问题上取得更多进展? 如果没有,请与我分享您在上面分享的管道中使用的.YUV 文件。 此外、您是否能够尝试以下流水线:  

    gst-launch-1.0 videotestsrc is-live=true num-buffers=1000! video/x-raw、format=NV12、width=1920、height=1080、帧速率=30/1!  v4l2h264enc extra-controls="enc、video_gop_size=1、prepend_sps_and_pps_to_idr=1"! filesink location=idr.264

    这将使用 videotestsrc 来创建原始图像数据。 请尝试使用该器件来查看您的输出。 我已经在9.2中测试了它,我知道它是有效的,所以让我们确保您使用的图像支持它。

    此致!

    Brandon

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

    布兰登;

    感谢您的响应。

    提供的假数据源似乎确实只会生成 I 帧。

    我们还在 psdkra 测试数据集中提供的 TI 样例 NV12文件上对其进行了测试。 这些测试文件还只生成 I 帧。

    当我们在输入到编码器之前将实时数据 NV12图像保存到文件时、似乎会出现此问题。 在这些文件上运行 GStreamer 流水线不会只生成 I 帧。 我们使用了与 psdkra 测试数据集相同的流水线。

    随附了此测试数据以及一个文本文件、其中包括用于将图像保存到文件中的代码(使用通用过程将 OpenVX 图像映射到指针、并使用通用名称进行 fopen/write/close)。

    提前感谢、
    Joe Shidle

    e2e.ti.com/.../h264_5F00_test_5F00_yuvs.zip

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

    您好、Joe。  

    我正在尝试使用您的 YUV 文件重新创建、并找到导致此问题的根本原因。 我将在明天一天结束时向您提供最新情况。  

    谢谢!

    Brandon

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

    您好、Brandon;

    只是检查一下,看看是否有一个更新从你的终端

    提前感谢、
    Joe Shidle

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

    您好、Brandon;

    仍在想知道您对我们问题的调查是否有更新。  在我们的平台上、我们仍遇到此问题。

    提前感谢、
    Joe Shidle

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

    布兰登;

    另外、为了澄清一下、您是在 J721S2还是在其他一些 TDA4平台上进行测试?

    谢谢!
    Joe

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

    您好、Joe。

    我很抱歉、我上星期不在办公室、刚回来。 我尝试使用您共享的 YUV 文件和以下流水线创建您的问题:

    gst-launch-1.0 multifilesrc location=%010d.yuv ! video/x-raw,format=NV12,width=1920,height=1080, framerate=30/1, interlace-mode=progressive, colorimetry=bt601 ! v4l2h264enc extra-controls="enc,video_gop_size=1,prepend_sps_and_pps_to_idr=1,h264_i_frame_period=1" ! filesink location=idr.264

    我已附上生成的文件: e2e.ti.com/.../idr.264 当我查看生成的 ffprobe (ffprobe -show_frames idr.264)时,我可以清楚地看到,所有正在编码的帧都是关键帧,这表明它们是具有头文件和视频播放功能的 IDR。

    我正在使用 AM68 -它是 J721S2的 SK 版本。 我尝试了许多不同的流水线、并试图重现无法生成完全 I 帧的编码流的问题、但我失败了。 作为参考、我使用的 SDK 也是: https://www.ti.com/tool/download/SDK-AM68/09.02.00.04 PROCESSOR-SDK-LINUX

    您能否共享流水线的结果以便我看一看已编码的视频? 另外、请在开发板上运行"uname -a"、以便我们确保使用的内核版本相同。

    谢谢!

    Brandon