0

我有一个包含多个 PNG 的未压缩 .tar 文件。我想从 TAR 中提取/解码 PNG,并将它们提供给 FFmpeg 进行动态解码。

FFmpeg 有一个 AVIOContext ,您可以在其中给它一个自定义的读取/搜索回调。

我正在考虑类似以下的内容(C++)。不检查它是否编译:

a = archive_read_new();
archive_read_support_filter_all(a);
archive_read_support_format_all(a);
r = archive_read_open_filename(a, "archive.tar", 10240); // Note 1
if (r != ARCHIVE_OK)
  exit(1);
while (archive_read_next_header(a, &entry) == ARCHIVE_OK) 
{
  // Found a file entry here. Assume that
  // it is a PNG file. Let's feed the data to FFmpeg for decoding.

  uint8_t buffer[4096];

  // First allocate out AVIOContext (FFmpeg)
  auto *pIoCtx = avio_alloc_context(buffer,
                     4096, // ?
                     0,
                     &a, // Pass in a custom value as the opaque
                     read_data, // Callback to read data
                     nullptr, // Callback to write data
                     seek_data); // Callback to seek data

   // Feed IOCtx to FFmpeg's libavformat
   ...
}

// Clean up
...

我想知道这是否可能,以及我如何将它们放在一起。我最大的困惑是我想对单个archive_entry而不是整个archive.

Ubuntu v20.04,gcc 9.3

4

0 回答 0