Ffmpeg输出文件无法立即使用

vir*_*iya 7 android ffmpeg

我在Android上执行拆分视频Ffmpeg命令,它创建output_%d文件到SD卡(外部存储)

执行并完成命令后,在我打开Gallery App之前,文件不会立即显示

我尝试为新创建的目录运行媒体扫描程序但我看到该目录为空并且没有立即可用的文件.

Jer*_*ome 0

“不立即出现”是什么意思?

1/ 使用文件浏览器?

该问题是由于使用MTP协议造成的。您必须使用 MediaScannerConnection 类重新扫描文件。

如果您不想重新启动或开发某些内容,那么使用 google play 中的媒体扫描应用程序会有所帮助。

2/来自java?

您可以尝试列出该文件夹的所有文件,然后对每个文件执行媒体扫描仪(而不是在目录上执行)。

Context ctx = <your_context>;
File directory = new File("<your_path>");
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++)
{
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    intent.setData(Uri.fromFile(files[i]));
    context.sendBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)

如果扫描完成后您需要立即得到结果,则需要 MediaScannerConnectionClient

private static final class Client implements MediaScannerConnectionClient
{   private final String path;
    private final String mimeType;
    public MediaScannerConnection connection;

    public Client(String path, String mimeType)
    {   this.path = path;
        this.mimeType = mimeType;
    }

    @Override
    public void onMediaScannerConnected()
    {   connection.scanFile(path, mimeType);
    }

    @Override
    public void onScanCompleted(String path, Uri uri)
    {   connection.disconnect();
    }
};

public static void scanFile(Context context, String path, String mimeType)
{   Client client = new Client(path, mimeType);
    MediaScannerConnection connection = new MediaScannerConnection(context, client);
    client.connection = connection;
    connection.connect();
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,这应该在 ffmpeg splitter 应用程序中完成。