我有一个包含多个 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