主题中讨论的其他器件: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。